summaryrefslogtreecommitdiff
path: root/dashboard_website/datastructs.py
diff options
context:
space:
mode:
Diffstat (limited to 'dashboard_website/datastructs.py')
-rw-r--r--dashboard_website/datastructs.py52
1 files changed, 34 insertions, 18 deletions
diff --git a/dashboard_website/datastructs.py b/dashboard_website/datastructs.py
index 1b4b92b..4fe5038 100644
--- a/dashboard_website/datastructs.py
+++ b/dashboard_website/datastructs.py
@@ -1,10 +1,11 @@
import math
import time
+import datetime
# time since last ping before deactivating/deleting
BIKE_TIMEOUT = 60000 # 3 minutes
-BIKE_DELETE = 360000 # time before bike deletes itself
+endtime = datetime.datetime(2024, 11, 16, hour=18, minute=45)
# data structures
class Point:
@@ -71,6 +72,9 @@ class Clue(Point):
def toggle_required(self):
self.required = False if self.required else True
+
+ def set_team(self, team):
+ self.assigned_team = team
def toJSON(self):
json_dict = {'longitude' : self.longitude,
@@ -85,14 +89,17 @@ class Clue(Point):
class Bike(Point):
- def __init__(self, lat, long, name, status):
+ def __init__(self, lat, long, name):
self.longitude = long
self.latitude = lat
self.name = name
+ self.deadline = endtime
self.last_contact = time.time()
- self.target_name = "N/A"
+ self.target_clue = None
+ self.time_modifier = 1 # factor by which to modulate expected arrival time
self.cluster = [] # list of clues this bike team is responsible for
- self.status = status # ACTIVE | INACTIVE
+ self.status = "DISABLED" # DISABLED | ACTIVE | INACTIVE
+ self.clue_assignment_time = 0 # when clue was assigned, so that upon clue visitation we can determine speed
def setTarget(self, clue_name):
self.target_name = clue_name
@@ -101,14 +108,24 @@ class Bike(Point):
self.cluster = clue_cluster
self.updateTarget()
+ def setDeadline(self, new_deadline):
+ self.deadline = new_deadline
+
+ def timeTilDeadline(self):
+ return (self.deadline - datetime.datetime.now()).total_seconds()
+
def updateTarget(self):
+ self.clue_assignment_time = time.time()
if len(self.cluster) <= 0:
- self.target_name = "N/A"
+ self.target_clue = None
+ self.status = "INACTIVE"
else:
- self.target_name = self.cluster[0].name
+ self.status = "ACTIVE"
+ self.target_clue = self.cluster[0]
def visitTarget(self):
- self.cluster[0].visit()
+ print("clue visit time: ", time.time() - self.clue_assignment_time)
+ self.target_clue.visit()
self.cluster.pop(0)
self.updateTarget()
while len(self.cluster) > 0 and self.cluster[0].status == "VISITED":
@@ -120,25 +137,24 @@ class Bike(Point):
self.last_contact = time.time()
def disable(self):
+ self.status = "DISABLED"
+ self.target = None
+
+ def enable(self):
self.status = "INACTIVE"
- self.target = "N/A"
- self.last_contact = 0
-
- def checkStatus(self):
- if time.time() - self.last_contact > BIKE_TIMEOUT:
- self.status = "INACTIVE"
- self.target = "N/A"
- if time.time() - self.last_contact > BIKE_DELETE:
- return -1
- return 0
+ self.target = None
+
+ def tripTime(self):
+ return datetime.datetime.now() - self.deadline
def toJSON(self):
json_dict = {
"longitude": self.longitude,
"latitude": self.latitude,
"time_since_last_contact": time.time() - self.last_contact,
+ "team_deadline" : str(self.deadline),
"team_name": self.name,
"team_status": self.status,
- "target_clue": self.target_name,
+ "target_clue": self.target_clue.name if self.target_clue else "N/A",
}
return json_dict