Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.nolimitscoaster.*;
- public class BlockScript extends Script implements BlockSystemController, TrackTriggerListener {
- private static final int STATE_BLOCK_FREE = 0;
- private static final int STATE_BLOCK_APPROACHING = 1;
- private static final int STATE_BLOCK_LEAVING = 2;
- private static final int STATE_BLOCK_BEFORE_TRIGGER = 3;
- private static final int STATE_BLOCK_BEHIND_TRIGGER = 4;
- private static final int STATE_BLOCK_WAITING = 5;
- private static final int STATE_BLOCK_WAIT_FOR_CLEAR = 6;
- private static final int STATE_BLOCK_WAIT_FOR_ADVANCE = 7;
- private static final int STATE_BLOCK_IN_STATION = 8;
- private static final int STATE_BLOCK_APPROACHING_B = 9;
- private static final int STATE_BLOCK_LEAVING_B = 10;
- private static final int STATE_BLOCK_BEFORE_TRIGGER_B = 11;
- private static final int STATE_LAUNCH_WAITING = 12;
- private static final int STATE_LAUNCH_BACKWARDS = 13;
- private static final int STATE_LAUNCH_BACKWARDS_READY = 14;
- private static final int STATE_LAUNCH_READY = 15;
- private static final String scriptName = "BlockScript";
- private static final int AUTO_MODE = 0;
- private static final int MANUAL_BLOCK_MODE = 1;
- private static final int FULL_MANUAL_MODE = 2;
- private Coaster coaster;
- private Block stationEnterBlock;
- private Block launchBlock;
- private Block zoneABlock;
- private Block zoneBBlock;
- private Block brakerunABlock;
- private Block brakerunBBlock;
- private Block stationExitBlock;
- private Block storageABlock;
- private Block storageBBlock;
- private SpecialTrack storageSwitch;
- private float launchBlockTime;
- private float launchBlockTimeSequence;
- private int mode;
- private TrackTrigger launchOccupiedEnableTrigger;
- private TrackTrigger launchOccupiedDisableTrigger;
- private TrackTrigger zoneAOccupiedTrigger;
- private TrackTrigger zoneAClearTrigger;
- private TrackTrigger launchBackwardsTrigger;
- private TrackTrigger launchBackwardsReadyTrigger;
- private bool launchOccupied = false;
- private bool zoneAOccupied = false;
- private bool launchBackwards = false;
- private bool launchBackwardsReady = false;
- private bool launchFullyReady = false;
- public bool onInit() {
- String name;
- coaster = sim.getCoasterForEntityId(getParentEntityId());
- if (coaster == null) {
- System.err.println(scriptName + ": Not attached to coaster.");
- return false;
- }
- coaster.setBlockSystemController(this);
- name = "Station Enter";
- stationEnterBlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(stationEnterBlock, name)) {
- return false;
- }
- stationEnterBlock.setAdvanceFwdVisible(true);
- name = "Launch";
- launchBlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(launchBlock, name)) {
- return false;
- }
- launchBlock.setAdvanceFwdVisible(true);
- name = "Zone A";
- zoneABlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(zoneABlock, name)) {
- return false;
- }
- zoneABlock.setAdvanceFwdVisible(true);
- name = "Zone B";
- zoneBBlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(zoneBBlock, name)) {
- return false;
- }
- zoneBBlock.setAdvanceFwdVisible(true);
- name = "Brakerun A";
- brakerunABlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(brakerunABlock, name)) {
- return false;
- }
- brakerunABlock.setAdvanceFwdVisible(true);
- name = "Brakerun B";
- brakerunBBlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(brakerunBBlock, name)) {
- return false;
- }
- brakerunBBlock.setAdvanceFwdVisible(true);
- name = "Station Exit";
- stationExitBlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(stationExitBlock, name)) {
- return false;
- }
- stationExitBlock.setAdvanceFwdVisible(true);
- stationExitBlock.setAdvanceBwdVisible(true);
- name = "Storage A";
- storageABlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(storageABlock, name)) {
- return false;
- }
- storageABlock.setAdvanceFwdVisible(true);
- storageABlock.setAdvanceBwdVisible(true);
- name = "Storage B";
- storageBBlock = coaster.getBlock(name);
- if (!checkAndSetInitialBlockState(storageBBlock, name)) {
- return false;
- }
- storageBBlock.setAdvanceFwdVisible(true);
- name = "Storage Switch";
- storageSwitch = coaster.getSpecialTrack(name);
- if (storageSwitch == null) {
- System.err.println(scriptName + ": SpecialTrack '" + name + "' not found.");
- return false;
- }
- launchOccupiedEnableTrigger = coaster.getTrackTrigger("TriggerTrainBeforeLaunch");
- if (launchOccupiedEnableTrigger == null) {
- System.err.println(scriptName + ": Trigger not found!");
- return false;
- }
- launchOccupiedEnableTrigger.addTrackTriggerListener(this);
- launchOccupiedDisableTrigger = coaster.getTrackTrigger("TriggerTrainAfterLaunch");
- if (launchOccupiedDisableTrigger == null) {
- System.err.println(scriptName + ": Trigger not found!");
- return false;
- }
- launchOccupiedDisableTrigger.addTrackTriggerListener(this);
- zoneAOccupiedTrigger = coaster.getTrackTrigger("TriggerZoneAOccupied");
- if (zoneAOccupiedTrigger == null) {
- System.err.println(scriptName + ": Trigger not found!");
- return false;
- }
- zoneAOccupiedTrigger.addTrackTriggerListener(this);
- zoneAClearTrigger = coaster.getTrackTrigger("TriggerZoneAClear");
- if (zoneAClearTrigger == null) {
- System.err.println(scriptName + ": Trigger not found!");
- return false;
- }
- zoneAClearTrigger.addTrackTriggerListener(this);
- launchBackwardsTrigger = coaster.getTrackTrigger("TriggerLaunchBackwards");
- if (launchBackwardsTrigger == null) {
- System.err.println(scriptName + ": Trigger not found!");
- return false;
- }
- launchBackwardsTrigger.addTrackTriggerListener(this);
- launchBackwardsReadyTrigger = coaster.getTrackTrigger("TriggerLaunchBackwardsReady");
- if (launchBackwardsReadyTrigger == null) {
- System.err.println(scriptName + ": Trigger not found!");
- return false;
- }
- launchBackwardsReadyTrigger.addTrackTriggerListener(this);
- mode = AUTO_MODE;
- return true;
- }
- public void onExit() {
- }
- public void onNextFrame(float tick) {
- System.out.println(launchBackwards + " / " + launchBackwardsReady + " / " + launchBlock.getState() + " / " + launchBlockTime + " / " + launchBlockTimeSequence);
- if (mode != FULL_MANUAL_MODE) {
- processStation(stationEnterBlock, launchBlock);
- processLaunchBlock();
- processAfterLaunchEmergencyBlock();
- processZoneABlock();
- processZoneBBlock();
- processBrakerunABlock();
- processBrakerunBBlock();
- processStation(stationExitBlock, stationEnterBlock);
- processStorageABlock();
- processStorageBBlock();
- if (mode == MANUAL_BLOCK_MODE) {
- updateControlPanel();
- }
- }
- }
- public void onAutoMode(Coaster c) {
- if (mode == FULL_MANUAL_MODE) {
- setInitialBlockState(stationEnterBlock);
- setInitialBlockState(launchBlock);
- setInitialBlockState(zoneABlock);
- setInitialBlockState(zoneBBlock);
- setInitialBlockState(brakerunABlock);
- setInitialBlockState(brakerunBBlock);
- setInitialBlockState(stationExitBlock);
- setInitialBlockState(storageABlock);
- setInitialBlockState(storageBBlock);
- }
- mode = AUTO_MODE;
- updateControlPanel();
- }
- public void onManualBlockMode(Coaster c) {
- if (mode == FULL_MANUAL_MODE) {
- setInitialBlockState(stationEnterBlock);
- setInitialBlockState(launchBlock);
- setInitialBlockState(zoneABlock);
- setInitialBlockState(zoneBBlock);
- setInitialBlockState(brakerunABlock);
- setInitialBlockState(brakerunBBlock);
- setInitialBlockState(stationExitBlock);
- setInitialBlockState(storageABlock);
- setInitialBlockState(storageBBlock);
- }
- mode = MANUAL_BLOCK_MODE;
- updateControlPanel();
- }
- public void onFullManualMode(Coaster c) {
- mode = FULL_MANUAL_MODE;
- updateControlPanel();
- }
- public void onAdvanceFWDButton(Block block) {
- if (block == stationEnterBlock) {
- launchBlock.setState(STATE_BLOCK_APPROACHING);
- stationEnterBlock.setState(STATE_BLOCK_LEAVING);
- stationEnterBlock.getSection().setStationLeaving();
- } else if (block == launchBlock) {
- zoneABlock.setState(STATE_BLOCK_APPROACHING);
- launchBlock.setState(STATE_BLOCK_LEAVING);
- } else if (block == zoneABlock) {
- zoneBBlock.setState(STATE_BLOCK_APPROACHING);
- zoneABlock.setState(STATE_BLOCK_LEAVING);
- } else if (block == zoneBBlock) {
- brakerunABlock.setState(STATE_BLOCK_APPROACHING);
- zoneBBlock.setState(STATE_BLOCK_LEAVING);
- } else if (block == brakerunABlock) {
- brakerunBBlock.setState(STATE_BLOCK_APPROACHING);
- brakerunABlock.setState(STATE_BLOCK_LEAVING);
- } else if (block == brakerunBBlock) {
- stationExitBlock.setState(STATE_BLOCK_APPROACHING);
- brakerunBBlock.setState(STATE_BLOCK_LEAVING);
- } else if (block == stationExitBlock) {
- stationEnterBlock.setState(STATE_BLOCK_APPROACHING);
- stationExitBlock.setState(STATE_BLOCK_LEAVING);
- stationExitBlock.getSection().setStationLeaving();
- } else if (block == storageABlock) {
- Train train = block.getSection().getTrainOnSection();
- if (train != null) train.setLashedToTrack(false);
- stationExitBlock.setState(STATE_BLOCK_APPROACHING);
- storageABlock.setState(STATE_BLOCK_LEAVING);
- } else if (block == storageBBlock) {
- Train train = block.getSection().getTrainOnSection();
- if (train != null) train.setLashedToTrack(false);
- storageABlock.setState(STATE_BLOCK_APPROACHING);
- storageBBlock.setState(STATE_BLOCK_LEAVING);
- }
- }
- public void onAdvanceBWDButton(Block block) {
- if (block == stationExitBlock) {
- storageABlock.setState(STATE_BLOCK_APPROACHING);
- stationExitBlock.setState(STATE_BLOCK_LEAVING_B);
- stationExitBlock.getSection().setStationLeaving();
- } else if (block == storageABlock) {
- Train train = block.getSection().getTrainOnSection();
- if (train != null) train.setLashedToTrack(false);
- storageBBlock.setState(STATE_BLOCK_APPROACHING);
- storageABlock.setState(STATE_BLOCK_LEAVING);
- }
- }
- private static bool checkAndSetInitialBlockState(Block block, String name) {
- if (block == null) {
- System.err.println(scriptName + ": Block '" + name + "' not found.");
- return false;
- }
- registerBlockStates(block);
- setInitialBlockState(block);
- return true;
- }
- private static void setInitialBlockState(Block block) {
- if (block.getNumberOfTrainsOnBlock() > 0) {
- if (block.getSection().iStation()) {
- block.setState(STATE_BLOCK_IN_STATION);
- } else {
- block.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
- }
- } else {
- block.setState(STATE_BLOCK_FREE);
- }
- }
- private static void registerBlockStates(Block block) {
- block.registerState(STATE_BLOCK_FREE, "Free", Block.LAMP_OFF);
- block.registerState(STATE_BLOCK_APPROACHING, "Approaching", Block.LAMP_FLASHING);
- block.registerState(STATE_BLOCK_APPROACHING_B, "Approaching", Block.LAMP_FLASHING);
- block.registerState(STATE_BLOCK_LEAVING, "Leaving", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_LEAVING_B, "Leaving B", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_BEFORE_TRIGGER, "Before Trigger", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_BEFORE_TRIGGER_B, "Before Trigger", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_BEHIND_TRIGGER, "Behind Trigger", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_WAITING, "Waiting", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_WAIT_FOR_CLEAR, "Waiting for Clear Block", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_WAIT_FOR_ADVANCE, "Waiting for Advance", Block.LAMP_ON);
- block.registerState(STATE_BLOCK_IN_STATION, "In Station", Block.LAMP_ON);
- }
- private void updateControlPanel() {
- stationEnterBlock.setAdvanceFwdEnabled(stationEnterBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- launchBlock.setAdvanceFwdEnabled(launchBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- zoneABlock.setAdvanceFwdEnabled(zoneABlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- zoneBBlock.setAdvanceFwdEnabled(zoneBBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- brakerunABlock.setAdvanceFwdEnabled(brakerunABlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- brakerunBBlock.setAdvanceFwdEnabled((brakerunBBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE) && canBrakeMoveForward());
- stationExitBlock.setAdvanceFwdEnabled(stationExitBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- stationExitBlock.setAdvanceBwdEnabled((stationExitBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE) && canExitMoveBackward());
- storageABlock.setAdvanceFwdEnabled((storageABlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE) && canStorageMoveForward());
- storageABlock.setAdvanceBwdEnabled(storageABlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- storageBBlock.setAdvanceFwdEnabled(storageBBlock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE);
- }
- private void processStation(Block stationBlock, Block nextBlock) {
- switch (stationBlock.getState()) {
- case STATE_BLOCK_IN_STATION:
- if (stationBlock.getSection().isStationWaitingForClearBlock()) {
- if (nextBlock.getState() == STATE_BLOCK_FREE) {
- if ((stationBlock.getName() == "Station Exit") || !launchOccupied) {
- stationBlock.getSection().setStationNextBlockClear();
- }
- }
- } else if (stationBlock.getSection().isStationWaitingForAdvance()) {
- if (mode == MANUAL_BLOCK_MODE) {
- if (nextBlock.getState() == STATE_BLOCK_FREE) {
- stationBlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
- } else {
- stationBlock.getSection().setStationNextBlockOccupied();
- }
- } else {
- if (nextBlock.getState() == STATE_BLOCK_FREE) {
- nextBlock.setState(STATE_BLOCK_APPROACHING);
- stationBlock.setState(STATE_BLOCK_LEAVING);
- stationBlock.getSection().setStationLeaving();
- } else {
- stationBlock.getSection().setStationNextBlockOccupied();
- }
- }
- }
- break;
- case STATE_BLOCK_WAIT_FOR_ADVANCE:
- if ((mode != MANUAL_BLOCK_MODE) || !stationBlock.getSection().isStationWaitingForAdvance() || (nextBlock.getState() != STATE_BLOCK_FREE)) {
- stationBlock.setState(STATE_BLOCK_IN_STATION);
- }
- break;
- case STATE_BLOCK_LEAVING:
- if (stationBlock.getNumberOfTrainsOnBlock() != 0) {
- stationBlock.getSection().setBrakesOff();
- stationBlock.getSection().setTransportsStandardFwdOn();
- } else {
- stationBlock.setState(STATE_BLOCK_FREE);
- }
- break;
- case STATE_BLOCK_LEAVING_B:
- if (stationBlock.getNumberOfTrainsOnBlock() != 0) {
- stationBlock.getSection().setBrakesOff();
- stationBlock.getSection().setTransportsStandardBwdOn();
- } else {
- stationBlock.setState(STATE_BLOCK_FREE);
- }
- break;
- case STATE_BLOCK_FREE:
- stationBlock.getSection().setTransportsOff();
- stationBlock.getSection().setBrakesOn();
- break;
- case STATE_BLOCK_APPROACHING:
- if (stationBlock.getSection().isTrainOnSection()) {
- stationBlock.getSection().setStationEntering(); //TODO Custom station entering
- stationBlock.setState(STATE_BLOCK_IN_STATION);
- } else {
- stationBlock.getSection().setBrakesOff();
- stationBlock.getSection().setTransportsOff();
- }
- break;
- }
- }
- private void processLaunchBlock() {
- switch (launchBlock.getState()) {
- case STATE_BLOCK_APPROACHING:
- launchBlock.getSection().setBrakesOff();
- launchBlock.getSection().setTransportsOff();
- if (launchBlock.getSection().isTrainOnSection()) {
- launchBlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- }
- break;
- case STATE_BLOCK_BEFORE_TRIGGER:
- launchBlock.getSection().setBrakesTrim();
- launchBlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (launchBlock.getSection().isTrainBehindBrakeTrigger()) {
- launchBlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- }
- break;
- case STATE_BLOCK_BEHIND_TRIGGER:
- launchBlock.getSection().setBrakesOn();
- launchBlock.getSection().setTransportsOff();
- Train train = launchBlock.getSection().getTrainOnSection();
- if (train.getSpeed() == 0) {
- launchBlockTime = 0;
- launchBlock.setState(STATE_BLOCK_WAITING);
- }
- break;
- case STATE_BLOCK_WAITING:
- //OLD CODE
- ///////////
- //launchBlock.getSection().setBrakesOn();
- //launchBlock.getSection().setTransportsOff();
- //launchBlockTime += sim.getCurSimulationTickSec();
- //if (launchBlockTime >= launchBlock.getSection().getBrakeWaitTime()) {
- // launchBlock.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
- //}
- if (!zoneAOccupied) {
- launchBlock.setState(STATE_LAUNCH_WAITING);
- }
- break;
- case STATE_LAUNCH_WAITING:
- launchBlock.getSection().setTransportsOff();
- launchBlock.getSection().setBrakesOn();
- launchBlockTime += sim.getCurSimulationTickSec();
- if (launchBlockTime >= 5.0f) {
- launchBlock.setState(STATE_LAUNCH_BACKWARDS);
- }
- break;
- case STATE_LAUNCH_BACKWARDS:
- launchBlock.getSection().setTransportsStandardBwdOn();
- launchBlock.getSection().setBrakesOff();
- if (launchBackwardsReady) {
- launchBlockTimeSequence = 0;
- launchBlock.setState(STATE_LAUNCH_BACKWARDS_READY);
- }
- break;
- case STATE_LAUNCH_BACKWARDS_READY:
- launchBlock.getSection().setTransportsOff();
- launchBlock.getSection().setBrakesOn();
- launchBlockTimeSequence += sim.getCurSimulationTickSec();
- if (launchBlockTimeSequence >= 10) {
- launchBlock.setState(STATE_LAUNCH_READY);
- }
- break;
- case STATE_LAUNCH_READY:
- launchBlock.getSection().setTransportsLaunchFwdOn();
- launchBlock.getSection().setBrakesOff();
- launchBlock.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
- break;
- case STATE_BLOCK_WAIT_FOR_CLEAR:
- launchBlock.getSection().setBrakesOn();
- launchBlock.getSection().setTransportsOff();
- if (mode == MANUAL_BLOCK_MODE) {
- launchBlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
- } else {
- zoneABlock.setState(STATE_BLOCK_APPROACHING);
- launchBlock.setState(STATE_BLOCK_LEAVING);
- }
- break;
- case STATE_BLOCK_WAIT_FOR_ADVANCE:
- launchBlock.getSection().setBrakesOn();
- launchBlock.getSection().setTransportsOff();
- break;
- case STATE_BLOCK_LEAVING:
- if (launchBlock.getSection().isTrainOnSection()) {
- launchBlock.getSection().setBrakesOff();
- launchBlock.getSection().setTransportsLaunchFwdOn();
- } else {
- launchBlock.getSection().setBrakesOn();
- launchBlock.getSection().setTransportsOff();
- }
- if (launchBlock.getNumberOfTrainsOnBlock() == 0) {
- launchBlock.setState(STATE_BLOCK_FREE);
- }
- break;
- case STATE_BLOCK_FREE:
- launchBlock.getSection().setBrakesOn();
- launchBlock.getSection().setTransportsOff();
- break;
- }
- }
- private void processAfterLaunchEmergencyBlock() {
- if (Master.isFailure()) {
- coaster.getBlock("After Launch Emergency Brakes").getSection().setBrakesOn();
- } else {
- coaster.getBlock("After Launch Emergency Brakes").getSection().setBrakesOff();
- }
- }
- private void processZoneABlock() {
- switch (zoneABlock.getState()) {
- case STATE_BLOCK_FREE:
- zoneABlock.getSection().setTransportsOff();
- zoneABlock.getSection().setBrakesOn();
- break;
- case STATE_BLOCK_APPROACHING:
- if (zoneABlock.getSection().isTrainOnSection()) {
- zoneABlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- } else {
- zoneABlock.getSection().setBrakesOff();
- zoneABlock.getSection().setTransportsOff();
- }
- break;
- case STATE_BLOCK_BEFORE_TRIGGER:
- zoneABlock.getSection().setBrakesTrim();
- zoneABlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (zoneABlock.getSection().isTrainBehindBrakeTrigger()) {
- zoneABlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- }
- break;
- case STATE_BLOCK_BEHIND_TRIGGER:
- if (mode == MANUAL_BLOCK_MODE) {
- zoneABlock.getSection().setTransportsOff();
- zoneABlock.getSection().setBrakesOn();
- zoneABlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
- } else {
- if (mode == AUTO_MODE) {
- zoneBBlock.setState(STATE_BLOCK_APPROACHING);
- zoneABlock.setState(STATE_BLOCK_LEAVING);
- } else {
- zoneABlock.getSection().setTransportsOff();
- zoneABlock.getSection().setBrakesOn();
- }
- }
- break;
- case STATE_BLOCK_WAIT_FOR_ADVANCE:
- if (mode == AUTO_MODE) {
- zoneABlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- } else {
- zoneABlock.getSection().setTransportsOff();
- zoneABlock.getSection().setBrakesOn();
- }
- break;
- case STATE_BLOCK_LEAVING:
- zoneABlock.getSection().setBrakesOff();
- zoneABlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (zoneABlock.getNumberOfTrainsOnBlock() == 0) {
- zoneABlock.setState(STATE_BLOCK_FREE);
- }
- break;
- case STATE_BLOCK_WAIT_FOR_CLEAR:
- if (zoneABlock.getSection().isTrainBehindBrakeTrigger()) {
- zoneABlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- } else {
- zoneABlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- }
- break;
- }
- }
- private void processZoneBBlock() {
- switch (zoneBBlock.getState()) {
- case STATE_BLOCK_FREE:
- zoneBBlock.getSection().setTransportsOff();
- zoneBBlock.getSection().setBrakesOn();
- break;
- case STATE_BLOCK_APPROACHING:
- if (zoneBBlock.getSection().isTrainOnSection()) {
- zoneBBlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- } else {
- zoneBBlock.getSection().setBrakesOff();
- zoneBBlock.getSection().setTransportsOff();
- }
- break;
- case STATE_BLOCK_BEFORE_TRIGGER:
- zoneBBlock.getSection().setBrakesTrim();
- zoneBBlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (zoneBBlock.getSection().isTrainBehindBrakeTrigger()) {
- zoneBBlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- }
- break;
- case STATE_BLOCK_BEHIND_TRIGGER:
- if (mode == MANUAL_BLOCK_MODE) {
- zoneBBlock.getSection().setTransportsOff();
- zoneBBlock.getSection().setBrakesOn();
- zoneBBlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
- } else {
- if (mode == AUTO_MODE) {
- brakerunABlock.setState(STATE_BLOCK_APPROACHING);
- zoneBBlock.setState(STATE_BLOCK_LEAVING);
- } else {
- zoneBBlock.getSection().setTransportsOff();
- zoneBBlock.getSection().setBrakesOn();
- }
- }
- break;
- case STATE_BLOCK_WAIT_FOR_ADVANCE:
- if (mode == AUTO_MODE) {
- zoneBBlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- } else {
- zoneBBlock.getSection().setTransportsOff();
- zoneBBlock.getSection().setBrakesOn();
- }
- break;
- case STATE_BLOCK_LEAVING:
- zoneBBlock.getSection().setBrakesOff();
- zoneBBlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (zoneBBlock.getNumberOfTrainsOnBlock() == 0) {
- zoneBBlock.setState(STATE_BLOCK_FREE);
- }
- break;
- case STATE_BLOCK_WAIT_FOR_CLEAR:
- if (zoneBBlock.getSection().isTrainBehindBrakeTrigger()) {
- zoneBBlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- } else {
- zoneBBlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- }
- break;
- }
- }
- private void processBrakerunABlock() {
- switch (brakerunABlock.getState()) {
- case STATE_BLOCK_FREE:
- brakerunABlock.getSection().setTransportsOff();
- brakerunABlock.getSection().setBrakesOn();
- break;
- case STATE_BLOCK_APPROACHING:
- if (brakerunABlock.getSection().isTrainOnSection()) {
- brakerunABlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- } else {
- brakerunABlock.getSection().setBrakesOff();
- brakerunABlock.getSection().setTransportsOff();
- }
- break;
- case STATE_BLOCK_BEFORE_TRIGGER:
- brakerunABlock.getSection().setBrakesTrim();
- brakerunABlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (brakerunABlock.getSection().isTrainBehindBrakeTrigger()) {
- brakerunABlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- }
- break;
- case STATE_BLOCK_BEHIND_TRIGGER:
- if (brakerunBBlock.getState() == STATE_BLOCK_FREE) {
- if (mode == MANUAL_BLOCK_MODE) {
- brakerunABlock.getSection().setTransportsOff();
- brakerunABlock.getSection().setBrakesOn();
- brakerunABlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
- } else {
- if (mode == AUTO_MODE) {
- brakerunBBlock.setState(STATE_BLOCK_APPROACHING);
- brakerunABlock.setState(STATE_BLOCK_LEAVING);
- } else {
- brakerunABlock.getSection().setTransportsOff();
- brakerunABlock.getSection().setBrakesOn();
- }
- }
- } else {
- brakerunABlock.getSection().setBrakesOn();
- brakerunABlock.getSection().setTransportsOff();
- Train train = brakerunABlock.getSection().getTrainOnSection();
- if (train.getSpeed() == 0) {
- brakerunABlock.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
- }
- }
- break;
- case STATE_BLOCK_WAIT_FOR_ADVANCE:
- if (mode == AUTO_MODE) {
- brakerunABlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- } else {
- brakerunABlock.getSection().setTransportsOff();
- brakerunABlock.getSection().setBrakesOn();
- }
- break;
- case STATE_BLOCK_LEAVING:
- brakerunABlock.getSection().setBrakesOff();
- brakerunABlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (brakerunABlock.getNumberOfTrainsOnBlock() == 0) {
- brakerunABlock.setState(STATE_BLOCK_FREE);
- }
- break;
- case STATE_BLOCK_WAIT_FOR_CLEAR:
- if (brakerunABlock.getSection().isTrainBehindBrakeTrigger()) {
- brakerunABlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- } else {
- brakerunABlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- }
- break;
- }
- }
- private void processBrakerunBBlock() {
- switch (brakerunBBlock.getState()) {
- case STATE_BLOCK_FREE:
- brakerunBBlock.getSection().setTransportsOff();
- brakerunBBlock.getSection().setBrakesOn();
- break;
- case STATE_BLOCK_APPROACHING:
- if (brakerunBBlock.getSection().isTrainOnSection()) {
- brakerunBBlock.setState(STATE_BLOCK_BEFORE_TRIGGER);
- } else {
- brakerunBBlock.getSection().setBrakesOff();
- brakerunBBlock.getSection().setTransportsOff();
- }
- break;
- case STATE_BLOCK_BEFORE_TRIGGER:
- brakerunBBlock.getSection().setBrakesTrim();
- brakerunBBlock.getSection().setTransportsStandardFwdDependingOnBrake();
- if (brakerunBBlock.getSection().isTrainBehindBrakeTrigger()) {
- brakerunBBlock.setState(STATE_BLOCK_BEHIND_TRIGGER);
- }
- break;
- case STATE_BLOCK_BEHIND_TRIGGER:
- brakerunBBlock.getSection().setTransportsOff();
- brakerunBBlock.getSection().setBrakesOn();
- brakerunBBlock.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
- break;
- case STATE_BLOCK_WAIT_FOR_CLEAR:
- brakerunBBlock.getSection().setBrakesOn();
- brakerunBBlock.getSection().setTransportsOff();
- if (canBrakeMoveForward()) {
- if (mode == MANUAL_BLOCK_MODE) {
- brakerunBBlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
- } else {
- stationExitBlock.setState(STATE_BLOCK_APPROACHING);
- brakerunBBlock.setState(STATE_BLOCK_LEAVING);
- }
- }
- break;
- case STATE_BLOCK_WAIT_FOR_ADVANCE:
- brakerunBBlock.getSection().setBrakesOn();
- brakerunBBlock.getSection().setTransportsOff();
- if (!canBrakeMoveForward()) {
- brakerunBBlock.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
- }
- break;
- case STATE_BLOCK_LEAVING:
- if (brakerunBBlock.getSection().isTrainOnSection()) {
- brakerunBBlock.getSection().setBrakesOff();
- brakerunBBlock.getSection().setTransportsStandardFwdDependingOnBrake();
- } else {
- brakerunBBlock.getSection().setBrakesOn();
- brakerunBBlock.getSection().setTransportsOff();
- }
- if (brakerunBBlock.getNumberOfTrainsOnBlock() == 0) {
- brakerunBBlock.setState(STATE_BLOCK_FREE);
- }
- break;
- }
- }
- private void processStorageABlock() {
- }
- private void processStorageBBlock() {
- }
- private bool canBrakeMoveForward() {
- return (storageSwitch.getSwitchDirection() == 0) && (stationExitBlock.getState() == STATE_BLOCK_FREE);
- }
- private bool canExitMoveBackward() {
- return (storageSwitch.getSwitchDirection() == 1) && (storageABlock.getState() == STATE_BLOCK_FREE);
- }
- private bool canStorageMoveForward() {
- return (storageSwitch.getSwitchDirection() == 1) && (stationExitBlock.getState() == STATE_BLOCK_FREE);
- }
- public void onTrainEntering(TrackTrigger trigger, Train train) {
- if (trigger == launchOccupiedEnableTrigger) {
- launchOccupied = true;
- } else if (trigger == launchOccupiedDisableTrigger) {
- launchOccupied = false;
- } else if (trigger == zoneAOccupiedTrigger) {
- zoneAOccupied = true;
- } else if (trigger == launchBackwardsTrigger) {
- launchBackwards = true;
- } else if ((trigger == launchBackwardsReadyTrigger) && (launchBackwards)) {
- launchBackwardsReady = true;
- }
- }
- public void onTrainLeaving(TrackTrigger trigger, Train train) {
- if (trigger == zoneAClearTrigger) {
- zoneAOccupied = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement