Compare commits

...

1 Commits

Author SHA1 Message Date
Ed
a02cebd1de fail experiment 2024-08-06 23:40:27 +03:00
7 changed files with 141 additions and 2 deletions

View File

@@ -1,4 +1,5 @@
using Content.Shared.Whitelist;
using Content.Shared._CP14.ItemPlacerParenting;
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
namespace Content.Shared.Placeable;
@@ -7,7 +8,7 @@ namespace Content.Shared.Placeable;
/// Detects items placed on it that match a whitelist.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
[Access(typeof(ItemPlacerSystem))]
[Access(typeof(ItemPlacerSystem), typeof(CP14ItemPlacerAutoParentSystem))]
public sealed partial class ItemPlacerComponent : Component
{
/// <summary>

View File

@@ -0,0 +1,9 @@
namespace Content.Shared._CP14.ItemPlacerParenting;
/// <summary>
///
/// </summary>
[RegisterComponent, Access(typeof(CP14ItemPlacerAutoParentSystem))]
public sealed partial class CP14ItemPlacerAutoParentComponent : Component
{
}

View File

@@ -0,0 +1,65 @@
using Content.Shared.Movement.Pulling.Events;
using Content.Shared.Placeable;
using Content.Shared.Tag;
using Content.Shared.Throwing;
using Robust.Shared.Physics.Events;
namespace Content.Shared._CP14.ItemPlacerParenting;
/// <summary>
///
/// </summary>
public sealed class CP14ItemPlacerAutoParentSystem : EntitySystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14ItemPlacerAutoParentComponent, ItemPlacedEvent>(OnItemPlaced);
SubscribeLocalEvent<CP14ItemPlacerAutoParentComponent, ThrownEvent>(OnThrown);
SubscribeLocalEvent<CP14ItemPlacerAutoParentComponent, EndCollideEvent>(OnEndCollide);
}
private void OnEndCollide(Entity<CP14ItemPlacerAutoParentComponent> ent, ref EndCollideEvent args)
{
if (!TryComp<ItemPlacerComponent>(ent, out var itemPlacer))
return;
Detach(args.OtherEntity, ent);
}
private void Detach(EntityUid item, EntityUid parent)
{
if (Transform(item).ParentUid == parent)
_transform.SetParent(item, Transform(parent).ParentUid);
}
private void OnThrown(Entity<CP14ItemPlacerAutoParentComponent> ent, ref ThrownEvent args)
{
if (!TryComp<ItemPlacerComponent>(ent, out var itemPlacer))
return;
foreach (var placed in itemPlacer.PlacedEntities)
{
Detach(placed, ent);
}
}
private void OnItemPlaced(Entity<CP14ItemPlacerAutoParentComponent> ent, ref ItemPlacedEvent args)
{
if (HasComp<CP14ItemPlacerParentedComponent>(ent))
return;
if (!TryComp<ItemPlacerComponent>(ent, out var itemPlacer))
return;
_transform.SetParent(args.OtherEntity, ent);
AddComp<CP14ItemPlacerParentedComponent>(ent);
}
private void Detach(EntityUid target)
{
}
}

View File

@@ -0,0 +1,9 @@
namespace Content.Shared._CP14.ItemPlacerParenting;
/// <summary>
///
/// </summary>
[RegisterComponent, Access(typeof(CP14ItemPlacerAutoParentSystem))]
public sealed partial class CP14ItemPlacerParentedComponent : Component
{
}

View File

@@ -10,6 +10,7 @@
tags:
- Egg
- Meat
- CP14Platter
- type: Food
trash: Eggshells
- type: Sprite

View File

@@ -0,0 +1,51 @@
- type: entity
id: CP14BasePlate
abstract: true
parent: BaseItem
description: A container for storing and utilizing an essential element of life such as food.
components:
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.25,-0.25,0.25,0.25"
mask:
- ItemMask
fix2:
hard: false
shape:
!type:PhysShapeAabb
bounds: "-0.25,-0.25,0.25,0.25"
layer:
- ItemMask
- type: DamageOtherOnHit
damage:
types:
Blunt: 5
- type: CP14ItemPlacerAutoParent
- type: ItemPlacer
maxEntities: 4
whitelist:
tags:
- CP14Platter
- type: PlaceableSurface
- type: CollisionWake
enabled: false
- type: entity
id: CP14TestPlate
parent: CP14BasePlate
name: wooden plate
components:
- type: Sprite
sprite: Objects/Consumable/Food/plates.rsi #TODO resprite
state: plate
- type: Item
shape:
- 0,0,1,0
storedOffset: 0,-6
- type: DamageOnLand
damage:
types:
Blunt: 5

View File

@@ -27,3 +27,6 @@
- type: Tag
id: CP14AmbientWater
- type: Tag
id: CP14Platter