Module game_qu.base.history_keeper
Expand source code
from copy import deepcopy
from game_qu.base.velocity_calculator import VelocityCalculator
from game_qu.gui_components.dimensions import Dimensions
from game_qu.base.important_constants import *
class HistoryKeeper:
last_objects = {}
last_frame_id = 0
@staticmethod
def add(history_keeper_object, name, needs_dimensions_only=False, needs_deepcopy=False):
""" Adds the object to the HistoryKeeper; IMPORTANT: make sure to provide a unique name for each unique object!
Args:
history_keeper_object (object): the object that is going to be added to the HistoryKeeper
name (str): the unique name (identifier) for the object
needs_deepcopy (bool): the object provided is an instance of GameObject
needs_dimensions_only (bool): whether the object stored only needs the dimensions stored for it
Returns:
None
"""
if needs_deepcopy:
history_keeper_object = deepcopy(history_keeper_object)
history_keeper_object.name = name
if needs_dimensions_only:
history_keeper_object = Dimensions(history_keeper_object.left_edge, history_keeper_object.top_edge,
history_keeper_object.length, history_keeper_object.height)
history_keeper_object.name = name
frame_id = HistoryKeeper.get_frame_id(VelocityCalculator.current_cycle_number)
HistoryKeeper.last_objects[f"{name}_{frame_id}"] = history_keeper_object
@staticmethod
def get_last(name):
""" Gets the version of that object from the last cycle
Args:
name (str): the unique name (identifier) given for the object in HistoryKeeper.add() that is used to retrieve the previous version of the object
Returns:
object: the version of the object from the last cycle
"""
return HistoryKeeper.get_last_using_frame_id(name, HistoryKeeper.last_frame_id)
@staticmethod
def get_last_using_frame_id(name, frame_id):
""" Gets the version of that object from at that cycle (decided by 'frame_id')
Args:
name (str): the unique name (identifier) given for the object in HistoryKeeper.add() that is used to get the object at the specific cycle
frame_id (int): the frame_id of the cycle
Returns:
object: the version of the object from the last cycle
"""
return HistoryKeeper.last_objects.get(f"{name}_{frame_id}")
@staticmethod
def reset():
"""Resets the HistoryKeeper, so it has no more values of past objects"""
HistoryKeeper.last_objects = {}
HistoryKeeper.times = []
@staticmethod
def set_last_frame_id(cycle_number):
"""Sets the last time of the HistoryKeeper"""
HistoryKeeper.last_frame_id = HistoryKeeper.get_frame_id(cycle_number)
@staticmethod
def get_frame_id(cycle_number):
"""
Returns:
int: the identifier for that frame (the number of frames that the HistoryKeeper stores is equal to
'FRAMES_HISTORY_KEEPER_STORES' in base/important_variables"""
return cycle_number % NUMBER_OF_FRAMES_HISTORY_KEEPER_STORES
@staticmethod
def get_all_of_name(name):
"""
Returns:
list[object]: all the objects in the HistoryKeeper that have the name 'name'"""
return_value = {}
for x in range(NUMBER_OF_FRAMES_HISTORY_KEEPER_STORES):
key = f"{name}_{x}"
value = HistoryKeeper.last_objects.get(key)
if value is not None:
return_value[key] = value
return return_value
Classes
class HistoryKeeper
-
Expand source code
class HistoryKeeper: last_objects = {} last_frame_id = 0 @staticmethod def add(history_keeper_object, name, needs_dimensions_only=False, needs_deepcopy=False): """ Adds the object to the HistoryKeeper; IMPORTANT: make sure to provide a unique name for each unique object! Args: history_keeper_object (object): the object that is going to be added to the HistoryKeeper name (str): the unique name (identifier) for the object needs_deepcopy (bool): the object provided is an instance of GameObject needs_dimensions_only (bool): whether the object stored only needs the dimensions stored for it Returns: None """ if needs_deepcopy: history_keeper_object = deepcopy(history_keeper_object) history_keeper_object.name = name if needs_dimensions_only: history_keeper_object = Dimensions(history_keeper_object.left_edge, history_keeper_object.top_edge, history_keeper_object.length, history_keeper_object.height) history_keeper_object.name = name frame_id = HistoryKeeper.get_frame_id(VelocityCalculator.current_cycle_number) HistoryKeeper.last_objects[f"{name}_{frame_id}"] = history_keeper_object @staticmethod def get_last(name): """ Gets the version of that object from the last cycle Args: name (str): the unique name (identifier) given for the object in HistoryKeeper.add() that is used to retrieve the previous version of the object Returns: object: the version of the object from the last cycle """ return HistoryKeeper.get_last_using_frame_id(name, HistoryKeeper.last_frame_id) @staticmethod def get_last_using_frame_id(name, frame_id): """ Gets the version of that object from at that cycle (decided by 'frame_id') Args: name (str): the unique name (identifier) given for the object in HistoryKeeper.add() that is used to get the object at the specific cycle frame_id (int): the frame_id of the cycle Returns: object: the version of the object from the last cycle """ return HistoryKeeper.last_objects.get(f"{name}_{frame_id}") @staticmethod def reset(): """Resets the HistoryKeeper, so it has no more values of past objects""" HistoryKeeper.last_objects = {} HistoryKeeper.times = [] @staticmethod def set_last_frame_id(cycle_number): """Sets the last time of the HistoryKeeper""" HistoryKeeper.last_frame_id = HistoryKeeper.get_frame_id(cycle_number) @staticmethod def get_frame_id(cycle_number): """ Returns: int: the identifier for that frame (the number of frames that the HistoryKeeper stores is equal to 'FRAMES_HISTORY_KEEPER_STORES' in base/important_variables""" return cycle_number % NUMBER_OF_FRAMES_HISTORY_KEEPER_STORES @staticmethod def get_all_of_name(name): """ Returns: list[object]: all the objects in the HistoryKeeper that have the name 'name'""" return_value = {} for x in range(NUMBER_OF_FRAMES_HISTORY_KEEPER_STORES): key = f"{name}_{x}" value = HistoryKeeper.last_objects.get(key) if value is not None: return_value[key] = value return return_value
Class variables
var last_frame_id
var last_objects
Static methods
def add(history_keeper_object, name, needs_dimensions_only=False, needs_deepcopy=False)
-
Adds the object to the HistoryKeeper; IMPORTANT: make sure to provide a unique name for each unique object!
Args
history_keeper_object
:object
- the object that is going to be added to the HistoryKeeper
name
:str
- the unique name (identifier) for the object
needs_deepcopy
:bool
- the object provided is an instance of GameObject
needs_dimensions_only
:bool
- whether the object stored only needs the dimensions stored for it
Returns
None
Expand source code
@staticmethod def add(history_keeper_object, name, needs_dimensions_only=False, needs_deepcopy=False): """ Adds the object to the HistoryKeeper; IMPORTANT: make sure to provide a unique name for each unique object! Args: history_keeper_object (object): the object that is going to be added to the HistoryKeeper name (str): the unique name (identifier) for the object needs_deepcopy (bool): the object provided is an instance of GameObject needs_dimensions_only (bool): whether the object stored only needs the dimensions stored for it Returns: None """ if needs_deepcopy: history_keeper_object = deepcopy(history_keeper_object) history_keeper_object.name = name if needs_dimensions_only: history_keeper_object = Dimensions(history_keeper_object.left_edge, history_keeper_object.top_edge, history_keeper_object.length, history_keeper_object.height) history_keeper_object.name = name frame_id = HistoryKeeper.get_frame_id(VelocityCalculator.current_cycle_number) HistoryKeeper.last_objects[f"{name}_{frame_id}"] = history_keeper_object
def get_all_of_name(name)
-
Returns
list[object]
- all the objects in the HistoryKeeper that have the name 'name'
Expand source code
@staticmethod def get_all_of_name(name): """ Returns: list[object]: all the objects in the HistoryKeeper that have the name 'name'""" return_value = {} for x in range(NUMBER_OF_FRAMES_HISTORY_KEEPER_STORES): key = f"{name}_{x}" value = HistoryKeeper.last_objects.get(key) if value is not None: return_value[key] = value return return_value
def get_frame_id(cycle_number)
-
Returns
int
- the identifier for that frame (the number of frames that the HistoryKeeper stores is equal to
'FRAMES_HISTORY_KEEPER_STORES' in base/important_variables
Expand source code
@staticmethod def get_frame_id(cycle_number): """ Returns: int: the identifier for that frame (the number of frames that the HistoryKeeper stores is equal to 'FRAMES_HISTORY_KEEPER_STORES' in base/important_variables""" return cycle_number % NUMBER_OF_FRAMES_HISTORY_KEEPER_STORES
def get_last(name)
-
Gets the version of that object from the last cycle
Args
name
:str
- the unique name (identifier) given for the object in HistoryKeeper.add() that is used to retrieve the previous version of the object
Returns
object
- the version of the object from the last cycle
Expand source code
@staticmethod def get_last(name): """ Gets the version of that object from the last cycle Args: name (str): the unique name (identifier) given for the object in HistoryKeeper.add() that is used to retrieve the previous version of the object Returns: object: the version of the object from the last cycle """ return HistoryKeeper.get_last_using_frame_id(name, HistoryKeeper.last_frame_id)
def get_last_using_frame_id(name, frame_id)
-
Gets the version of that object from at that cycle (decided by 'frame_id')
Args
name
:str
- the unique name (identifier) given for the object in HistoryKeeper.add() that is used to get the object at the specific cycle
frame_id
:int
- the frame_id of the cycle
Returns
object
- the version of the object from the last cycle
Expand source code
@staticmethod def get_last_using_frame_id(name, frame_id): """ Gets the version of that object from at that cycle (decided by 'frame_id') Args: name (str): the unique name (identifier) given for the object in HistoryKeeper.add() that is used to get the object at the specific cycle frame_id (int): the frame_id of the cycle Returns: object: the version of the object from the last cycle """ return HistoryKeeper.last_objects.get(f"{name}_{frame_id}")
def reset()
-
Resets the HistoryKeeper, so it has no more values of past objects
Expand source code
@staticmethod def reset(): """Resets the HistoryKeeper, so it has no more values of past objects""" HistoryKeeper.last_objects = {} HistoryKeeper.times = []
def set_last_frame_id(cycle_number)
-
Sets the last time of the HistoryKeeper
Expand source code
@staticmethod def set_last_frame_id(cycle_number): """Sets the last time of the HistoryKeeper""" HistoryKeeper.last_frame_id = HistoryKeeper.get_frame_id(cycle_number)