#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Jan 27 16:32:02 2020 @author: suwako """ import numpy as np class Mass(): def __init__(self, pos=(0, 0), speed=(0, 0), mass=1): self.pos = np.array(pos, dtype='float64') self.speed = np.array(speed, dtype='float64') self.mass = mass self.G = 0.00000000001 def tick(self): self.pos += self.speed def ref(self, origin=np.array((0, 0), dtype='float64'), speed=np.array((0, 0), dtype='float64')): self.pos -= origin self.speed -= speed pass def apply_forces(self, elements): self.apply_gravity(elements) def apply_gravity(self, elements): for element in elements: d = element.pos - self.pos norm_d = np.linalg.norm(d) if norm_d != 0: u = d/norm_d norm = self.G * element.mass * (d[0]**2 + d[1]**2) self.speed += norm*u class Player(Mass): def __init__(self, keys={}, orientation=0, pos=(0, 0), speed=(0, 0), mass=1, thrust=0.01): Mass.__init__(self, pos=pos, speed=speed, mass=mass) self.orientation = orientation self.actions = {"thrust": False, "fire": False} self.thrust=thrust def action(self, **kwargs): print(kwargs) self.actions.update(kwargs) def apply_thrust(self): if self.actions['thrust']: orientation = np.deg2rad(self.orientation + 90) or_tuple=(np.cos(orientation), -np.sin(orientation)) norm = self.thrust/self.mass self.speed += norm * np.array(or_tuple, dtype='float64') def apply_forces(self, elements): Mass.apply_forces(self, elements) self.apply_thrust() if __name__ == "__main__": pass