From 7bfcb40689ed1a9e49e9f6df1777c7b9801706e5 Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 12 Nov 2024 20:44:04 -0500 Subject: workington in progress --- dashboard_website/datastructs.py | 52 ++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 18 deletions(-) (limited to 'dashboard_website/datastructs.py') 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 -- cgit v1.2.3