From fa594fb3e9b1447bc94a3adafef2afd8d13761bd Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Thu, 9 Aug 2018 20:22:54 +0200 Subject: [PATCH] Smoothwalling. (#91) --- Content.Client/Content.Client.csproj | 1 + Content.Client/EntryPoint.cs | 2 + .../IconSmoothing/IconSmoothComponent.cs | 236 +++++++++ Resources/Maps/stationstation.yml | 486 +++++++++--------- Resources/Prototypes/Entities/walls.yml | 29 ++ .../Textures/Buildings/wall.rsi/meta.json | 1 + .../Textures/Buildings/wall.rsi/solid0.png | Bin 0 -> 264 bytes .../Textures/Buildings/wall.rsi/solid1.png | Bin 0 -> 256 bytes .../Textures/Buildings/wall.rsi/solid2.png | Bin 0 -> 264 bytes .../Textures/Buildings/wall.rsi/solid3.png | Bin 0 -> 256 bytes .../Textures/Buildings/wall.rsi/solid4.png | Bin 0 -> 258 bytes .../Textures/Buildings/wall.rsi/solid5.png | Bin 0 -> 254 bytes .../Textures/Buildings/wall.rsi/solid6.png | Bin 0 -> 258 bytes .../Textures/Buildings/wall.rsi/solid7.png | Bin 0 -> 191 bytes engine | 2 +- 15 files changed, 513 insertions(+), 244 deletions(-) create mode 100644 Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs create mode 100644 Resources/Prototypes/Entities/walls.yml create mode 100644 Resources/Textures/Buildings/wall.rsi/meta.json create mode 100644 Resources/Textures/Buildings/wall.rsi/solid0.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid1.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid2.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid3.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid4.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid5.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid6.png create mode 100644 Resources/Textures/Buildings/wall.rsi/solid7.png diff --git a/Content.Client/Content.Client.csproj b/Content.Client/Content.Client.csproj index f28bb9c85e..e84816fe8c 100644 --- a/Content.Client/Content.Client.csproj +++ b/Content.Client/Content.Client.csproj @@ -115,5 +115,6 @@ + \ No newline at end of file diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index 4b382d8f82..9e8ad7ff81 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -1,6 +1,7 @@ using Content.Client.GameObjects; using Content.Client.GameObjects.Components.Construction; using Content.Client.GameObjects.Components.Power; +using Content.Client.GameObjects.Components.SmoothWalling; using Content.Client.GameObjects.Components.Storage; using Content.Client.Interfaces.GameObjects; using SS14.Shared.ContentPack; @@ -53,6 +54,7 @@ namespace Content.Client factory.Register(); factory.Register(); factory.Register(); + factory.Register(); prototypes.RegisterIgnore("material"); } diff --git a/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs b/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs new file mode 100644 index 0000000000..5e6bf5ef34 --- /dev/null +++ b/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs @@ -0,0 +1,236 @@ +using System; +using SS14.Client.Interfaces.GameObjects.Components; +using SS14.Shared.GameObjects; +using SS14.Shared.GameObjects.Components.Transform; +using SS14.Shared.Interfaces.GameObjects; +using SS14.Shared.Interfaces.Map; +using SS14.Shared.IoC; +using SS14.Shared.Map; +using SS14.Shared.Maths; +using SS14.Shared.Serialization; +using static SS14.Client.GameObjects.SpriteComponent; + +namespace Content.Client.GameObjects.Components.SmoothWalling +{ + // TODO: Potential improvements: + // Defer updating of these. + // Get told by somebody to use a loop. + /// + /// Makes sprites of other grid-aligned entities like us connect. + /// + /// + /// The system is based on Baystation12's smoothwalling, and thus will work with those. + /// To use, set base equal to the prefix of the corner states in the sprite base RSI. + /// Any objects with the same key will connect. + /// + public class IconSmoothComponent : Component, IComponentDebug + { + public override string Name => "IconSmooth"; + + ISpriteComponent Sprite; + SnapGridComponent SnapGrid; + + /// + /// Prepended to the RSI state. + /// + string StateBase; + + /// + /// We will smooth with other objects with the same key. + /// + string SmoothKey; + + IconSmoothComponent[] Neighbors = new IconSmoothComponent[8]; + // "Use an array". + // Nah. I'm too lazy. This is easy to understand compared to the enum value fuckery if I used an array. + // Deal with it. + CornerFill CornerSE; + CornerFill CornerNE; + CornerFill CornerNW; + CornerFill CornerSW; + + public override void Initialize() + { + base.Initialize(); + + var state0 = $"{StateBase}0"; + SnapGrid = Owner.GetComponent(); + Sprite = Owner.GetComponent(); + // BIG NOTE: Y axis is fucked. Double fucked. Triple super-mega-ultra-turbo-fucked. + // so, the DirectionOffsets here are incorrect (flipped). + Sprite.LayerMapSet(CornerLayers.SE, Sprite.AddLayerState(state0)); + Sprite.LayerSetDirOffset(CornerLayers.SE, DirectionOffset.Flip); + Sprite.LayerMapSet(CornerLayers.NE, Sprite.AddLayerState(state0)); + Sprite.LayerSetDirOffset(CornerLayers.NE, DirectionOffset.Clockwise); + Sprite.LayerMapSet(CornerLayers.NW, Sprite.AddLayerState(state0)); + Sprite.LayerSetDirOffset(CornerLayers.NW, DirectionOffset.None); + Sprite.LayerMapSet(CornerLayers.SW, Sprite.AddLayerState(state0)); + Sprite.LayerSetDirOffset(CornerLayers.SW, DirectionOffset.CounterClockwise); + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataFieldCached(ref StateBase, "base", ""); + serializer.DataFieldCached(ref SmoothKey, "key", null); + } + + public override void Startup() + { + base.Startup(); + + SnapGrid.OnPositionChanged += SnapGridPositionChanged; + + UpdateConnections(true); + UpdateIcon(); + } + + public override void Shutdown() + { + base.Shutdown(); + + SnapGrid.OnPositionChanged -= SnapGridPositionChanged; + SayGoodbyes(); + } + + void SayGoodbyes() + { + foreach (var neighbor in Neighbors) + { + // Goodbye neighbor. + neighbor?.UpdateConnections(false); + neighbor?.UpdateIcon(); + } + } + + void SnapGridPositionChanged() + { + SayGoodbyes(); + UpdateConnections(true); + UpdateIcon(); + } + + void UpdateIcon() + { + // Try to turn this into a loop without hard to understand bit fuckery or 20 lines of helper functions. + // Challenge: do it in less lines. + // I dare you. + // No cheating like putting everything on a single line. Proper code conventions. + // This comment does not count, btw. + + Sprite.LayerSetState(CornerLayers.NE, $"{StateBase}{(int)CornerNE}"); + Sprite.LayerSetState(CornerLayers.SE, $"{StateBase}{(int)CornerSE}"); + Sprite.LayerSetState(CornerLayers.SW, $"{StateBase}{(int)CornerSW}"); + Sprite.LayerSetState(CornerLayers.NW, $"{StateBase}{(int)CornerNW}"); + } + + void UpdateConnections(bool propagate) + { + for (int i = 0; i < Neighbors.Length; i++) + { + var found = false; + var dir = (Direction)i; + foreach (var entity in SnapGrid.GetInDir(dir)) + { + if (entity.TryGetComponent(out IconSmoothComponent smooth) && smooth.SmoothKey == SmoothKey) + { + Neighbors[i] = smooth; + if (propagate) + { + smooth.UpdateConnections(false); + smooth.UpdateIcon(); + } + // Temptation to use goto: 10. + found = true; + break; + } + } + + if (!found) + { + Neighbors[i] = null; + } + } + + CornerNE = CornerSE = CornerNW = CornerSW = CornerFill.None; + + // "Use a loop". + // Well screw that I did the exact same thing while writing lighting corner population code in BYOND. + // This is 10x easier to understand and write than a complex loop working with the internet mapping of direction flags. + if (Neighbors[(int)Direction.North] != null) + { + CornerNE |= CornerFill.CounterClockwise; + CornerNW |= CornerFill.Clockwise; + } + if (Neighbors[(int)Direction.NorthEast] != null) + { + CornerNE |= CornerFill.Diagonal; + } + if (Neighbors[(int)Direction.East] != null) + { + CornerNE |= CornerFill.Clockwise; + CornerSE |= CornerFill.CounterClockwise; + } + if (Neighbors[(int)Direction.SouthEast] != null) + { + CornerSE |= CornerFill.Diagonal; + } + if (Neighbors[(int)Direction.South] != null) + { + CornerSE |= CornerFill.Clockwise; + CornerSW |= CornerFill.CounterClockwise; + } + if (Neighbors[(int)Direction.SouthWest] != null) + { + CornerSW |= CornerFill.Diagonal; + } + if (Neighbors[(int)Direction.West] != null) + { + CornerSW |= CornerFill.Clockwise; + CornerNW |= CornerFill.CounterClockwise; + } + if (Neighbors[(int)Direction.NorthWest] != null) + { + CornerNW |= CornerFill.Diagonal; + } + } + + public string GetDebugString() + { + return string.Format( + "N/NE/E/SE/S/SW/W/NW: {0}/{1}/{2}/{3}/{4}/{5}/{6}/{7} cfill NE/SE/SW/NW: {8}/{9}/{10}/{11}", + Neighbors[(int)Direction.North]?.Owner?.Uid, + Neighbors[(int)Direction.NorthEast]?.Owner?.Uid, + Neighbors[(int)Direction.East]?.Owner?.Uid, + Neighbors[(int)Direction.SouthEast]?.Owner?.Uid, + Neighbors[(int)Direction.South]?.Owner?.Uid, + Neighbors[(int)Direction.SouthWest]?.Owner?.Uid, + Neighbors[(int)Direction.West]?.Owner?.Uid, + Neighbors[(int)Direction.NorthWest]?.Owner?.Uid, + CornerNE, CornerSE, CornerSW, CornerNW + ); + } + + enum CornerLayers + { + SE, + NE, + NW, + SW, + } + + [Flags] + enum CornerFill : sbyte + { + // These values are pulled from Baystation12. + // I'm too lazy to convert the state names. + None = 0, + // The cardinal tile counter-clockwise of this corner is filled. + CounterClockwise = 1, + // The diagonal tile in the direction of this corner. + Diagonal = 2, + // The cardinal tile clockwise of this corner is filled. + Clockwise = 4, + } + } +} diff --git a/Resources/Maps/stationstation.yml b/Resources/Maps/stationstation.yml index f2ad6bac8d..3a0e1273ff 100644 --- a/Resources/Maps/stationstation.yml +++ b/Resources/Maps/stationstation.yml @@ -22,735 +22,735 @@ entities: components: - grid: 0 pos: 4.5,3.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,0.5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,-6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,4 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,3 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,2 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,1 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,0 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,-1 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,7 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,9 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,-5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,-6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,-5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,9 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,-1 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,0 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,1 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,2 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,3 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,4 - rot: 3.141593 + rot: -1.570796 type: Transform - type: DoorContent components: - grid: 0 pos: -5.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -4,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -4,5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -4,4 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -3,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -2,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -1,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 0,6 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,-0.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: __engine_worktop components: - grid: 0 pos: -2.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: DoorContent components: - grid: 0 pos: 4.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 1,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 2,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 3,6 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 3,5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 3,4 - rot: 3.141593 + rot: -1.570796 type: Transform - type: __engine_worktop components: - grid: 0 pos: -0.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: __engine_worktop components: - grid: 0 pos: 1.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: LaserItem components: - grid: 0 pos: -3.015625,3.890625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: LaserItem components: - grid: 0 pos: -2.015625,3.859375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: GUNITEM components: - grid: 0 pos: -2.890625,4.484375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: GUNITEM components: - grid: 0 pos: -1.984375,4.484375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: medkit_r components: - grid: 0 pos: -0.859375,3.921875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: medkit_r components: - grid: 0 pos: -0.921875,4.640625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: MopItem components: - grid: 0 pos: 0.015625,3.921875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: FlashlightLantern components: - grid: 0 pos: 0.046875,4.609375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: IDCardStandard components: - grid: 0 pos: 0.890625,3.921875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: RadioHeadsetEars components: - grid: 0 pos: 0.984375,4.640625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: BackpackClothing components: - grid: 0 pos: 1.890625,3.796875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: JanitorUniform components: - grid: 0 pos: 2.109375,4.546875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: ShoesItem components: - grid: 0 pos: 1.546875,4.484375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: __engine_worktop components: - grid: 0 pos: 1.5,7.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,5.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,7 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,8 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,2.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,1.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,7.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,6.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: WirelessMachine components: - grid: 0 pos: 3,3 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,-7 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -6,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -5,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -4,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -3,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -2,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -1,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 0,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 1,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 2,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 3,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 4,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 5,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,-8 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,-7 - rot: 3.141593 + rot: -1.570796 type: Transform - type: __engine_worktop components: - grid: 0 pos: -2.5,7.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: __engine_worktop components: - grid: 0 pos: -0.5,7.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,8.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: YellowGloves components: - grid: 0 pos: -3.015625,6.796875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: MesonGlasses components: - grid: 0 pos: -3.046875,7.484375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: UtilityBeltClothing components: - grid: 0 pos: -2.109375,6.765625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: GasMaskClothing components: - grid: 0 pos: -2.234375,7.390625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: BlueToolboxItem components: - grid: 0 pos: -1.109375,6.796875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: YellowToolboxItem components: - grid: 0 pos: -1.078125,7.578125 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wirecutter components: - grid: 0 pos: -0.234375,6.640625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Welder components: - grid: 0 pos: -0.234375,7.515625 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Screwdriver components: - grid: 0 pos: 0.703125,6.609375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Crowbar components: - grid: 0 pos: 0.578125,7.484375 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Multitool components: - grid: 0 pos: 1.515625,6.921875 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wrench components: - grid: 0 pos: 1.421875,7.484375 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,10 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,11 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,12 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,13 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,10 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,11 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,12 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,13 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -7,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -6,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -5,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -4,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -3,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -2,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: -1,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 0,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 1,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 2,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 3,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 4,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 5,14 - rot: 3.141593 + rot: -1.570796 type: Transform -- type: __engine_wall +- type: wall components: - grid: 0 pos: 6,14 - rot: 3.141593 + rot: -1.570796 type: Transform - type: SMES name: Smes components: - grid: 0 pos: -2.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: SMES name: Smes components: - grid: 0 pos: 1.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - charge: 438.3279 type: PowerStorage @@ -758,169 +758,169 @@ entities: components: - grid: 0 pos: -2.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: BlueWire components: - grid: 0 pos: -1.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: BlueWire components: - grid: 0 pos: -0.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: BlueWire components: - grid: 0 pos: 0.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: BlueWire components: - grid: 0 pos: 1.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Generator components: - grid: 0 pos: -0.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -3.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -4.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,11.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,10.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,9.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,8.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,7.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,6.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,5.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,4.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,3.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,2.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,1.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,0.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,-0.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 2.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 3.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,11.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,10.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,9.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: poweredlight components: @@ -979,13 +979,13 @@ entities: components: - grid: 0 pos: 5,2 - rot: 3.141593 + rot: -1.570796 type: Transform - type: poweredlight components: - grid: 0 pos: 2,4 - rot: 3.141593 + rot: -1.570796 type: Transform - type: poweredlight components: @@ -1045,61 +1045,61 @@ entities: components: - grid: 0 pos: 5,-6 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,-1.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,-5.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,-4.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,-3.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: -5.5,-2.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,-5.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,-3.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,-4.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: APC components: - grid: 0 pos: -6,-6 - rot: 3.141593 + rot: -1.570796 type: Transform - load: 150 type: PowerProvider @@ -1107,7 +1107,7 @@ entities: components: - grid: 0 pos: 5,-6 - rot: 3.141593 + rot: -1.570796 type: Transform - load: 150 type: PowerProvider @@ -1115,24 +1115,24 @@ entities: components: - grid: 0 pos: 4.5,-1.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: Wire components: - grid: 0 pos: 4.5,-2.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: WiredMachine components: - grid: 0 pos: -5.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform - type: WiredMachine components: - grid: 0 pos: 4.5,12.5 - rot: 3.141593 + rot: -1.570796 type: Transform ... diff --git a/Resources/Prototypes/Entities/walls.yml b/Resources/Prototypes/Entities/walls.yml new file mode 100644 index 0000000000..a03248a390 --- /dev/null +++ b/Resources/Prototypes/Entities/walls.yml @@ -0,0 +1,29 @@ +- type: entity + id: wall + name: Wall + components: + - type: Clickable + - type: Sprite + netsync: false + color: "#636769" + drawdepth: Walls + sprite: Buildings/wall.rsi + + - type: Icon + texture: Tiles/wall_texture.png + + - type: BoundingBox + - type: Collidable + - type: Occluder + sizeX: 32 + sizeY: 32 + - type: SnapGrid + offset: Edge + + - type: IconSmooth + key: walls. Seriously, just a wall. Nothing extraordinary here. + base: solid + + placement: + snap: + - Wall diff --git a/Resources/Textures/Buildings/wall.rsi/meta.json b/Resources/Textures/Buildings/wall.rsi/meta.json new file mode 100644 index 0000000000..c6a0575630 --- /dev/null +++ b/Resources/Textures/Buildings/wall.rsi/meta.json @@ -0,0 +1 @@ +{"version":1,"license":"CC-BY-SA-3.0","copyright":"Taken from https://github.com/discordia-space/CEV-Eris/blob/c34c1b30abf18aa552e19294523924c39e5ea127/icons/turf/wall_masks.dmi and modified.","size":{"x":32,"y":32},"states":[{"name":"solid0","select":[],"flags":{},"directions":4},{"name":"solid1","select":[],"flags":{},"directions":4},{"name":"solid2","select":[],"flags":{},"directions":4},{"name":"solid3","select":[],"flags":{},"directions":4},{"name":"solid4","select":[],"flags":{},"directions":4},{"name":"solid5","select":[],"flags":{},"directions":4},{"name":"solid6","select":[],"flags":{},"directions":4},{"name":"solid7","select":[],"flags":{},"directions":4}]} \ No newline at end of file diff --git a/Resources/Textures/Buildings/wall.rsi/solid0.png b/Resources/Textures/Buildings/wall.rsi/solid0.png new file mode 100644 index 0000000000000000000000000000000000000000..3a809c3b5f2c78ac8795bcbaaa933be7c3436599 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDW_(9^{+#N&8!f&+7tm%xDrZjPBt8yWprPpw>- z&=A}hCBUd1654yPfr<6hK@shOqwl#FFo_EsSger3q0P{}ON#a370VKlmIr|heaSUk z2UZ@LlEiw#)noiOiGa z8=U0rpJQs{Whul}+;o-ks43skt#SvurY2nV*-+%3FUP>Z(poJ)W#KL@pko<4UHx3v IIVCg!0I2F%>Hq)$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid1.png b/Resources/Textures/Buildings/wall.rsi/solid1.png new file mode 100644 index 0000000000000000000000000000000000000000..b7dcaf94591ac000520c346c7bc97d644a4acee6 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDVa)6>N<#N+tesb@J4DDbq#F3d|f!YX2(A^st~ z^_{(wFktKX^f#X0z2Zp$<8u3kiN8*0sQ?|x;OXk;vd$@?2>@Br BV}k$y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid2.png b/Resources/Textures/Buildings/wall.rsi/solid2.png new file mode 100644 index 0000000000000000000000000000000000000000..3a809c3b5f2c78ac8795bcbaaa933be7c3436599 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDW_(9^{+#N&8!f&+7tm%xDrZjPBt8yWprPpw>- z&=A}hCBUd1654yPfr<6hK@shOqwl#FFo_EsSger3q0P{}ON#a370VKlmIr|heaSUk z2UZ@LlEiw#)noiOiGa z8=U0rpJQs{Whul}+;o-ks43skt#SvurY2nV*-+%3FUP>Z(poJ)W#KL@pko<4UHx3v IIVCg!0I2F%>Hq)$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid3.png b/Resources/Textures/Buildings/wall.rsi/solid3.png new file mode 100644 index 0000000000000000000000000000000000000000..b7dcaf94591ac000520c346c7bc97d644a4acee6 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDVa)6>N<#N+tesb@J4DDbq#F3d|f!YX2(A^st~ z^_{(wFktKX^f#X0z2Zp$<8u3kiN8*0sQ?|x;OXk;vd$@?2>@Br BV}k$y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid4.png b/Resources/Textures/Buildings/wall.rsi/solid4.png new file mode 100644 index 0000000000000000000000000000000000000000..940e57145661bd0722888e88ad9c70cb20a2f342 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDVa+tbA{#N+tes|R@-6nIzz!Y1(Q6f#Pg9bi4O z?!iB02}gakFUL*feEzt9K9cn3#T{MYwLd#vr%Ek#W9;mg2x~BQ5U5LF{`yL0`n$RI z6)YzhqGD_0uj~`ek6=9KkiILynmH{X>%N>pMeS@K#)cF6P21X)e$76!i7CL2Z`~Qq z*Xn1?8yFNgYxc-Q{C|DZQH9|cV~I$Zz_cHAJa7EV8zw$->+l9Tlfl!~&t;ucLK6Vb C>tAO8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid5.png b/Resources/Textures/Buildings/wall.rsi/solid5.png new file mode 100644 index 0000000000000000000000000000000000000000..5c69be5b4175df96870a75a5e4a6f9e25406b942 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDVa-P6S}#N+tgX%Bf12ne*UJ-}uXyC8{KOyfH5 zuK!%Tf7LDhXH9tVTXTMK#Yc|7O!JfJoPOJvDTyh(%n{?x;M9_l`jT**`ALm5M+?Jt zqYr$?kDQC)P>5)}bP0l+XkKMAu%z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid6.png b/Resources/Textures/Buildings/wall.rsi/solid6.png new file mode 100644 index 0000000000000000000000000000000000000000..940e57145661bd0722888e88ad9c70cb20a2f342 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(iS0J5|l2TPw)!Es(V8Mcw zD_0&mbjX#JKN~2)SQ6wH%;50sMjDVa+tbA{#N+tes|R@-6nIzz!Y1(Q6f#Pg9bi4O z?!iB02}gakFUL*feEzt9K9cn3#T{MYwLd#vr%Ek#W9;mg2x~BQ5U5LF{`yL0`n$RI z6)YzhqGD_0uj~`ek6=9KkiILynmH{X>%N>pMeS@K#)cF6P21X)e$76!i7CL2Z`~Qq z*Xn1?8yFNgYxc-Q{C|DZQH9|cV~I$Zz_cHAJa7EV8zw$->+l9Tlfl!~&t;ucLK6Vb C>tAO8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Buildings/wall.rsi/solid7.png b/Resources/Textures/Buildings/wall.rsi/solid7.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee21983bcb56f8c050271d4a5baa12656d1de03 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-u0Xo8vva|M1uIvs?71AP z1LQN71o;IsI6S+N2IM4qx;TbdoK8+?XbN>W(7^NU|NsB;t_j&0nHsAYc6Ggdkrv>b zV6V$_RG%T`zVpPTQxDkRy3N$H*g~Z7!i@_SC884VB3k1aoVm@MAGdi6Byn6&7rmta kF<*7YRYNZ3h)E0#>%VPj4i?$X0kn+4)78&qol`;+06GUj^8f$< literal 0 HcmV?d00001 diff --git a/engine b/engine index 21b00df2b1..be10df217e 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 21b00df2b1e8292045ae630b7adda964661dbe24 +Subproject commit be10df217e9114a28a47b49b4aedee11d107df79