Advertisement
Guest User

Untitled

a guest
Feb 13th, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.07 KB | None | 0 0
  1. import com.nolimitscoaster.*;
  2. import nlvm.lang.Math;
  3.  
  4. public class TransferScript extends Script implements BlockSystemController
  5. {
  6.  
  7. private static final int CLEAR = 0;
  8. private static final int APPROACHING = 1;
  9. private static final int WAITING = 2;
  10. private static final int READY = 3;
  11. private static final int LEAVING = 4;
  12. private static final int DISPATCHREADY = 5;
  13. private static final int DISPATCH = 6;
  14. private static final int ENTERING = 7;
  15. private static final int APPROACHING_R = 8;
  16. private static final int LEAVING_R = 9;
  17. private static final int READY_F = 10;
  18. private static final int READY_R = 11;
  19. private static final int ENTERING_R = 12;
  20.  
  21. private static final int AUTO = 0;
  22. private static final int MANUAL = 1;
  23. private static final int FULL_MANUAL = 2;
  24.  
  25. private Coaster coaster;
  26.  
  27. private Block station;
  28. private Block transferBreak;
  29. private Block leftBreak1;
  30. private Block leftBreak2;
  31. private Block rightBreak1;
  32. private Block rightBreak2;
  33. private Block storage1;
  34. private Block storage2;
  35.  
  36. private SpecialTrack transferTable;
  37. private SpecialTrack transferSwitch;
  38.  
  39. private double trackSide = 0;
  40.  
  41. private int mode;
  42.  
  43. public bool onInit()
  44. {
  45. coaster = sim.getCoasterForEntityId(getParentEntityId());
  46. if (coaster == null){
  47. System.err.println("Unable to locate coaster!");
  48. return false;
  49. }
  50. coaster.setBlockSystemController(this);
  51. System.out.println("Found Coaster");
  52.  
  53. station = coaster.getBlock("station");
  54. if (!initializeBlockState(station, "station"))
  55. {
  56. System.err.println("Unable to locate station!");
  57. return false;
  58. }
  59. station.setAdvanceFwdVisible(true);
  60. System.out.println("Found Station");
  61.  
  62.  
  63. transferBreak = coaster.getBlock("transferBreak");
  64. if (!initializeBlockState(transferBreak, "transferBreak")){
  65. System.err.println("Unable to locate transferBreak!");
  66. return false;
  67. }
  68. transferBreak.setAdvanceFwdVisible(true);
  69. System.out.println("Found transferBreak");
  70.  
  71. leftBreak1 = coaster.getBlock("leftBreak1");
  72. if (!initializeBlockState(leftBreak1, "leftBreak1")){
  73. System.err.println("Unable to locate leftBreak1!");
  74. return false;
  75. }
  76. leftBreak1.setAdvanceFwdVisible(true);
  77. System.out.println("Found leftBreak1");
  78.  
  79. leftBreak2 = coaster.getBlock("leftBreak2");
  80. if (!initializeBlockState(leftBreak2, "leftBreak2")){
  81. System.err.println("Unable to locate leftBreak2!");
  82. return false;
  83. }
  84. leftBreak2.setAdvanceFwdVisible(true);
  85. System.out.println("Found leftBreak2");
  86.  
  87. rightBreak1 = coaster.getBlock("rightBreak1");
  88. if (!initializeBlockState(rightBreak1, "rightBreak1")){
  89. System.err.println("Unable to locate rightBreak1!");
  90. return false;
  91. }
  92. rightBreak1.setAdvanceFwdVisible(true);
  93. System.out.println("Found rightBreak1");
  94.  
  95. rightBreak2 = coaster.getBlock("rightBreak2");
  96. if (!initializeBlockState(rightBreak2, "rightBreak2")){
  97. System.err.println("Unable to locate rightBreak2!");
  98. return false;
  99. }
  100. rightBreak2.setAdvanceFwdVisible(true);
  101. System.out.println("Found rightBreak2");
  102.  
  103. transferTable = coaster.getSpecialTrack("transferTable");
  104. if (transferTable == null){
  105. System.err.println("Unable to locate transferTable!");
  106. return false;
  107. }
  108. System.out.println("Found transferTable");
  109.  
  110. transferSwitch = coaster.getSpecialTrack("transferSwitch");
  111. if (transferSwitch == null){
  112. System.err.println("Unable to locate transferSwitch!");
  113. return false;
  114. }
  115. System.out.println("Found transferSwitch");
  116.  
  117. storage1 = coaster.getBlock("storage1");
  118. if (!initializeBlockState(storage1, "storage1")){
  119. System.err.println("Unable to locate storage1!");
  120. return false;
  121. }
  122. storage1.setAdvanceFwdVisible(true);
  123. storage1.setAdvanceBwdVisible(true);
  124. System.out.println("Found storage1");
  125.  
  126. storage2 = coaster.getBlock("storage2");
  127. if (!initializeBlockState(storage2, "storage2")){
  128. System.err.println("Unable to locate storage2!");
  129. return false;
  130. }
  131. storage2.setAdvanceBwdVisible(true);
  132. System.out.println("Found storage2");
  133.  
  134. if (transferTable.getSwitchDirection() != 1)
  135. {
  136. System.out.println("Oops, Transfer track is not in the right spot, let me fix that for you!");
  137. transferTable.setSwitchDirection(1);
  138. }
  139.  
  140. trackSide = Math.random();
  141.  
  142. if (trackSide <= 0.5)
  143. {
  144. trackSide = 0;
  145. //System.out.println("Left");
  146. }
  147. else
  148. {
  149. trackSide = 1;
  150. //System.out.println("Right");
  151. }
  152.  
  153. System.out.println("Transfer Script Initialised");
  154.  
  155. mode = MANUAL;
  156. return true;
  157. }
  158.  
  159. public void onExit()
  160. {
  161. }
  162.  
  163. public void onNextFrame(float tick)
  164. {
  165. if (mode == AUTO)
  166. {
  167. autoStation();
  168. autoTransferBreak();
  169. autoLeftBreak1();
  170. autoLeftBreak2();
  171. autoRightBreak1();
  172. autoRightBreak2();
  173. updateControlPanel();
  174. }
  175.  
  176. if (mode == MANUAL)
  177. {
  178. manualStation();
  179. manualTransferBreak();
  180. manualLeftBreak1();
  181. manualLeftBreak2();
  182. manualRightBreak1();
  183. manualRightBreak2();
  184. manualStorage1();
  185. manualStorage2();
  186. updateControlPanel();
  187. }
  188. }
  189.  
  190. public void onAutoMode(Coaster c)
  191. {
  192. if (mode == FULL_MANUAL)
  193. {
  194. setInitialBlockState(station);
  195. setInitialBlockState(transferBreak);
  196. setInitialBlockState(leftBreak1);
  197. setInitialBlockState(leftBreak2);
  198. setInitialBlockState(rightBreak1);
  199. setInitialBlockState(rightBreak2);
  200. setInitialBlockState(storage1);
  201. setInitialBlockState(storage2);
  202. }
  203. mode = AUTO;
  204. updateControlPanel();
  205. }
  206.  
  207. public void onManualBlockMode(Coaster c)
  208. {
  209. if (mode == FULL_MANUAL)
  210. {
  211. setInitialBlockState(station);
  212. setInitialBlockState(transferBreak);
  213. setInitialBlockState(leftBreak1);
  214. setInitialBlockState(leftBreak2);
  215. setInitialBlockState(rightBreak1);
  216. setInitialBlockState(rightBreak2);
  217. setInitialBlockState(storage1);
  218. setInitialBlockState(storage2);
  219. }
  220. mode = MANUAL;
  221. updateControlPanel();
  222. }
  223.  
  224. public void onFullManualMode(Coaster c)
  225. {
  226. mode = FULL_MANUAL;
  227. updateControlPanel();
  228. }
  229.  
  230. public void onAdvanceFWDButton(Block block)
  231. {
  232. if (block == station){
  233. transferBreak.setState(APPROACHING);
  234. station.setState(LEAVING);
  235. }
  236. else if (block == transferBreak){
  237. if (transferTable.getSwitchDirection() == 0)
  238. {
  239. leftBreak1.setState(APPROACHING);
  240. transferBreak.setState(LEAVING);
  241. }
  242. else if (transferTable.getSwitchDirection() == 2)
  243. {
  244. rightBreak1.setState(APPROACHING);
  245. transferBreak.setState(LEAVING);
  246. }
  247. else if (transferTable.getSwitchDirection() == 1)
  248. {
  249. storage1.setState(APPROACHING);
  250. transferBreak.setState(LEAVING);
  251. }
  252. }
  253. else if (block == storage1)
  254. {
  255. storage2.setState(APPROACHING);
  256. storage1.setState(LEAVING);
  257. }
  258. else if (block == leftBreak1){
  259. leftBreak2.setState(APPROACHING);
  260. leftBreak1.setState(LEAVING);
  261. }
  262. else if (block == rightBreak1){
  263. rightBreak2.setState(APPROACHING);
  264. rightBreak1.setState(LEAVING);
  265. }
  266. else if (block == leftBreak2){
  267. station.setState(APPROACHING);
  268. leftBreak2.setState(LEAVING);
  269. }
  270. else if (block == rightBreak2){
  271. station.setState(APPROACHING);
  272. rightBreak2.setState(LEAVING);
  273. }
  274. }
  275.  
  276. public void onAdvanceBWDButton(Block block)
  277. {
  278. if (block == storage1)
  279. {
  280. transferBreak.setState(APPROACHING_R);
  281. storage1.setState(LEAVING_R);
  282. }
  283. else if (block == storage2)
  284. {
  285. storage1.setState(APPROACHING_R);
  286. storage2.setState(LEAVING_R);
  287. }
  288. }
  289.  
  290. private static bool initializeBlockState(Block block, String name)
  291. {
  292. if (block == null)
  293. {
  294. System.err.println(":Block'" + name + "' not found");
  295. }
  296. registerBlockStates(block);
  297. setInitialBlockState(block);
  298. return true;
  299. }
  300.  
  301. private static void setInitialBlockState(Block block)
  302. {
  303. if (block.getNumberOfTrainsOnBlock() > 0) block.setState(WAITING);
  304. else block.setState(CLEAR);
  305. }
  306.  
  307. private static void registerBlockStates(Block block)
  308. {
  309. block.registerState(CLEAR,"Clear",Block.LAMP_OFF);
  310. block.registerState(APPROACHING,"Approaching",Block.LAMP_FLASHING);
  311. block.registerState(WAITING,"Waiting",Block.LAMP_OFF);
  312. block.registerState(READY,"Ready",Block.LAMP_ON);
  313. block.registerState(LEAVING,"Leaving",Block.LAMP_FLASHING);
  314. block.registerState(DISPATCHREADY,"Dispatch Ready",Block.LAMP_FLASHING);
  315. block.registerState(DISPATCH,"Dispatch",Block.LAMP_FLASHING);
  316. block.registerState(ENTERING,"Entering",Block.LAMP_FLASHING);
  317. block.registerState(APPROACHING_R,"Approaching Reverse",Block.LAMP_FLASHING);
  318. block.registerState(LEAVING_R,"Leaving Reverse",Block.LAMP_FLASHING);
  319. block.registerState(READY_F,"Ready Forward",Block.LAMP_ON);
  320. block.registerState(READY_R,"Ready Reverse",Block.LAMP_ON);
  321. block.registerState(ENTERING_R,"Entering Reverse",Block.LAMP_FLASHING);
  322. }
  323.  
  324. private void updateControlPanel()
  325. {
  326. station.setAdvanceFwdEnabled(station.getState() == READY);
  327. transferBreak.setAdvanceFwdEnabled(transferBreak.getState() == READY || transferBreak.getState() == READY_F);
  328. leftBreak1.setAdvanceFwdEnabled(leftBreak1.getState() == READY);
  329. leftBreak2.setAdvanceFwdEnabled(leftBreak2.getState() == READY);
  330. rightBreak1.setAdvanceFwdEnabled(rightBreak1.getState() == READY);
  331. rightBreak2.setAdvanceFwdEnabled(rightBreak2.getState() == READY);
  332. storage1.setAdvanceFwdEnabled(storage1.getState() == READY || storage1.getState() == READY_F);
  333.  
  334. storage1.setAdvanceBwdEnabled(storage1.getState() == READY || storage1.getState() == READY_R);
  335. storage2.setAdvanceBwdEnabled(storage2.getState() == READY || storage2.getState() == READY_R);
  336. }
  337.  
  338. private void autoStation()
  339. {
  340. switch (station.getState())
  341. {
  342. case CLEAR:
  343. //System.out.println("Station State Clear");
  344. station.getSection().setBrakesOn();
  345. station.getSection().setTransportsOff();
  346. break;
  347. case APPROACHING:
  348. //System.out.println("Station State Approaching");
  349. station.getSection().setBrakesOff();
  350. station.getSection().setTransportsStandardFwdOn();
  351. if (station.getSection().isTrainOnSection()) station.setState(ENTERING);
  352. break;
  353. case ENTERING:
  354. station.getSection().setStationEntering();
  355. station.setState(WAITING);
  356. break;
  357. case WAITING:
  358. //System.out.println("Station State Waiting");
  359. if(transferBreak.getState() == CLEAR && transferTable.getSwitchDirection() == 1) station.setState(DISPATCHREADY);
  360. break;
  361. case DISPATCHREADY:
  362. //System.out.println("Station State Ready");
  363. station.getSection().setStationNextBlockClear();
  364. if (station.getSection().isStationWaitingForAdvance())
  365. {
  366. transferBreak.setState(APPROACHING);
  367. station.setState(DISPATCH);
  368. }
  369. break;
  370. case DISPATCH:
  371. //System.out.println("Station State Dispatch");
  372. station.getSection().setStationLeaving();
  373. station.getSection().setBrakesOff();
  374. station.getSection().setTransportsStandardFwdOn();
  375. if (!station.getSection().isTrainOnSection()) station.setState(CLEAR);
  376. break;
  377. }
  378. }
  379.  
  380. private void autoTransferBreak()
  381. {
  382. switch (transferBreak.getState())
  383. {
  384. case CLEAR:
  385. //System.out.println("transferBreak State State Clear");
  386. transferBreak.getSection().setBrakesOn();
  387. transferBreak.getSection().setTransportsOff();
  388. break;
  389. case APPROACHING:
  390. //System.out.println("transferBreak State Approaching");
  391. if (transferBreak.getSection().isTrainOnSection()) transferBreak.setState(ENTERING);
  392. break;
  393. case ENTERING:
  394. //System.out.println("transferBreak State Entering");
  395. transferBreak.getSection().setBrakesOff();
  396. transferBreak.getSection().setTransportsStandardFwdOn();
  397. if (transferBreak.getSection().isTrainBehindBrakeTrigger()) transferBreak.setState(WAITING);
  398. break;
  399. case WAITING:
  400. //System.out.println("transferBreak State Waiting");
  401. transferBreak.getSection().setBrakesOn();
  402. transferBreak.getSection().setTransportsOff();
  403. if (trackSide == 0)
  404. {
  405. transferTable.setSwitchDirection(0);
  406. if (transferTable.getSwitchDirection() == 0) transferBreak.setState(READY);
  407. }
  408. if (trackSide == 1)
  409. {
  410. transferTable.setSwitchDirection(2);
  411. if (transferTable.getSwitchDirection() == 2) transferBreak.setState(READY);
  412. }
  413. break;
  414. case READY:
  415. //System.out.println("transferBreak State Ready");
  416. if (trackSide == 0)
  417. {
  418. if (leftBreak1.getState()==CLEAR)
  419. {
  420. transferBreak.getSection().setBrakesOff();
  421. transferBreak.getSection().setTransportsStandardFwdOn();
  422. transferBreak.setState(LEAVING);
  423. }
  424. }
  425. if (trackSide == 1)
  426. {
  427. if (rightBreak1.getState()==CLEAR)
  428. {
  429. transferBreak.getSection().setBrakesOff();
  430. transferBreak.getSection().setTransportsStandardFwdOn();
  431. transferBreak.setState(LEAVING);
  432. }
  433. }
  434. if (trackSide == 0)
  435. {
  436. leftBreak1.setState(APPROACHING);
  437. trackSide = Math.random();
  438. if (trackSide <= 0.5)
  439. {
  440. trackSide = 0;
  441. //System.out.println("Left");
  442. }
  443. else
  444. {
  445. trackSide = 1;
  446. //System.out.println("Right");
  447. }
  448. //System.out.println(trackSide);
  449. break;
  450. }
  451. if (trackSide == 1)
  452. {
  453. rightBreak1.setState(APPROACHING);
  454. trackSide = Math.random();
  455. if (trackSide <= 0.5)
  456. {
  457. trackSide = 0;
  458. //System.out.println("Left");
  459. }
  460. else
  461. {
  462. trackSide = 1;
  463. //System.out.println("Right");
  464. }
  465. //System.out.println(trackSide);
  466. break;
  467. }
  468. break;
  469. case LEAVING:
  470. //System.out.println("transferBreak State Leaving");
  471. if (!transferBreak.getSection().isTrainOnSection())
  472. {
  473. transferBreak.setState(CLEAR);
  474. }
  475. break;
  476. }
  477. }
  478.  
  479. private void autoLeftBreak1()
  480. {
  481. switch (leftBreak1.getState())
  482. {
  483. case CLEAR:
  484. //System.out.println("leftBreak1 State State Clear");
  485. leftBreak1.getSection().setBrakesOn();
  486. leftBreak1.getSection().setTransportsOff();
  487. break;
  488. case APPROACHING:
  489. //System.out.println("leftBreak1 State Approaching");
  490. leftBreak1.getSection().setBrakesOff();
  491. leftBreak1.getSection().setTransportsStandardFwdOn();
  492. if (leftBreak1.getSection().isTrainOnSection()) leftBreak1.setState(ENTERING);
  493. break;
  494. case ENTERING:
  495. //System.out.println("leftBreak1 State Entering");
  496. if (leftBreak1.getSection().isTrainBehindBrakeTrigger()) leftBreak1.setState(WAITING);
  497. break;
  498. case WAITING:
  499. //System.out.println("leftBreak1 State Waiting");
  500. leftBreak1.getSection().setBrakesOn();
  501. leftBreak1.getSection().setTransportsOff();
  502. if (transferTable.getSwitchDirection() != 1){transferTable.setSwitchDirection(1);}
  503. if (leftBreak2.getState()==CLEAR) {leftBreak1.setState(LEAVING);}
  504. break;
  505. case READY:
  506. //System.out.println("leftBreak1 State Ready");
  507. break;
  508. case LEAVING:
  509. //System.out.println("leftBreak1 State Leaving");
  510. leftBreak1.getSection().setBrakesOff();
  511. leftBreak1.getSection().setTransportsStandardFwdOn();
  512. if (!leftBreak1.getSection().isTrainOnSection())
  513. {
  514. leftBreak1.setState(CLEAR);
  515. leftBreak2.setState(APPROACHING);
  516. }
  517. break;
  518. }
  519. }
  520.  
  521. private void autoLeftBreak2()
  522. {
  523. switch (leftBreak2.getState())
  524. {
  525. case CLEAR:
  526. //System.out.println("leftBreak2 State State Clear");
  527. leftBreak2.getSection().setBrakesOn();
  528. leftBreak2.getSection().setTransportsOff();
  529. break;
  530. case APPROACHING:
  531. //System.out.println("leftBreak2 State Approaching");
  532. if (leftBreak2.getSection().isTrainOnSection()) leftBreak2.setState(ENTERING);
  533. break;
  534. case ENTERING:
  535. //System.out.println("leftBreak2 State Entering");
  536. leftBreak2.getSection().setBrakesOff();
  537. leftBreak2.getSection().setTransportsStandardFwdOn();
  538. if (leftBreak2.getSection().isTrainBehindBrakeTrigger()) leftBreak2.setState(WAITING);
  539. break;
  540. case WAITING:
  541. //System.out.println("leftBreak2 State Waiting");
  542. leftBreak2.getSection().setBrakesOff();
  543. leftBreak2.getSection().setTransportsOff();
  544. if (station.getState()==CLEAR && transferSwitch.getSwitchDirection() != 0)
  545. {
  546. transferSwitch.setSwitchDirection(0);
  547. }
  548. if (station.getState()==CLEAR && transferSwitch.getSwitchDirection() == 0)
  549. {
  550. leftBreak2.setState(LEAVING);
  551. station.setState(APPROACHING);
  552.  
  553. }
  554. break;
  555. case READY:
  556. //System.out.println("leftBreak2 State Ready");
  557. break;
  558. case LEAVING:
  559. //System.out.println("leftBreak2 State Leaving");
  560. leftBreak2.getSection().setBrakesOff();
  561. leftBreak2.getSection().setTransportsStandardFwdOn();
  562. if (!leftBreak2.getSection().isTrainOnSection()) leftBreak2.setState(CLEAR);
  563. break;
  564. }
  565. }
  566.  
  567. private void autoRightBreak1()
  568. {
  569. switch (rightBreak1.getState())
  570. {
  571. case CLEAR:
  572. //System.out.println("rightBreak1 State State Clear");
  573. rightBreak1.getSection().setBrakesOn();
  574. rightBreak1.getSection().setTransportsOff();
  575. break;
  576. case APPROACHING:
  577. //System.out.println("rightBreak1 State Approaching");
  578. rightBreak1.getSection().setBrakesOff();
  579. rightBreak1.getSection().setTransportsStandardFwdOn();
  580. if (rightBreak1.getSection().isTrainOnSection()) rightBreak1.setState(ENTERING);
  581. break;
  582. case ENTERING:
  583. //System.out.println("rightBreak1 State Entering");
  584. if (rightBreak1.getSection().isTrainBehindBrakeTrigger()) rightBreak1.setState(WAITING);
  585. break;
  586. case WAITING:
  587. //System.out.println("rightBreak1 State Waiting");
  588. rightBreak1.getSection().setBrakesOn();
  589. rightBreak1.getSection().setTransportsOff();
  590. if (transferTable.getSwitchDirection() != 1){transferTable.setSwitchDirection(1);}
  591. if (rightBreak2.getState()==CLEAR) {rightBreak1.setState(LEAVING);}
  592. break;
  593. case READY:
  594. //System.out.println("rightBreak1 State Ready");
  595. break;
  596. case LEAVING:
  597. //System.out.println("rightBreak1 State Leaving");
  598. rightBreak1.getSection().setBrakesOff();
  599. rightBreak1.getSection().setTransportsStandardFwdOn();
  600. if (!rightBreak1.getSection().isTrainOnSection())
  601. {
  602. rightBreak1.setState(CLEAR);
  603. rightBreak2.setState(APPROACHING);
  604. }
  605. break;
  606. }
  607. }
  608.  
  609. private void autoRightBreak2()
  610. {
  611. switch (rightBreak2.getState())
  612. {
  613. case CLEAR:
  614. //System.out.println("rightBreak2 State State Clear");
  615. rightBreak2.getSection().setBrakesOn();
  616. rightBreak2.getSection().setTransportsOff();
  617. break;
  618. case APPROACHING:
  619. //System.out.println("rightBreak2 State Approaching");
  620. if (rightBreak2.getSection().isTrainOnSection()) rightBreak2.setState(ENTERING);
  621. break;
  622. case ENTERING:
  623. //System.out.println("rightBreak2 State Entering");
  624. rightBreak2.getSection().setBrakesOff();
  625. rightBreak2.getSection().setTransportsStandardFwdOn();
  626. if (rightBreak2.getSection().isTrainBehindBrakeTrigger()) rightBreak2.setState(WAITING);
  627. break;
  628. case WAITING:
  629. //System.out.println("rightBreak2 State Waiting");
  630. rightBreak2.getSection().setBrakesOff();
  631. rightBreak2.getSection().setTransportsOff();
  632. if (station.getState()==CLEAR && transferSwitch.getSwitchDirection() != 1)
  633. {
  634. transferSwitch.setSwitchDirection(1);
  635. }
  636. if (station.getState()==CLEAR && transferSwitch.getSwitchDirection() == 1)
  637. {
  638. rightBreak2.setState(LEAVING);
  639. station.setState(APPROACHING);
  640.  
  641. }
  642. break;
  643. case READY:
  644. //System.out.println("rightBreak2 State Ready");
  645. break;
  646. case LEAVING:
  647. //System.out.println("rightBreak2 State Leaving");
  648. rightBreak2.getSection().setBrakesOff();
  649. rightBreak2.getSection().setTransportsStandardFwdOn();
  650. if (!rightBreak2.getSection().isTrainOnSection()) rightBreak2.setState(CLEAR);
  651. break;
  652. }
  653. }
  654.  
  655. private void manualStation()
  656. {
  657. switch (station.getState())
  658. {
  659. case CLEAR:
  660. station.getSection().setTransportsOff();
  661. station.getSection().setBrakesOn();
  662. break;
  663. case APPROACHING:
  664. station.getSection().setBrakesOff();
  665. station.getSection().setTransportsStandardFwdOn();
  666. if (station.getSection().isTrainOnSection()) {station.setState(ENTERING);}
  667. break;
  668. case ENTERING:
  669. station.getSection().setStationEntering();
  670. station.setState(WAITING);
  671. break;
  672. case WAITING:
  673. if (station.getNumberOfTrainsOnBlock() == 0) station.setState(CLEAR);
  674. if (transferTable.getSwitchDirection() == 1 && transferBreak.getState() == CLEAR) station.setState(READY);
  675. break;
  676. case DISPATCHREADY:
  677. station.setState(WAITING);
  678. break;
  679. case READY:
  680. station.getSection().setStationNextBlockClear();
  681. if (transferTable.getSwitchDirection() != 1 || transferBreak.getState() != CLEAR) station.setState(WAITING);
  682. break;
  683. case DISPATCH:
  684. if (station.getNumberOfTrainsOnBlock() == 1 && station.getSection().isTrainBeforeCenterOfSection()) station.setState(ENTERING);
  685. if (station.getNumberOfTrainsOnBlock() == 0) station.setState(CLEAR);
  686. break;
  687. case LEAVING:
  688. station.getSection().setStationLeaving();
  689. station.getSection().setBrakesOff();
  690. station.getSection().setTransportsStandardFwdOn();
  691. if (station.getNumberOfTrainsOnBlock() == 0) station.setState(CLEAR);
  692. break;
  693. }
  694. }
  695.  
  696. private void manualTransferBreak()
  697. {
  698. switch (transferBreak.getState())
  699. {
  700. case CLEAR:
  701. transferBreak.getSection().setTransportsOff();
  702. transferBreak.getSection().setBrakesOn();
  703. break;
  704. case APPROACHING:
  705. transferBreak.getSection().setBrakesOff();
  706. transferBreak.getSection().setTransportsStandardFwdOn();
  707. if (transferBreak.getSection().isTrainOnSection()) transferBreak.setState(ENTERING);
  708. break;
  709. case APPROACHING_R:
  710. transferBreak.getSection().setBrakesOff();
  711. transferBreak.getSection().setTransportsStandardBwdOn();
  712. if (transferBreak.getSection().isTrainOnSection()) transferBreak.setState(ENTERING_R);
  713. break;
  714. case ENTERING:
  715. if (transferBreak.getSection().isTrainBehindBrakeTrigger()) transferBreak.setState(WAITING);
  716. break;
  717. case ENTERING_R:
  718. if (transferBreak.getSection().isTrainBeforeCenterOfSection()) transferBreak.setState(WAITING);
  719. break;
  720. case WAITING:
  721. transferBreak.getSection().setTransportsOff();
  722. transferBreak.getSection().setBrakesOn();
  723. if (leftBreak1.getState() == CLEAR && transferTable.getSwitchDirection() == 0) transferBreak.setState(READY);
  724. else if (rightBreak1.getState() == CLEAR && transferTable.getSwitchDirection() == 2) transferBreak.setState(READY);
  725. else if (storage1.getState() == CLEAR && transferTable.getSwitchDirection() == 1) transferBreak.setState(READY_F);
  726. break;
  727. case READY:
  728. if (transferTable.getSwitchDirection() == 0 && leftBreak1.getState() != CLEAR) transferBreak.setState(WAITING);
  729. else if (transferTable.getSwitchDirection() == 2 && rightBreak1.getState() != CLEAR) transferBreak.setState(WAITING);
  730. else if (transferTable.getSwitchDirection() == 1 && storage1.getState() != CLEAR) transferBreak.setState(WAITING);
  731. break;
  732. case READY_F:
  733. if (transferTable.getSwitchDirection() == 0 && leftBreak1.getState() != CLEAR) transferBreak.setState(WAITING);
  734. else if (transferTable.getSwitchDirection() == 2 && rightBreak1.getState() != CLEAR) transferBreak.setState(WAITING);
  735. else if (transferTable.getSwitchDirection() == 1 && storage1.getState() != CLEAR) transferBreak.setState(WAITING);
  736. break;
  737. case LEAVING:
  738. transferBreak.getSection().setBrakesOff();
  739. transferBreak.getSection().setTransportsStandardFwdOn();
  740. if (transferBreak.getNumberOfTrainsOnBlock() == 0) transferBreak.setState(CLEAR);
  741. break;
  742. }
  743. }
  744.  
  745. private void manualLeftBreak1()
  746. {
  747. switch (leftBreak1.getState())
  748. {
  749. case CLEAR:
  750. //System.out.println("leftBreak1 State State Clear");
  751. leftBreak1.getSection().setBrakesOn();
  752. leftBreak1.getSection().setTransportsOff();
  753. break;
  754. case APPROACHING:
  755. //System.out.println("leftBreak1 State Approaching");
  756. leftBreak1.getSection().setBrakesOff();
  757. leftBreak1.getSection().setTransportsStandardFwdOn();
  758. if (leftBreak1.getSection().isTrainOnSection()) leftBreak1.setState(ENTERING);
  759. break;
  760. case ENTERING:
  761. //System.out.println("leftBreak1 State Entering");
  762. if (leftBreak1.getSection().isTrainBehindBrakeTrigger()) leftBreak1.setState(WAITING);
  763. break;
  764. case WAITING:
  765. //System.out.println("leftBreak1 State Waiting");
  766. leftBreak1.getSection().setBrakesOn();
  767. leftBreak1.getSection().setTransportsOff();
  768. if (leftBreak2.getState()==CLEAR) {leftBreak1.setState(READY);}
  769. break;
  770. case READY:
  771. //System.out.println("leftBreak1 State Ready");
  772. break;
  773. case LEAVING:
  774. //System.out.println("leftBreak1 State Leaving");
  775. leftBreak1.getSection().setBrakesOff();
  776. leftBreak1.getSection().setTransportsStandardFwdOn();
  777. if (!leftBreak1.getSection().isTrainOnSection())
  778. {
  779. leftBreak1.setState(CLEAR);
  780. leftBreak2.setState(APPROACHING);
  781. }
  782. break;
  783. }
  784. }
  785.  
  786. private void manualLeftBreak2()
  787. {
  788. switch (leftBreak2.getState())
  789. {
  790. case CLEAR:
  791. //System.out.println("leftBreak2 State State Clear");
  792. leftBreak2.getSection().setBrakesOn();
  793. leftBreak2.getSection().setTransportsOff();
  794. break;
  795. case APPROACHING:
  796. //System.out.println("leftBreak2 State Approaching");
  797. if (leftBreak2.getSection().isTrainOnSection()) leftBreak2.setState(ENTERING);
  798. break;
  799. case ENTERING:
  800. //System.out.println("leftBreak2 State Entering");
  801. leftBreak2.getSection().setBrakesOff();
  802. leftBreak2.getSection().setTransportsStandardFwdOn();
  803. if (leftBreak2.getSection().isTrainBehindBrakeTrigger()) leftBreak2.setState(WAITING);
  804. break;
  805. case WAITING:
  806. //System.out.println("leftBreak2 State Waiting");
  807. leftBreak2.getSection().setBrakesOff();
  808. leftBreak2.getSection().setTransportsOff();
  809. if (station.getState()==CLEAR && transferSwitch.getSwitchDirection() == 0){leftBreak2.setState(READY);}
  810. break;
  811. case READY:
  812. //System.out.println("leftBreak2 State Ready");
  813. if (station.getState()!=CLEAR || transferSwitch.getSwitchDirection() != 0){leftBreak2.setState(WAITING);}
  814. break;
  815. case LEAVING:
  816. //System.out.println("leftBreak2 State Leaving");
  817. leftBreak2.getSection().setBrakesOff();
  818. leftBreak2.getSection().setTransportsStandardFwdOn();
  819. station.setState(APPROACHING);
  820. if (!leftBreak2.getSection().isTrainOnSection()) leftBreak2.setState(CLEAR);
  821. break;
  822. }
  823. }
  824.  
  825. private void manualRightBreak1()
  826. {
  827. switch (rightBreak1.getState())
  828. {
  829. case CLEAR:
  830. //System.out.println("rightBreak1 State State Clear");
  831. rightBreak1.getSection().setBrakesOn();
  832. rightBreak1.getSection().setTransportsOff();
  833. break;
  834. case APPROACHING:
  835. //System.out.println("rightBreak1 State Approaching");
  836. rightBreak1.getSection().setBrakesOff();
  837. rightBreak1.getSection().setTransportsStandardFwdOn();
  838. if (rightBreak1.getSection().isTrainOnSection()) rightBreak1.setState(ENTERING);
  839. break;
  840. case ENTERING:
  841. //System.out.println("rightBreak1 State Entering");
  842. if (rightBreak1.getSection().isTrainBehindBrakeTrigger()) rightBreak1.setState(WAITING);
  843. break;
  844. case WAITING:
  845. //System.out.println("rightBreak1 State Waiting");
  846. rightBreak1.getSection().setBrakesOn();
  847. rightBreak1.getSection().setTransportsOff();
  848. if (rightBreak2.getState()==CLEAR) {rightBreak1.setState(READY);}
  849. break;
  850. case READY:
  851. //System.out.println("rightBreak1 State Ready");
  852. break;
  853. case LEAVING:
  854. //System.out.println("leftBreak1 State Leaving");
  855. rightBreak1.getSection().setBrakesOff();
  856. rightBreak1.getSection().setTransportsStandardFwdOn();
  857. if (!rightBreak1.getSection().isTrainOnSection())
  858. {
  859. rightBreak1.setState(CLEAR);
  860. rightBreak2.setState(APPROACHING);
  861. }
  862. break;
  863. }
  864. }
  865.  
  866. private void manualRightBreak2()
  867. {
  868. switch (rightBreak2.getState())
  869. {
  870. case CLEAR:
  871. //System.out.println("rightBreak2 State State Clear");
  872. rightBreak2.getSection().setBrakesOn();
  873. rightBreak2.getSection().setTransportsOff();
  874. break;
  875. case APPROACHING:
  876. //System.out.println("rightBreak2 State Approaching");
  877. if (rightBreak2.getSection().isTrainOnSection()) rightBreak2.setState(ENTERING);
  878. break;
  879. case ENTERING:
  880. //System.out.println("rightBreak2 State Entering");
  881. rightBreak2.getSection().setBrakesOff();
  882. rightBreak2.getSection().setTransportsStandardFwdOn();
  883. if (rightBreak2.getSection().isTrainBehindBrakeTrigger()) rightBreak2.setState(WAITING);
  884. break;
  885. case WAITING:
  886. //System.out.println("rightBreak2 State Waiting");
  887. rightBreak2.getSection().setBrakesOff();
  888. rightBreak2.getSection().setTransportsOff();
  889. if (station.getState()==CLEAR && transferSwitch.getSwitchDirection() == 1){rightBreak2.setState(READY);}
  890. break;
  891. case READY:
  892. //System.out.println("rightBreak2 State Ready");
  893. if (station.getState()!=CLEAR || transferSwitch.getSwitchDirection() != 1){rightBreak2.setState(WAITING);}
  894. break;
  895. case LEAVING:
  896. //System.out.println("rightBreak2 State Leaving");
  897. rightBreak2.getSection().setBrakesOff();
  898. rightBreak2.getSection().setTransportsStandardFwdOn();
  899. station.setState(APPROACHING);
  900. if (!rightBreak2.getSection().isTrainOnSection()) rightBreak2.setState(CLEAR);
  901. break;
  902. }
  903. }
  904.  
  905. private void manualStorage1()
  906. {
  907. Train train = storage1.getSection().getTrainOnSection();
  908. switch (storage1.getState())
  909. {
  910. case CLEAR:
  911. storage1.getSection().setTransportsOff();
  912. storage1.getSection().setBrakesOn();
  913. break;
  914. case APPROACHING:
  915. storage1.getSection().setBrakesOff();
  916. storage1.getSection().setTransportsStandardFwdOn();
  917. if (storage1.getSection().isTrainOnSection()) storage1.setState(ENTERING);
  918. break;
  919. case APPROACHING_R:
  920. storage1.getSection().setBrakesOff();
  921. storage1.getSection().setTransportsStandardBwdOn();
  922. if (storage1.getSection().isTrainOnSection()) storage1.setState(ENTERING_R);
  923. break;
  924. case ENTERING:
  925. if (storage1.getSection().isTrainBehindCenterOfSection()) storage1.setState(WAITING);
  926. break;
  927. case ENTERING_R:
  928. if (storage1.getSection().isTrainBeforeCenterOfSection()) storage1.setState(WAITING);
  929. break;
  930. case WAITING:
  931. storage1.getSection().setTransportsOff();
  932. storage1.getSection().setBrakesOn();
  933. if (train != null) train.setLashedToTrack(true);
  934. if (storage2.getState() == CLEAR && transferBreak.getState() == CLEAR && transferTable.getSwitchDirection() == 1) storage1.setState(READY);
  935. else if (storage2.getState() == CLEAR) storage1.setState(READY_F);
  936. else if (transferBreak.getState() == CLEAR && transferTable.getSwitchDirection() == 1) storage1.setState(READY_R);
  937. break;
  938. case READY:
  939. if (train != null) train.setLashedToTrack(true);
  940. if (storage2.getState() != CLEAR || transferBreak.getState() != CLEAR || transferTable.getSwitchDirection() != 1) storage1.setState(WAITING);
  941. break;
  942. case READY_F:
  943. if (train != null) train.setLashedToTrack(true);
  944. if (storage1.getState() != CLEAR || (transferBreak.getState() == CLEAR && transferTable.getSwitchDirection() != 1)) storage1.setState(WAITING);
  945. break;
  946. case READY_R:
  947. if (train != null) train.setLashedToTrack(true);
  948. if (transferBreak.getState() != CLEAR || transferTable.getSwitchDirection() != 1 || storage2.getState() == CLEAR) storage1.setState(WAITING);
  949. break;
  950. case LEAVING:
  951. if (train != null) train.setLashedToTrack(false);
  952. storage1.getSection().setBrakesOff();
  953. storage1.getSection().setTransportsStandardFwdOn();
  954. if (storage1.getNumberOfTrainsOnBlock() == 0) storage1.setState(CLEAR);
  955. break;
  956. case LEAVING_R:
  957. if (train != null) train.setLashedToTrack(false);
  958. storage1.getSection().setBrakesOff();
  959. storage1.getSection().setTransportsStandardBwdOn();
  960. if (storage1.getNumberOfTrainsOnBlock() == 0) storage1.setState(CLEAR);
  961. break;
  962. }
  963. }
  964.  
  965. private void manualStorage2()
  966. {
  967. Train train = storage2.getSection().getTrainOnSection();
  968. switch (storage2.getState())
  969. {
  970. case CLEAR:
  971. storage2.getSection().setTransportsOff();
  972. storage2.getSection().setBrakesOn();
  973. break;
  974. case APPROACHING:
  975. storage2.getSection().setBrakesOff();
  976. storage2.getSection().setTransportsStandardFwdOn();
  977. if (storage2.getSection().isTrainOnSection()) storage2.setState(ENTERING);
  978. break;
  979. case ENTERING:
  980. if (storage2.getSection().isTrainBehindCenterOfSection()) storage2.setState(WAITING);
  981. break;
  982. case WAITING:
  983. storage2.getSection().setTransportsOff();
  984. storage2.getSection().setBrakesOn();
  985. if (train != null) train.setLashedToTrack(true);
  986. if (storage1.getState() == CLEAR) storage2.setState(READY_R);
  987. break;
  988. case READY_R:
  989. if (train != null) train.setLashedToTrack(true);
  990. if (storage1.getState() != CLEAR) storage2.setState(WAITING);
  991. break;
  992. case LEAVING_R:
  993. if (train != null) train.setLashedToTrack(false);
  994. storage2.getSection().setBrakesOff();
  995. storage2.getSection().setTransportsStandardBwdOn();
  996. if (storage2.getNumberOfTrainsOnBlock() == 0) storage2.setState(CLEAR);
  997. break;
  998. }
  999. }
  1000.  
  1001. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement