construction

This commit is contained in:
Kara D
2021-08-05 21:10:06 -07:00
parent e460285187
commit 5af4c06231
8 changed files with 388 additions and 10 deletions

View File

@@ -0,0 +1,29 @@
using System.Threading.Tasks;
using Content.Shared.Construction;
using Robust.Server.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.Utility;
namespace Content.Server.Construction.Completions
{
[DataDefinition]
public class SetLayerVisibility : IGraphAction
{
[DataField("layer")] public int Layer { get; private set; } = 0;
[DataField("value")] public bool Value { get; private set; } = true;
public async Task PerformAction(IEntity entity, IEntity? user)
{
if (entity.Deleted) return;
if (!entity.TryGetComponent(out SpriteComponent? sprite)) return;
// That layer doesn't exist, we do nothing.
if (sprite.LayerCount <= Layer) return;
sprite.LayerSetVisible(Layer, Value);
}
}
}

View File

@@ -0,0 +1,80 @@
- type: entity
id: WindoorAssembly
name: windoor assembly
description: It opens, it closes, and you can see through it!
parent: BaseStructure
components:
- type: InteractionOutline
- type: Sprite
netsync: false
drawdepth: FloorObjects
sprite: Structures/Doors/Windoors/windoor.rsi
layers:
- state: assembly
- state: panel_open
visible: false
- type: Physics
fixtures:
- shape:
!type:PhysShapeAabb
bounds: "-0.2,-0.49,-0.49,0.49"
mass: 30
mask:
- Impassable
- VaultImpassable
- type: Anchorable
- type: Pullable
- type: Rotatable
- type: Damageable
resistances: metallicResistances
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 300
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:SpawnEntitiesBehavior
spawn:
MetalRod:
min: 1
max: 3
- type: Construction
graph: windoor
node: assembly
placement:
mode: SnapgridCenter
- type: entity
id: WindoorAssemblySecure
name: secure windoor assembly
description: It opens, it closes, and you can see through it! This one looks tough.
parent: WindoorAssembly
components:
- type: Sprite
netsync: false
drawdepth: Mobs
sprite: Structures/Doors/Windoors/windoor.rsi
layers:
- state: secure_underlay
- state: assembly
- state: panel_open
visible: false
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 600
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:SpawnEntitiesBehavior
spawn:
MetalRod:
min: 2
max: 4
- type: Construction
graph: windoor
node: assemblySecure

View File

@@ -50,12 +50,16 @@
ShardGlass:
min: 1
max: 2
MetalRod:
min: 1
max: 3
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: AccessReader
- type: Airlock
openPanelVisible: true
- type: Door
weldable: false
openSound:
path: /Audio/Machines/windoor_open.ogg
closeSound:
@@ -77,6 +81,9 @@
animatedPanel: false
openUnlitVisible: true
- type: WiresVisualizer
- type: Construction
graph: windoor
node: windoor
- type: entity
id: BaseSecureWindoor
@@ -118,13 +125,14 @@
ShardGlass:
min: 1
max: 2
- !type:SpawnEntitiesBehavior
spawn:
MetalRod:
min: 1
max: 3
min: 2
max: 4
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: Construction
graph: windoor
node: windoorSecure
# "0.49,-0.49,-0.49,-0.2"
# to:

View File

@@ -0,0 +1,228 @@
- type: constructionGraph
id: windoor
start: start
graph:
- node: start
edges:
- to: assembly
completed:
- !type:SetAnchor
value: false
steps:
- material: Steel
amount: 4
doAfter: 2
- to: assemblySecure
completed:
- !type:SetAnchor
value: false
steps:
- material: Plasteel
amount: 4
doAfter: 2
- node: assembly
entity: WindoorAssembly
actions:
- !type:SnapToGrid {}
- !type:SetAnchor {}
edges:
- to: glass
conditions:
- !type:EntityAnchored {}
steps:
- material: Glass
amount: 5
doAfter: 1
- to: start
conditions:
- !type:EntityAnchored
anchored: false
completed:
- !type:SpawnPrototype
prototype: SheetSteel1
amount: 4
- !type:DeleteEntity {}
steps:
- tool: Welding
doAfter: 2
- node: assemblySecure
entity: WindoorAssemblySecure
actions:
- !type:SnapToGrid { }
- !type:SetAnchor { }
edges:
- to: glassSecure
conditions:
- !type:EntityAnchored { }
steps:
- material: ReinforcedGlass
amount: 5
doAfter: 1
- to: start
conditions:
- !type:EntityAnchored
anchored: false
completed:
- !type:SpawnPrototype
prototype: SheetPlasteel1
amount: 4
- !type:DeleteEntity { }
steps:
- tool: Welding
doAfter: 10
- node: glass
entity: WindoorAssembly
edges:
- to: wired
conditions:
- !type:EntityAnchored { }
completed:
- !type:SetLayerVisibility
layer: 1
value: true
steps:
- material: Cable
amount: 5
doAfter: 1
- to: assembly
conditions:
- !type:EntityAnchored
anchored: false
completed:
- !type:SpawnPrototype
prototype: SheetGlass1
amount: 5
- !type:DeleteEntity { }
steps:
- tool: Screwing
doAfter: 2
- node: glassSecure
entity: WindoorAssemblySecure
edges:
- to: wiredSecure
conditions:
- !type:EntityAnchored { }
completed:
- !type:SetLayerVisibility
layer: 2
value: true
steps:
- material: Cable
amount: 5
doAfter: 1
- to: assemblySecure
conditions:
- !type:EntityAnchored
anchored: false
completed:
- !type:SpawnPrototype
prototype: SheetRGlass1
amount: 5
- !type:DeleteEntity { }
steps:
- tool: Screwing
doAfter: 4
- node: wired
entity: WindoorAssembly
edges:
- to: electronics
conditions:
- !type:EntityAnchored {}
steps:
- tag: DoorElectronics
store: board
name: "door electronics circuit board"
icon:
sprite: "Objects/Misc/module.rsi"
state: "door_electronics"
doAfter: 1
- to: glass
completed:
- !type:SpawnPrototype
prototype: CableApcStack1
amount: 5
steps:
- tool: Cutting
doAfter: 1
- node: wiredSecure
entity: WindoorAssemblySecure
edges:
- to: electronicsSecure
conditions:
- !type:EntityAnchored {}
steps:
- tag: DoorElectronics
store: board
name: "door electronics circuit board"
icon:
sprite: "Objects/Misc/module.rsi"
state: "door_electronics"
doAfter: 1
- to: glassSecure
completed:
- !type:SpawnPrototype
prototype: CableApcStack1
amount: 5
steps:
- tool: Cutting
doAfter: 3
- node: electronics
entity: WindoorAssembly
edges:
- to: windoor
conditions:
- !type:EntityAnchored {}
steps:
- tool: Screwing
doAfter: 2
- node: electronicsSecure
entity: WindoorAssemblySecure
edges:
- to: windoorSecure
conditions:
- !type:EntityAnchored { }
steps:
- tool: Screwing
doAfter: 4
- node: windoor
entity: Windoor
edges:
- to: wired
conditions:
- !type:EntityAnchored {}
- !type:AirlockBolted
value: false
- !type:WirePanel {}
- !type:ContainerNotEmpty # TODO ShadowCommander: Remove when map gets updated
container: board
completed:
- !type:EmptyAllContainers {}
steps:
- tool: Prying
doAfter: 1
- node: windoorSecure
entity: WindoorSecure
edges:
- to: wired
conditions:
- !type:EntityAnchored {}
- !type:AirlockBolted
value: false
- !type:WirePanel {}
- !type:ContainerNotEmpty # TODO ShadowCommander: Remove when map gets updated
container: board
completed:
- !type:EmptyAllContainers {}
steps:
- tool: Prying
doAfter: 4

View File

@@ -125,7 +125,7 @@
canRotate: false
- type: construction
name: Firelock
name: firelock
id: Firelock
graph: Firelock
startNode: start
@@ -142,7 +142,7 @@
- !type:TileNotBlocked {}
- type: construction
name: Catwalk
name: catwalk
id: Catwalk
graph: Catwalk
startNode: start
@@ -164,7 +164,7 @@
canBuildInImpassable: false
- type: construction
name: Wooden Barricade
name: wooden barricade
id: Barricade
graph: barricade
startNode: start
@@ -181,7 +181,7 @@
- !type:TileNotBlocked {}
- type: construction
name: Airlock
name: airlock
id: airlock
graph: airlock
startNode: start
@@ -196,3 +196,37 @@
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked {}
- type: construction
name: windoor
id: windoor
graph: windoor
startNode: start
targetNode: windoor
category: Structures
description: It opens, it closes, and you can see through it!
icon:
sprite: Structures/Doors/Windoors/windoor.rsi
state: assembly
objectType: Structure
placementMode: SnapgridCenter
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked {}
- type: construction
name: secure windoor
id: secureWindoor
graph: windoor
startNode: start
targetNode: windoorSecure
category: Structures
description: It opens, it closes, and you can see through it! This one looks tough.
icon:
sprite: Structures/Doors/Windoors/windoor.rsi
state: assembly
objectType: Structure
placementMode: SnapgridCenter
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked {}

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 907 B

View File

@@ -3,8 +3,7 @@
"size": {"x":32,"y":32},
"states":
[
{"name":"assembly2","directions":4,"delays":[[0.3,0.3],[0.3,0.3],[0.3,0.3],[0.3,0.3]]},
{"name":"assembly1","directions":4},
{"name":"assembly","directions":4,"delays":[[0.3,0.3],[0.3,0.3],[0.3,0.3],[0.3,0.3]]},
{"name":"closed","directions":4},
{"name":"closed_unlit","directions":4},
{"name":"closing","directions":4,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1],[0.1,0.1,0.1,0.1,0.1,0.1,0.1],[0.1,0.1,0.1,0.1,0.1,0.1,0.1],[0.1,0.1,0.1,0.1,0.1,0.1,0.1]]},