Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
 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();
         }
     }
 }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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();
                }
            }
        }
Beispiel #6
0
        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();
            }
        }