#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Jan 27 16:32:02 2020 @author: suwako """ import numpy as np import visual 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 self.ticks=0 def tick(self): self.pos += self.speed self.ticks+=1 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 def fire(*a): pass class Projectile(Mass): def __init__(self, orientation=0, pos=(0, 0), speed=(0, 0), mass=0.000000001): Mass.__init__(self, pos=pos, speed=speed, mass=mass) self.orientation = orientation class Player(Mass): def __init__(self, keys={}, orientation=0, pos=(0, 0), speed=(0, 0), mass=1, thrust=0.01, fire_force=1): Mass.__init__(self, pos=pos, speed=speed, mass=mass) self.orientation = orientation self.actions = {"thrust": False, "fire": False} self.thrust=thrust self.fire_force=fire_force 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() def fire(self, elements): if self.actions['fire']: projectile = visual.Projectile(orientation=self.orientation, pos=self.pos, speed=self.speed) orientation = np.deg2rad(self.orientation + 90) or_tuple=(np.cos(orientation), -np.sin(orientation)) pnorm = self.fire_force/projectile.mecha.mass snorm = self.fire_force/self.mass projectile.mecha.speed += snorm * np.array(or_tuple, dtype='float64') self.speed -= snorm * np.array(or_tuple, dtype='float64') elements.append(projectile) self.actions['fire'] = False if __name__ == "__main__": pass