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); }
private void ElectronicElementAlert(ElectricElement electronicElement, bool infecting) { foreach (NPCController npcController in npcControllers) { npcController.ElectronicElementAlert(electronicElement, infecting); } }
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); }
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"); } } }
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"); } }
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(); } }
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); }
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"); } } } } } }
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); }
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); }
public void SetTarget(ElectricElement electricElement) { this.electricElement = electricElement; }
public void SetTarget(ElectricElement electricElement) { throw new System.NotImplementedException(); }