-
Notifications
You must be signed in to change notification settings - Fork 0
/
Switch.java
71 lines (63 loc) · 3.02 KB
/
Switch.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Repräsentiert eine Weiche, d.h. eine besondere Art von Track. Diese Klasse ist abstrakt,
* um die konkrete Ausprägung der Weiche per Unterklasse zu realisieren, so wie es für alle Tracks der Fall ist.
*
* @author Leonard Bienbeck
* @version 1.0.0
*/
public abstract class Switch extends Track
{
/**
* Gibt an, ob die Switch gestellt ist. Falls true, leitet sie RailVehicle zur Seite; andernfalls geradeaus.
*/
private boolean isSwitched; // i.e. switch leads the train to the side (acts like a curve)
private String imageBaseName = "switch_";
/**
* Erzeugt eine Switch vom gegebenen TrackType. Der switched-Zustand wird mit false initialisiert:
* Standardmäßig soll eine Switch sich darauf bewegende RailVehicle nicht zur Seite leiten.
*/
public Switch(TrackType trackType, String imageBaseName) {
super(trackType);
this.isSwitched = false;
this.imageBaseName = imageBaseName;
}
/**
* Setzt den switched-Zustand der Switch, um die Weichenfunktion ein- und auszuschalten.
* @param switched true, falls die Switch sich darauf bewegende RailVehicle zur Seite leiten soll; false sonst
*/
public void setSwitched(boolean switched) {
this.isSwitched = switched;
this.setImage(imageBaseName + (isSwitched() ? "1" : "0") + ".png");
}
/**
* Gibt an, ob die Switch gestellt ist.
* @return true, falls die Switch gestellt ist und sich darauf bewegende RailVehicle zur Seite leitet; false andernfalls
*/
public boolean isSwitched() {
return this.isSwitched;
}
/**
* Kehrt den switched-Zustand der Switch um.
*/
public void toggleSwitched() {
this.setSwitched(this.isSwitched() ? false : true);
}
/**
* Bestimmt, auf welchen anderen Track ein RailVehicle in Abhängigkeit von seiner momentanen Direction
* weitergeleitet wird. Diese Methode wurde aus Track geerbt.
* @param movingInDirection Die Bewegungsrichtung des fahrenden RailVehicle
* @return Der Track, auf den das RailVehicle in Abhängigkeit von seiner momentanen Direction
* weitergeleitet wird.
*/
public abstract Track determineNextTrack(Direction movingInDirection);
/**
* Gibt die Direction zurückgibt, die ein RailVehicle auf der Switch haben muss, um in die entgegengesetzte
* Richtung geleitet zu werden. Diese Methode wurde aus Track geerbt.<br>
* <b>Achtung:</b> Die Richtung wird nicht einfach zur entgegengesetzten Richtung geändert, sondern so, dass
* die Switch das darauf befindliche RailVehicle rückwärts leitet.
* @param movingDirection Die Bewegungsrichtung des RailVehicle auf dem Track, die umgekehrt werden soll
* @return Die Direction, die das RailVehicle auf dem Track haben muss, um in die entgegengesetzte Richtung geleitet zu werden.
*/
public abstract Direction getReversedDirection(Direction movingDirection);
}