def calculate_reflect_force(self, e): try: return self.interacting_types[type(e)] except KeyError: # Add reflection mod / 0 for this new type F = 0 t_self = type(self) t_e = type(e) if t_self in e.interacting_types: F = e.interacting_types[t_self] self.interacting_types[t_e] = F Logger.log_info("Discovered unknown type {} -> {}".format( t_self, t_e)) return F
def create_particle(data): """ Accepts data and creates particle according to it. """ # Get particle type type_raw = None try: type_raw = data["type"] except KeyError as ke: Logger.log_warning("No particle type data. Can't spawn particle.") Logger.log_exception(ke) return None t = type_raw if type(type_raw) is str: # Get actual class reference t = get_particle_type(type_raw) if t is None: Logger.log_warning("Unrecognized particle type. Can't spawn particle.") return None # Construct particle p = None try: pos = data["pos"] p = t(pos[0], pos[1]) except KeyError as ke: Logger.log_warning("Incomplete particle data. Can't spawn particle.") Logger.log_exception(ke) return None # Set particle attributes try: p.mass = data["mass"] p.velocity = data["velocity"] p.size = data["size"] p._can_move = data["can_move"] p.paused = data["paused"] except KeyError as ke: Logger.log_info("Missing particle data.") Logger.log_exception(ke) return p