예제 #1
0
        public override bool Simulate()
        {
            int   num     = base.SubsystemElectricity.CircuitStep - m_lastChangeCircuitStep;
            float voltage = (CalculateHighInputsCount() > 0) ? 1 : 0;

            if (ElectricElement.IsSignalHigh(voltage) != ElectricElement.IsSignalHigh(m_voltage))
            {
                m_lastChangeCircuitStep = base.SubsystemElectricity.CircuitStep;
            }
            m_voltage = voltage;
            if (!ElectricElement.IsSignalHigh(m_voltage))
            {
                m_needsReset = false;
            }
            if (!m_needsReset)
            {
                if (num >= 10)
                {
                    if (ElectricElement.IsSignalHigh(m_voltage))
                    {
                        CellFace cellFace = base.CellFaces[0];
                        int      data     = Terrain.ExtractData(base.SubsystemElectricity.SubsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z));
                        base.SubsystemElectricity.Project.FindSubsystem <SubsystemFenceGateBlockBehavior>(throwOnError: true).OpenCloseGate(cellFace.X, cellFace.Y, cellFace.Z, !FenceGateBlock.GetOpen(data));
                    }
                }
                else
                {
                    base.SubsystemElectricity.QueueElectricElementForSimulation(this, base.SubsystemElectricity.CircuitStep + 10 - num);
                }
            }
            return(false);
        }
예제 #2
0
 private void ElectronicElementAlert(ElectricElement electronicElement, bool infecting)
 {
     foreach (NPCController npcController in npcControllers)
     {
         npcController.ElectronicElementAlert(electronicElement, infecting);
     }
 }
예제 #3
0
    public void ElectricElementInfected(ElectricElement electricElement)
    {
        if (notInfectedElectricElements.ContainsKey(electricElement.name))
        {
            notInfectedElectricElements.Remove(electricElement.name);
            infectedElectricElements.Add(electricElement.name, electricElement);
        }

        if (notInfectedElectricElements.Count == 1)
        {
            readyToNextLevel = true;
            notInfectedElectricElements.ElementAt(0).Value.ReadyToBeInfected();
        }
    }
        public override bool Simulate()
        {
            float voltage  = m_voltage;
            int   num      = 0;
            int   rotation = base.Rotation;

            foreach (ElectricConnection connection in base.Connections)
            {
                if (connection.ConnectorType != ElectricConnectorType.Output && connection.NeighborConnectorType != 0)
                {
                    ElectricConnectorDirection?connectorDirection = SubsystemElectricity.GetConnectorDirection(base.CellFaces[0].Face, rotation, connection.ConnectorFace);
                    if (connectorDirection.HasValue)
                    {
                        if (connectorDirection == ElectricConnectorDirection.Top)
                        {
                            if (ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace)))
                            {
                                num |= 1;
                            }
                        }
                        else if (connectorDirection == ElectricConnectorDirection.Right)
                        {
                            if (ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace)))
                            {
                                num |= 2;
                            }
                        }
                        else if (connectorDirection == ElectricConnectorDirection.Bottom)
                        {
                            if (ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace)))
                            {
                                num |= 4;
                            }
                        }
                        else if (connectorDirection == ElectricConnectorDirection.Left && ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace)))
                        {
                            num |= 8;
                        }
                    }
                }
            }
            TruthTableData blockData = m_subsystemTruthTableCircuitBlockBehavior.GetBlockData(base.CellFaces[0].Point);

            m_voltage = ((blockData != null) ? ((float)(int)blockData.Data[num] / 15f) : 0f);
            return(m_voltage != voltage);
        }
예제 #5
0
 public void ElectronicElementAlert(ElectricElement electronicElement, bool infecting)
 {
     if (infecting)
     {
         if (activeBehaviour.getType() != BehaviourType.aggressive)
         {
             ChangeBehaviourTo(string.Format("Aggressive_{0}", electronicElement.name), electronicElement);
         }
     }
     else
     {
         if (activeBehaviour.getType() != BehaviourType.pasive)
         {
             ChangeBehaviourTo("FollowPath");
         }
     }
 }
예제 #6
0
    public void ChangeBehaviourTo(string behaviourId, ElectricElement electricElement = null)
    {
        iNPCBehaviour targetBehaviuor = null;

        if (allBehaviours.TryGetValue(behaviourId, out targetBehaviuor))
        {
            activeBehaviour = targetBehaviuor;
            activeBehaviour.OnEnter();

            if (activeBehaviour.getType() == BehaviourType.aggressive)
            {
                activeBehaviour.SetTarget(electricElement);
            }
        }
        else
        {
            Debug.LogWarning("There is no behaviour with that id, behaviour did not change");
        }
    }
예제 #7
0
    private void MoveRight()
    {
        if (moving)
        {
            return;
        }

        if (activeElectricElement.rightRelation.electricElement != null)
        {
            AudioController.Instance.PlaySFX("Movimiento");
            moving = true;
            Invoke("ChangePosition", .25f);
            Invoke("EnableMoving", .38f);
            activeElectricElement.PlayerDeparted(Direction.right);
            activeElectricElement = activeElectricElement.rightRelation.electricElement;
            animatorController.SetTrigger("move");
        }
        else
        {
            CantMove();
        }
    }
예제 #8
0
        public override bool OnEditBlock(int x, int y, int z, int value, ComponentPlayer componentPlayer)
        {
            int data         = Terrain.ExtractData(value);
            int voltageLevel = BatteryBlock.GetVoltageLevel(data);

            DialogsManager.ShowDialog(componentPlayer.GuiWidget, new EditBatteryDialog(voltageLevel, delegate(int newVoltageLevel)
            {
                int num = BatteryBlock.SetVoltageLevel(data, newVoltageLevel);
                if (num != data)
                {
                    int value2 = Terrain.ReplaceData(value, num);
                    base.SubsystemTerrain.ChangeCell(x, y, z, value2);
                    SubsystemElectricity subsystemElectricity = base.Project.FindSubsystem <SubsystemElectricity>(throwOnError: true);
                    ElectricElement electricElement           = subsystemElectricity.GetElectricElement(x, y, z, 4);
                    if (electricElement != null)
                    {
                        subsystemElectricity.QueueElectricElementConnectionsForSimulation(electricElement, subsystemElectricity.CircuitStep + 1);
                    }
                }
            }));
            return(true);
        }
        public override bool OnEditBlock(int x, int y, int z, int value, ComponentPlayer componentPlayer)
        {
            int data  = Terrain.ExtractData(value);
            int delay = AdjustableDelayGateBlock.GetDelay(data);

            DialogsManager.ShowDialog(componentPlayer.GuiWidget, new EditAdjustableDelayGateDialog(delay, delegate(int newDelay)
            {
                int num = AdjustableDelayGateBlock.SetDelay(data, newDelay);
                if (num != data)
                {
                    int value2 = Terrain.ReplaceData(value, num);
                    base.SubsystemTerrain.ChangeCell(x, y, z, value2);
                    int face = ((AdjustableDelayGateBlock)BlocksManager.Blocks[224]).GetFace(value);
                    SubsystemElectricity subsystemElectricity = base.Project.FindSubsystem <SubsystemElectricity>(throwOnError: true);
                    ElectricElement electricElement           = subsystemElectricity.GetElectricElement(x, y, z, face);
                    if (electricElement != null)
                    {
                        subsystemElectricity.QueueElectricElementForSimulation(electricElement, subsystemElectricity.CircuitStep + 1);
                    }
                }
            }));
            return(true);
        }
예제 #10
0
 private void OnTriggerStay2D(Collider2D collision)
 {
     if (collision.tag == "ElectricElement")
     {
         ElectricElement targetElectricElement = collision.GetComponent <ElectricElement> ();
         if (targetElectricElement != null)
         {
             if (targetElectricElement.activeState == ElectricElement.State.beingInfected)
             {
                 if (npcController.activeBehaviour.getType() != BehaviourType.aggressive)
                 {
                     npcController.ChangeBehaviourTo(string.Format("Aggressive_{0}", targetElectricElement.name), targetElectricElement);
                 }
                 else if (targetElectricElement.activeState == ElectricElement.State.beingDesinfected || targetElectricElement.activeState == ElectricElement.State.infected)
                 {
                     if (npcController.activeBehaviour.getType() == BehaviourType.aggressive)
                     {
                         npcController.ChangeBehaviourTo("FollowPath");
                     }
                 }
             }
         }
     }
 }
예제 #11
0
        public override bool Simulate()
        {
            int   num     = base.SubsystemElectricity.CircuitStep - m_lastChangeCircuitStep;
            float voltage = (CalculateHighInputsCount() > 0) ? 1 : 0;

            if (ElectricElement.IsSignalHigh(voltage) != ElectricElement.IsSignalHigh(m_voltage))
            {
                m_lastChangeCircuitStep = base.SubsystemElectricity.CircuitStep;
            }
            m_voltage = voltage;
            if (num >= 10)
            {
                CellFace cellFace  = base.CellFaces[0];
                int      cellValue = base.SubsystemElectricity.SubsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z);
                int      data      = ChristmasTreeBlock.SetLightState(Terrain.ExtractData(cellValue), ElectricElement.IsSignalHigh(m_voltage));
                int      value     = Terrain.ReplaceData(cellValue, data);
                base.SubsystemElectricity.SubsystemTerrain.ChangeCell(cellFace.X, cellFace.Y, cellFace.Z, value);
            }
            else
            {
                base.SubsystemElectricity.QueueElectricElementForSimulation(this, base.SubsystemElectricity.CircuitStep + 10 - num);
            }
            return(false);
        }
예제 #12
0
 public void AddElectricElementToDB(ElectricElement electricElement)
 {
     notInfectedElectricElements.Add(electricElement.name, electricElement);
 }
        public override bool Simulate()
        {
            float voltage  = m_voltage;
            bool  flag     = false;
            bool  flag2    = false;
            bool  flag3    = false;
            bool  flag4    = false;
            int   rotation = base.Rotation;

            foreach (ElectricConnection connection in base.Connections)
            {
                if (connection.ConnectorType != ElectricConnectorType.Output && connection.NeighborConnectorType != 0)
                {
                    ElectricConnectorDirection?connectorDirection = SubsystemElectricity.GetConnectorDirection(base.CellFaces[0].Face, rotation, connection.ConnectorFace);
                    if (connectorDirection.HasValue)
                    {
                        if (connectorDirection == ElectricConnectorDirection.Right)
                        {
                            flag2 = ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace));
                        }
                        else if (connectorDirection == ElectricConnectorDirection.Left)
                        {
                            flag = ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace));
                        }
                        else if (connectorDirection == ElectricConnectorDirection.Bottom)
                        {
                            flag3 = ElectricElement.IsSignalHigh(connection.NeighborElectricElement.GetOutputVoltage(connection.NeighborConnectorFace));
                            flag4 = true;
                        }
                    }
                }
            }
            if (flag4)
            {
                if (flag3 && m_clockAllowed)
                {
                    m_clockAllowed = false;
                    if (flag && flag2)
                    {
                        m_voltage = ((!ElectricElement.IsSignalHigh(m_voltage)) ? 1 : 0);
                    }
                    else if (flag)
                    {
                        m_voltage = 1f;
                    }
                    else if (flag2)
                    {
                        m_voltage = 0f;
                    }
                }
            }
            else if (flag && m_setAllowed)
            {
                m_setAllowed = false;
                m_voltage    = 1f;
            }
            else if (flag2 && m_resetAllowed)
            {
                m_resetAllowed = false;
                m_voltage      = 0f;
            }
            if (!flag3)
            {
                m_clockAllowed = true;
            }
            if (!flag)
            {
                m_setAllowed = true;
            }
            if (!flag2)
            {
                m_resetAllowed = true;
            }
            if (m_voltage != voltage)
            {
                base.SubsystemElectricity.WritePersistentVoltage(base.CellFaces[0].Point, m_voltage);
                return(true);
            }
            return(false);
        }
예제 #14
0
 public void SetTarget(ElectricElement electricElement)
 {
     this.electricElement = electricElement;
 }
예제 #15
0
 public void SetTarget(ElectricElement electricElement)
 {
     throw new System.NotImplementedException();
 }