private void InternalToggleState() { if (activated && !isInCooldown) { activated = false; stateSync = FireAlarmState.TopLightSpriteNormal; StartCoroutine(SwitchCoolDown()); foreach (var firelock in FireLockList) { if (firelock == null) { continue; } var controller = firelock.Controller; if (controller == null) { continue; } controller.TryOpen(); } } else { SendCloseAlerts(); } }
public void SyncSprite(FireAlarmState stateOld, FireAlarmState stateNew) { stateSync = stateNew; if (stateNew == FireAlarmState.TopLightSpriteAlert) { spriteHandler.SetSpriteSO(topLightSpriteAlert); } else if (stateNew == FireAlarmState.OpenEmptySprite) { spriteHandler.SetSprite(openEmptySprite); } else if (stateNew == FireAlarmState.TopLightSpriteNormal) { spriteHandler.SetSprite(topLightSpriteNormal); } else if (stateNew == FireAlarmState.OpenCabledSprite) { spriteHandler.SetSprite(openCabledSprite); } }
public void SendCloseAlerts() { if (!hasCables) { return; } if (!activated && !isInCooldown) { activated = true; stateSync = FireAlarmState.TopLightSpriteAlert; SoundManager.PlayNetworkedAtPos("FireAlarm", metaNode.Position); StartCoroutine(SwitchCoolDown()); foreach (var firelock in FireLockList) { if (firelock == null) { continue; } firelock.ReceiveAlert(); } } }
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; } }
public void ServerPerformInteraction(HandApply interaction) { if (Validations.HasUsedItemTrait(interaction, CommonTraits.Instance.Screwdriver)) { if (coverOpen) { coverOpen = false; if (activated) { stateSync = FireAlarmState.TopLightSpriteAlert; } else { stateSync = FireAlarmState.TopLightSpriteNormal; } } else { coverOpen = true; if (hasCables) { stateSync = FireAlarmState.OpenCabledSprite; } else { stateSync = FireAlarmState.OpenEmptySprite; } } ToolUtils.ServerPlayToolSound(interaction); return; } if (coverOpen) { if (hasCables && Validations.HasUsedItemTrait(interaction, CommonTraits.Instance.Wirecutter)) { //cut out cables Chat.AddActionMsgToChat(interaction, $"You remove the cables.", $"{interaction.Performer.ExpensiveName()} removes the cables."); ToolUtils.ServerPlayToolSound(interaction); Spawn.ServerPrefab(CommonPrefabs.Instance.SingleCableCoil, SpawnDestination.At(gameObject), 5); stateSync = FireAlarmState.OpenEmptySprite; hasCables = false; activated = false; return; } if (!hasCables && Validations.HasUsedItemTrait(interaction, CommonTraits.Instance.Cable) && Validations.HasUsedAtLeast(interaction, 5)) { //add 5 cables ToolUtils.ServerUseToolWithActionMessages(interaction, 2f, "You start adding cables to the frame...", $"{interaction.Performer.ExpensiveName()} starts adding cables to the frame...", "You add cables to the frame.", $"{interaction.Performer.ExpensiveName()} adds cables to the frame.", () => { Inventory.ServerConsume(interaction.HandSlot, 5); hasCables = true; stateSync = FireAlarmState.OpenCabledSprite; }); } } else { if (activated && !isInCooldown) { activated = false; stateSync = FireAlarmState.TopLightSpriteNormal; StartCoroutine(SwitchCoolDown()); foreach (var firelock in FireLockList) { if (firelock == null) { continue; } var controller = firelock.Controller; if (controller == null) { continue; } controller.TryOpen(); } } else { SendCloseAlerts(); } } }
public void ServerPerformInteraction(HandApply interaction) { if (Validations.HasUsedItemTrait(interaction, CommonTraits.Instance.Screwdriver)) { if (coverOpen) { coverOpen = false; if (activated) { stateSync = FireAlarmState.TopLightSpriteAlert; } else { stateSync = FireAlarmState.TopLightSpriteNormal; } } else { coverOpen = true; if (hasCables) { stateSync = FireAlarmState.OpenCabledSprite; } else { stateSync = FireAlarmState.OpenEmptySprite; } } ToolUtils.ServerPlayToolSound(interaction); return; } if (coverOpen) { if (hasCables && Validations.HasUsedItemTrait(interaction, CommonTraits.Instance.Wirecutter)) { //cut out cables Chat.AddActionMsgToChat(interaction, $"You remove the cables.", $"{interaction.Performer.ExpensiveName()} removes the cables."); ToolUtils.ServerPlayToolSound(interaction); Spawn.ServerPrefab(CommonPrefabs.Instance.SingleCableCoil, SpawnDestination.At(gameObject), 5); stateSync = FireAlarmState.OpenEmptySprite; hasCables = false; activated = false; return; } if (!hasCables && Validations.HasUsedItemTrait(interaction, CommonTraits.Instance.Cable) && Validations.HasUsedAtLeast(interaction, 5)) { //add 5 cables ToolUtils.ServerUseToolWithActionMessages(interaction, 2f, "You start adding cables to the frame...", $"{interaction.Performer.ExpensiveName()} starts adding cables to the frame...", "You add cables to the frame.", $"{interaction.Performer.ExpensiveName()} adds cables to the frame.", () => { Inventory.ServerConsume(interaction.HandSlot, 5); hasCables = true; stateSync = FireAlarmState.OpenCabledSprite; }); } } else { InternalToggleState(); } }