construction
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -50,12 +50,16 @@
|
|||||||
ShardGlass:
|
ShardGlass:
|
||||||
min: 1
|
min: 1
|
||||||
max: 2
|
max: 2
|
||||||
|
MetalRod:
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
- !type:DoActsBehavior
|
- !type:DoActsBehavior
|
||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
- type: AccessReader
|
- type: AccessReader
|
||||||
- type: Airlock
|
- type: Airlock
|
||||||
openPanelVisible: true
|
openPanelVisible: true
|
||||||
- type: Door
|
- type: Door
|
||||||
|
weldable: false
|
||||||
openSound:
|
openSound:
|
||||||
path: /Audio/Machines/windoor_open.ogg
|
path: /Audio/Machines/windoor_open.ogg
|
||||||
closeSound:
|
closeSound:
|
||||||
@@ -77,6 +81,9 @@
|
|||||||
animatedPanel: false
|
animatedPanel: false
|
||||||
openUnlitVisible: true
|
openUnlitVisible: true
|
||||||
- type: WiresVisualizer
|
- type: WiresVisualizer
|
||||||
|
- type: Construction
|
||||||
|
graph: windoor
|
||||||
|
node: windoor
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseSecureWindoor
|
id: BaseSecureWindoor
|
||||||
@@ -118,13 +125,14 @@
|
|||||||
ShardGlass:
|
ShardGlass:
|
||||||
min: 1
|
min: 1
|
||||||
max: 2
|
max: 2
|
||||||
- !type:SpawnEntitiesBehavior
|
|
||||||
spawn:
|
|
||||||
MetalRod:
|
MetalRod:
|
||||||
min: 1
|
min: 2
|
||||||
max: 3
|
max: 4
|
||||||
- !type:DoActsBehavior
|
- !type:DoActsBehavior
|
||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
|
- type: Construction
|
||||||
|
graph: windoor
|
||||||
|
node: windoorSecure
|
||||||
|
|
||||||
# "0.49,-0.49,-0.49,-0.2"
|
# "0.49,-0.49,-0.49,-0.2"
|
||||||
# to:
|
# to:
|
||||||
|
|||||||
228
Resources/Prototypes/Recipes/Construction/Graphs/windoor.yml
Normal file
228
Resources/Prototypes/Recipes/Construction/Graphs/windoor.yml
Normal 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
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
canRotate: false
|
canRotate: false
|
||||||
|
|
||||||
- type: construction
|
- type: construction
|
||||||
name: Firelock
|
name: firelock
|
||||||
id: Firelock
|
id: Firelock
|
||||||
graph: Firelock
|
graph: Firelock
|
||||||
startNode: start
|
startNode: start
|
||||||
@@ -142,7 +142,7 @@
|
|||||||
- !type:TileNotBlocked {}
|
- !type:TileNotBlocked {}
|
||||||
|
|
||||||
- type: construction
|
- type: construction
|
||||||
name: Catwalk
|
name: catwalk
|
||||||
id: Catwalk
|
id: Catwalk
|
||||||
graph: Catwalk
|
graph: Catwalk
|
||||||
startNode: start
|
startNode: start
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
canBuildInImpassable: false
|
canBuildInImpassable: false
|
||||||
|
|
||||||
- type: construction
|
- type: construction
|
||||||
name: Wooden Barricade
|
name: wooden barricade
|
||||||
id: Barricade
|
id: Barricade
|
||||||
graph: barricade
|
graph: barricade
|
||||||
startNode: start
|
startNode: start
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
- !type:TileNotBlocked {}
|
- !type:TileNotBlocked {}
|
||||||
|
|
||||||
- type: construction
|
- type: construction
|
||||||
name: Airlock
|
name: airlock
|
||||||
id: airlock
|
id: airlock
|
||||||
graph: airlock
|
graph: airlock
|
||||||
startNode: start
|
startNode: start
|
||||||
@@ -196,3 +196,37 @@
|
|||||||
canBuildInImpassable: false
|
canBuildInImpassable: false
|
||||||
conditions:
|
conditions:
|
||||||
- !type:TileNotBlocked {}
|
- !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 {}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 907 B |
@@ -3,8 +3,7 @@
|
|||||||
"size": {"x":32,"y":32},
|
"size": {"x":32,"y":32},
|
||||||
"states":
|
"states":
|
||||||
[
|
[
|
||||||
{"name":"assembly2","directions":4,"delays":[[0.3,0.3],[0.3,0.3],[0.3,0.3],[0.3,0.3]]},
|
{"name":"assembly","directions":4,"delays":[[0.3,0.3],[0.3,0.3],[0.3,0.3],[0.3,0.3]]},
|
||||||
{"name":"assembly1","directions":4},
|
|
||||||
{"name":"closed","directions":4},
|
{"name":"closed","directions":4},
|
||||||
{"name":"closed_unlit","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]]},
|
{"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]]},
|
||||||
|
|||||||
Reference in New Issue
Block a user