private void Awake() { initialOffset = Vector3Int.CeilToInt(gameObject.transform.position); reactionManager = GetComponent <ReactionManager>(); metaDataLayer = GetComponent <MetaDataLayer>(); MatrixMove = GetComponentInParent <MatrixMove>(); tileChangeManager = GetComponentInParent <TileChangeManager>(); OnEarthquake.AddListener((worldPos, magnitude) => { var cellPos = metaTileMap.WorldToCell(worldPos); var bounds = new BoundsInt(cellPos - new Vector3Int(magnitude, magnitude, 0), new Vector3Int(magnitude * 2, magnitude * 2, 1)); foreach (var pos in bounds.allPositionsWithin) { foreach (var player in Get <PlayerScript>(pos, true)) { if (player.IsGhost) { continue; } player.registerTile.ServerSlip(true); } //maybe shake items somehow, too } }); }
public override void OnStartServer() { metaDataLayer = GetComponent <MetaDataLayer>(); metaTileMap = GetComponentInParent <MetaTileMap>(); InitializeRooms(); }
private void Awake() { tileChangeManager = GetComponentInParent <TileChangeManager>(); metaDataLayer = GetComponent <MetaDataLayer>(); hotspots = new Dictionary <Vector3Int, MetaDataNode>(); }
void Awake() { tileChangeManager = transform.GetComponentInParent <TileChangeManager>(); metaDataLayer = transform.GetComponentInParent <MetaDataLayer>(); metaTileMap = transform.GetComponentInParent <MetaTileMap>(); Layer = GetComponent <Layer>(); matrix = GetComponentInParent <Matrix>(); tileChangeManager.OnFloorOrPlatingRemoved.RemoveAllListeners(); tileChangeManager.OnFloorOrPlatingRemoved.AddListener(cellPos => { //Poke items when both floor and plating are gone //As they might want to change matrix if (!metaTileMap.HasTile(cellPos, LayerType.Floors, true) && !metaTileMap.HasTile(cellPos, LayerType.Base, true) && metaTileMap.HasTile(cellPos, LayerType.Objects, true) ) { foreach (var customNetTransform in matrix.Get <CustomNetTransform>(cellPos, true)) { customNetTransform.CheckMatrixSwitch(); } } }); }
public virtual void Awake() { metaDataLayer = GetComponentInChildren <MetaDataLayer>(); metaTileMap = GetComponentInChildren <MetaTileMap>(); subsystemManager = GetComponent <SubsystemManager>(); subsystemManager.Register(this); }
public void Awake() { metaDataLayer = GetComponentInChildren <MetaDataLayer>(); metaTileMap = GetComponentInChildren <MetaTileMap>(); GetComponent <SystemManager>().Register(this); }
private void CheckRelease() { if (Opened) { MetaDataLayer metaDataLayer = MatrixManager.AtPoint(Vector3Int.RoundToInt(transform.position), true) .MetaDataLayer; Vector3Int position = transform.localPosition.RoundToInt(); MetaDataNode node = metaDataLayer.Get(position, false); float deltaPressure = Mathf.Min(GasMix.Pressure, ReleasePressure) - node.GasMix.Pressure; if (deltaPressure > 0) { float ratio = deltaPressure / GasMix.Pressure * Time.deltaTime; node.GasMix += GasMix * ratio; GasMix *= (1 - ratio); metaDataLayer.UpdateSystemsAt(position); Volume = GasMix.Volume; Temperature = GasMix.Temperature; foreach (Gas gas in Gas.All) { Gases[gas] = GasMix.Gases[gas]; } } } }
public void SpillContent(Tuple <ReagentMix, GasMix> ToSpill) { if (pipeNode == null && MonoPipe == null) { return; } Vector3Int ZeroedLocation = Vector3Int.zero; if (pipeNode != null) { ZeroedLocation = pipeNode.NodeLocation; } else { ZeroedLocation = MonoPipe.MatrixPos; } ZeroedLocation.z = 0; var tileWorldPosition = MatrixManager.LocalToWorld(ZeroedLocation, matrix).RoundToInt(); MatrixManager.ReagentReact(ToSpill.Item1, tileWorldPosition); MetaDataLayer metaDataLayer = MatrixManager.AtPoint(tileWorldPosition, true).MetaDataLayer; if (pipeNode != null) { pipeNode.IsOn.GasMix += ToSpill.Item2; } else { matrix.GetMetaDataNode(ZeroedLocation).GasMix += ToSpill.Item2; } metaDataLayer.UpdateSystemsAt(ZeroedLocation, SystemType.AtmosSystem); }
private static void DrawGizmo2(MetaDataLayer scr, GizmoType gizmoType) { if (!DrawGizmos || !rooms) { return; } Vector3Int start = Vector3Int.RoundToInt(Camera.current.ScreenToWorldPoint(Vector3.one * -32) - scr.transform.position); // bottom left Vector3Int end = Vector3Int.RoundToInt(Camera.current.ScreenToWorldPoint(new Vector3(Camera.current.pixelWidth + 32, Camera.current.pixelHeight + 32)) - scr.transform.position); start.z = 0; end.z = 1; if (end.y - start.y > 100) { // avoid being zoomed out too much (creates too many objects) return; } Gizmos.matrix = scr.transform.localToWorldMatrix; Color blue = Color.blue; blue.a = 0.5f; Color red = Color.red; red.a = 0.5f; Color green = Color.green; green.a = 0.5f; foreach (Vector3Int position in new BoundsInt(start, end - start).allPositionsWithin) { MetaDataNode node = scr.Get(position, false); if (node != null) { if (node.Room == 0) { Gizmos.color = green; } if (node.Room > 0) { Gizmos.color = blue; } if (node.Room < 0) { Gizmos.color = red; } Gizmos.DrawCube(position + new Vector3(0.5f, 0.5f, 0), Vector3.one); } } }
void Awake() { tileChangeManager = transform.root.GetComponent <TileChangeManager>(); tileTrigger = transform.root.GetComponent <TileTrigger>(); metaDataLayer = transform.parent.GetComponent <MetaDataLayer>(); metaTileMap = transform.parent.GetComponent <MetaTileMap>(); Layer = GetComponent <Layer>(); }
private void ReleaseContentsInstantly() { MetaDataLayer metaDataLayer = MatrixManager.AtPoint(WorldPosition, true).MetaDataLayer; MetaDataNode node = metaDataLayer.Get(LocalPosition, false); GasMix.TransferGas(node.GasMix, GasMix, GasMix.Moles); metaDataLayer.UpdateSystemsAt(LocalPosition, SystemType.AtmosSystem); }
private void Awake() { playerSprites = GetComponent <UserControlledSprites>(); playerScript = GetComponent <PlayerScript>(); //initially we are upright and don't rotate with the matrix rotateWithMatrix = false; metaDataLayer = transform.GetComponentInParent <MetaDataLayer>(); }
void Awake() { tileChangeManager = transform.GetComponentInParent <TileChangeManager>(); metaDataLayer = transform.GetComponentInParent <MetaDataLayer>(); metaTileMap = transform.GetComponentInParent <MetaTileMap>(); Layer = GetComponent <Layer>(); }
public override void OnSpawnServer(SpawnInfo info) { metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; metaNode = metaDataLayer.Get(registerTile.LocalPositionServer, false); pipeMix = pipeData.GetMixAndVolume.GetGasMix(); UpdateState(); base.OnSpawnServer(info); }
private void Awake() { tileChangeManager = GetComponentInParent <TileChangeManager>(); metaDataLayer = GetComponent <MetaDataLayer>(); matrix = GetComponent <Matrix>(); hotspots = new Dictionary <Vector3Int, MetaDataNode>(); winds = new UniqueQueue <MetaDataNode>(); tilemapDamages = GetComponentsInChildren <TilemapDamage>(); }
public void OnSpawnServer(SpawnInfo info) { var integrity = GetComponent <Integrity>(); integrity.OnExposedEvent.AddListener(TriggerAlarm); RegisterTile registerTile = GetComponent <RegisterTile>(); MetaDataLayer metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; Controller.Open(); }
public override void OnSpawnServer(SpawnInfo info) { metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; metaNode = metaDataLayer.Get(registerTile.LocalPositionServer, false); if (SelfSufficient) { selfSufficientGas = GasMix.NewGasMix(GasMixes.Air); } base.OnSpawnServer(info); }
private void CheckPressure() { MetaDataLayer metaDataLayer = MatrixManager.AtPoint(Vector3Int.RoundToInt(transform.position)).MetaDataLayer; GasMix atmos = metaDataLayer.Get(transform.localPosition.RoundToInt(), false).Atmos; if (atmos.Pressure < AtmosConstants.HAZARD_LOW_PRESSURE || atmos.Pressure > AtmosConstants.HAZARD_HIGH_PRESSURE) { Logger.Log("URGENT TODO: Perform atmos damage to player ", Category.Health); // health.ApplyDamage(null, (int)pressureDamage * Time.deltaTime, DamageType.Brute); } }
void Awake() { itemAtts = GetComponent <ItemAttributes>(); metaDataLayer = GetComponentInParent <MetaDataLayer>(); reactionManager = GetComponentInParent <ReactionManager>(); leftHandOriginal = itemAtts.inHandReferenceLeft; rightHandOriginal = itemAtts.inHandReferenceRight; leftHandFlame = leftHandOriginal + 4; rightHandFlame = rightHandOriginal + 4; }
public override void OnSpawnServer(SpawnInfo info) { metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; metaNode = metaDataLayer.Get(registerTile.LocalPositionServer, false); pipeMix = selfSufficient ? GasMix.NewGasMix(GasMixes.BaseEmptyMix) : pipeData.GetMixAndVolume.GetGasMix(); if (TryGetComponent <AcuDevice>(out var device) && device.Controller != null) { SetOperatingMode(device.Controller.DesiredMode); } base.OnSpawnServer(info); }
private void Start() { metaDataLayer = GetComponentInChildren <MetaDataLayer>(true); metaTileMap = GetComponent <MetaTileMap>(); try { objects = ((ObjectLayer)metaTileMap.Layers[LayerType.Objects]).Objects; } catch { Logger.LogError("CAST ERROR: Make sure everything is in its proper layer type.", Category.Matrix); } }
private void Awake() { tileChangeManager = GetComponentInParent <TileChangeManager>(); metaDataLayer = GetComponent <MetaDataLayer>(); matrix = GetComponent <Matrix>(); hotspots = new ConcurrentDictionary <Vector3Int, MetaDataNode>(); winds = new ThreadSafeList <MetaDataNode>(); windsNodeDelegator = ProcessWindNodes; hotspotsToRemove = new List <Vector3Int>(); hotspotsToAdd = new List <Hotspot>(); tilemapDamages = GetComponentsInChildren <TilemapDamage>(); }
private void OperateAirPump() { MetaDataLayer metadata = registerObject.Matrix.MetaDataLayer; GasMix tileMix = metadata.Get(registerObject.LocalPositionServer, false).GasMix; // TODO: add voltage multiplier when bins are powered var molesToTransfer = (tileMix.Moles - (tileMix.Moles * (CHARGED_PRESSURE / gasContainer.GasMix.Pressure))) * -1; molesToTransfer *= 0.5f; GasMix.TransferGas(gasContainer.GasMix, tileMix, molesToTransfer.Clamp(0, 8)); metadata.UpdateSystemsAt(registerObject.LocalPositionServer, SystemType.AtmosSystem); chargePressure = gasContainer.GasMix.Pressure; }
public void OnSpawnServer(SpawnInfo info) { var integrity = GetComponent <Integrity>(); integrity.OnExposedEvent.AddListener(SendCloseAlerts); AtmosManager.Instance.inGameFireAlarms.Add(this); RegisterTile registerTile = GetComponent <RegisterTile>(); MetaDataLayer metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; metaNode = metaDataLayer.Get(registerTile.LocalPositionServer, false); foreach (var firelock in FireLockList) { firelock.fireAlarm = this; } }
private void Awake() { metaTileMap = GetComponent <MetaTileMap>(); if (metaTileMap == null) { Logger.LogError($"MetaTileMap was null on {gameObject.name}"); } networkedMatrix = transform.parent.GetComponent <NetworkedMatrix>(); initialOffset = Vector3Int.CeilToInt(gameObject.transform.position); reactionManager = GetComponent <ReactionManager>(); metaDataLayer = GetComponent <MetaDataLayer>(); MatrixMove = GetComponentInParent <MatrixMove>(); tileChangeManager = GetComponentInParent <TileChangeManager>(); underFloorLayer = GetComponentInChildren <UnderFloorLayer>(); tilemapsDamage = GetComponentsInChildren <TilemapDamage>().ToList(); if (MatrixManager.Instance.InitializingMatrixes.ContainsKey(gameObject.scene) == false) { MatrixManager.Instance.InitializingMatrixes.Add(gameObject.scene, new List <Matrix>()); } MatrixManager.Instance.InitializingMatrixes[gameObject.scene].Add(this); OnEarthquake.AddListener((worldPos, magnitude) => { var cellPos = metaTileMap.WorldToCell(worldPos); var bounds = new BoundsInt(cellPos - new Vector3Int(magnitude, magnitude, 0), new Vector3Int(magnitude * 2, magnitude * 2, 1)); foreach (var pos in bounds.allPositionsWithin) { foreach (var player in Get <PlayerScript>(pos, true)) { if (player.IsGhost) { continue; } player.registerTile.ServerSlip(true); } //maybe shake items somehow, too } }); }
private void Awake() { tileChangeManager = GetComponentInParent <TileChangeManager>(); metaDataLayer = GetComponent <MetaDataLayer>(); matrix = GetComponent <Matrix>(); hotspots = new Dictionary <Vector3Int, MetaDataNode>(); winds = new UniqueQueue <MetaDataNode>(); addFog = new UniqueQueue <FogEffect>(); removeFog = new UniqueQueue <FogEffect>(); hotspotsToRemove = new List <Vector3Int>(); hotspotsToAdd = new List <Hotspot>(); tilemapDamages = GetComponentsInChildren <TilemapDamage>(); }
public override void TickUpdate() { if (metaDataLayer == null) { metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; } if (metaNode == null) { metaNode = metaDataLayer.Get(registerTile.LocalPositionServer, false); } base.TickUpdate(); pipeData.mixAndVolume.EqualiseWithOutputs(pipeData.Outputs); CheckAtmos(); }
private void OnWillDestroyServer(DestructionInfo info) { var tileWorldPosition = gameObject.TileWorldPosition().To3Int(); //release all of our gases at once when destroyed MetaDataLayer metaDataLayer = MatrixManager.AtPoint(tileWorldPosition, true).MetaDataLayer; Vector3Int position = transform.localPosition.RoundToInt(); MetaDataNode node = metaDataLayer.Get(position, false); var shakeIntensity = (byte)Mathf.Lerp(byte.MinValue, byte.MaxValue / 2, GasMix.Pressure / MAX_EXPLOSION_EFFECT_PRESSURE); var shakeDistance = Mathf.Lerp(1, 64, GasMix.Pressure / MAX_EXPLOSION_EFFECT_PRESSURE); node.GasMix += GasMix; metaDataLayer.UpdateSystemsAt(position); Chat.AddLocalMsgToChat($"{name} exploded!", gameObject.TileWorldPosition()); ObjectFactory.SpawnMetal(2, tileWorldPosition.To2Int(), parent: transform.parent); ExplosionUtils.PlaySoundAndShake(tileWorldPosition, shakeIntensity, (int)shakeDistance); }
private void OnWillDestroyServer(DestructionInfo info) { var tileWorldPosition = gameObject.TileWorldPosition().To3Int(); //release all of our gases at once when destroyed MetaDataLayer metaDataLayer = MatrixManager.AtPoint(tileWorldPosition, true).MetaDataLayer; Vector3Int position = transform.localPosition.RoundToInt(); MetaDataNode node = metaDataLayer.Get(position, false); var shakeIntensity = (byte)Mathf.Lerp(byte.MinValue, byte.MaxValue / 2, GasMix.Pressure / MAX_EXPLOSION_EFFECT_PRESSURE); var shakeDistance = Mathf.Lerp(1, 64, GasMix.Pressure / MAX_EXPLOSION_EFFECT_PRESSURE); node.GasMix += GasMix; metaDataLayer.UpdateSystemsAt(position); Chat.AddLocalDestroyMsgToChat(gameObject.ExpensiveName(), " exploded!", gameObject.TileWorldPosition()); Spawn.ServerPrefab("Metal", gameObject.TileWorldPosition().To3Int(), transform.parent, count: 2, scatterRadius: Spawn.DefaultScatterRadius, cancelIfImpassable: true); ExplosionUtils.PlaySoundAndShake(tileWorldPosition, shakeIntensity, (int)shakeDistance); }
public void OnSpawnServer(SpawnInfo info) { var integrity = GetComponent <Integrity>(); integrity.OnExposedEvent.AddListener(SendCloseAlerts); AtmosManager.Instance.inGameFireAlarms.Add(this); RegisterTile registerTile = GetComponent <RegisterTile>(); MetaDataLayer metaDataLayer = MatrixManager.AtPoint(registerTile.WorldPositionServer, true).MetaDataLayer; var wallMount = GetComponent <WallmountBehavior>(); var direction = wallMount.CalculateFacing().CutToInt(); metaNode = metaDataLayer.Get(registerTile.LocalPositionServer + direction, false); foreach (var firelock in FireLockList) { firelock.fireAlarm = this; } if (!info.SpawnItems) { hasCables = false; coverOpen = true; stateSync = FireAlarmState.OpenEmptySprite; } }