-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcar.py
107 lines (90 loc) · 3.35 KB
/
car.py
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from objectBase import ObjectBase
from time_class import Time
class Car(ObjectBase):
"""
Car class.
Parent object is stream to which car belongs,
as it defines origin and destination
"""
def __init__(self, id_=None, parent_object=None):
super().__init__(id_=id_, parent_object=parent_object)
# Arrival and departure events for later calculations
self.arrival = None
self.departing = None
self.departed = None
self.time_in_system = Time()
def get_stream(self):
"""Method returns car's stream"""
return self.parent_object
def get_time_in_system(self):
"""Method returns car's time in system"""
return self.time_in_system
def get_wait_time(self):
"""Method returns car's wait time in queue"""
return self.wait_time
def has_arrived(self):
return self.arrival.is_executed()
def has_departed(self):
if self.departed is None:
return False
return self.departed.is_executed()
def is_awaiting(self):
return self.has_arrived() and not self.has_departed() and not self.is_departing()
def is_departing(self):
if self.departing is None:
return False
return self.is_departing()
def is_first_in_queue(self):
"""Method checks if car is first in queue"""
if self is self.parent_object.get_queue_first_car():
return True
else:
return False
def move_to_intersection(self):
"""
Method moves car onto the intersection
so the car can drive through it
"""
self.parent_object.move_car_to_intersection(self)
def remove_from_intersection(self):
"""
Method removes car from the intersection
simulating driving through it
"""
self.parent_object.remove_car_from_intersection(self)
def move_to_queue(self):
self.parent_object.add_to_queue(self)
def set_arrival_event(self, event):
"""Method sets arrival event"""
self.arrival = event
def set_departing_event(self, event):
"""Method sets departing event"""
self.departing = event
def set_departure_event(self, event):
"""Method sets departure event"""
self.departed = event
def calculate_time_in_system(self):
"""
Method calculates time spent in system
from arrival to full departure
"""
arrival_time = self.arrival.get_event_time()
if self.departed is not None:
departed_time = self.departed.get_event_time()
self.time_in_system = departed_time - arrival_time
return self.get_time_in_system()
else:
current_time = self.get_current_time()
self.time_in_system = current_time - arrival_time
return self.get_time_in_system()
def calculate_wait_time(self):
"""Method calculates time spent in queue"""
arrival_time = self.arrival.get_event_time()
if self.departing is not None:
departing_time = self.departing.get_event_time()
self.wait_time = departing_time - arrival_time
return self.get_wait_time()
else:
current_time = self.get_current_time()
self.wait_time = current_time - arrival_time
return self.get_wait_time()