Beispiel #1
0
 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