Ejemplo n.º 1
0
def main():

    skull = Body.GravBody(5, 6.371 * 10**6, 8000.)
    solver = Solver.RK2(0.001)

    def stop_condition(skull):
        return skull.velocity > 0

    sim1 = Simulation.TrajectorySim(stop_condition, solver, skull)
    x, y = sim1.get_results()
    skull2 = Body.GravBody(5, 6.371 * 10**6, 8000.)
    sim2 = Simulation.InverseTrajectorySim(stop_condition, solver, skull2)
    a, b = sim2.get_results()

    plt.plot(x, y)
    plt.plot(a, b)
    plt.title("Skull Tosses")
    plt.xlabel("Time [s]")
    plt.ylabel("Height [m]")
    plt.legend(["Uniform Gravity", "Inverse Square Gravity"])

    plt.figure()
    varray = np.arange(0, 100, 0.5)
    harray = []
    for v in varray:
        skull3 = Body.GravBody(5, 6.371 * 10**6, v)
        sim3 = Simulation.InverseTrajectorySim(stop_condition, solver, skull3)
        result = sim3.get_results()
        harray.append(skull3.position)

    plt.plot(varray, harray)
    plt.title("Maximum Height vs. Initial Velocity")
    plt.xlabel("Initial Velocity [m/s]")
    plt.ylabel("Maximum Height [m]")
Ejemplo n.º 2
0
def main():
    coffee = Body.ThermalBody(500)
    solver = Solver.Euler(0.5)

    def stop_condition(coffee):
        return coffee.temperature > sim.Ta * 1.1

    sim = Simulation.CoolingSim(stop_condition, solver, 293, 0.05, coffee)
    t, T = sim.get_results()
    plt.plot(t, T)

    coffee = Body.ThermalBody(500)
    solver = Solver.RK2(0.5)

    def stop_condition(coffee):
        return coffee.temperature > sim.Ta * 1.1

    sim = Simulation.CoolingSim(stop_condition, solver, 293, 0.05, coffee)
    t, T = sim.get_results()
    plt.plot(t, T)

    plt.title("OOP Cooling Curves")
    plt.xlabel("Time [s]")
    plt.ylabel("Temperature[K]")
    plt.legend(["Euler Curve", "RK2 Cooling Curve"])
Ejemplo n.º 3
0
def setup():
    width=2400
    height=1800
    for i in range(0,startBodyCount-1):
        #stars[i] = Body(id=i,r=1,mass=random.uniform(startBodyMass[0],startBodyMass[1]),pos=[random.uniform(100,1500),random.uniform(100,800)],vel=[random.uniform(0,startBodySpeed),random.uniform(0,startBodySpeed)],col=[random.randint(0,255),random.randint(0,255),random.randint(0,255)])
        stars.append(Body(id=i,r=1,mass=random.uniform(startBodyMass[0],startBodyMass[1]),pos=[random.uniform(100,1500),random.uniform(100,800)],vel=[random.uniform(0,startBodySpeed),random.uniform(0,startBodySpeed)],col=[random.randint(0,255),random.randint(0,255),random.randint(0,255)]))
    
    stars.append(Body(id=startBodyCount-1,r=1,mass=5000,pos=[2400/2,1800/2],vel=[0,0],col=[255,255,255]))
 def sim_1(self):    
     Earth = Body.GravBody(1,self.rEarth,self.vEarth)
     Mars = Body.GravBody(1,self.rMars,self.vMars)
     Planets = [Earth,Mars]
     sim = Simulation.OrbitSim(self.stop_1,self.physics,Planets)
     sim.advance()
     time, bodies = sim.get_results()
     return bodies[-1][1].position.theta
Ejemplo n.º 5
0
 def __init__(self, mx, my):
     self.map = [[define.elem["case"]] * my for _ in range(mx)]
     self.mx = mx
     self.my = my
     self.head = [self.mx / 2, self.my / 2]
     self.body = Body()
     self.apple = Apple(self.mx, self.my)
     self.cherry = Cherry(self.mx, self.my)
 def __init__(self,solver,stopCondition,physics,Ms,Mp,Rs,Rp,ap,e,omega,i):
     
     self.Rs=Rs
     self.Rp=Rp
     self.omega=omega
     self.i=i
     self.Ms=Ms
     self.Mp=Mp
     self.ap=ap
     self.e=e
     self.physics=physics
     self.desiredOrbitRadius=None
     self.numberOrbits=0
     self.G=6.67408*10**-11
     
     self.vp=math.sqrt(self.G*Ms**3*(1+e)/(ap*(Mp+Ms)**2*(1-e)))
     self.vs=-(Mp/Ms)*self.vp
     self.rp=ap-ap*e
     self.rs=-(Mp/Ms)*self.rp
     
     M=1.989*10**30
     
     body1x=self.rp
     body1y=0
     body1z=0
     body1pos=Vector.Vector(x=body1x,y=body1y,z=body1z)
     body1pos.rotZ(omega)
     body1pos.rotX(i)
     
     body2x=self.rs
     body2y=0
     body2z=0
     body2pos=Vector.Vector(x=body2x,y=body2y,z=body2z)
     body2pos.rotZ(omega)
     body2pos.rotX(i)
     
     body1vx=0
     body1vy=self.vp
     body1vz=0
     body1vel=Vector.Vector(x=body1vx,y=body1vy,z=body1vz)
     body1vel.rotZ(omega)
     body1vel.rotX(i)
     
     body2vx=0
     body2vy=self.vs
     body2vz=0
     body2vel=Vector.Vector(x=body2vx,y=body2vy,z=body2vz)
     body2vel.rotZ(omega)
     body2vel.rotX(i)
     
     self.body1=Body.GravBody(body1vel,body1pos,Mp)
     self.body2=Body.GravBody(body2vel,body2pos,Ms)
     bodies=[self.body1,self.body2]
     
     super(ExoSim,self).__init__(solver,bodies,stopCondition,M)
Ejemplo n.º 7
0
    def update(self):
        self.imagerectR.centerx = int(self.x) + int(79 / 2)
        self.imagerectR.centery = int(self.y) + int(157 / 2)
        self.imagerectL.centerx = int(self.x) + int(79 / 2)
        self.imagerectL.centery = int(self.y) + int(157 / 2)

        if self.facing == 'left':
            self.hit_box = Hitbox(self.win, self.x + 27, self.y + 25, 25)
            self.body = Body(self.x + 24, self.y + 50, 40, 100)
        elif self.facing == 'right':
            self.hit_box = Hitbox(self.win, self.x + 52, self.y + 25, 25)
            self.body = Body(self.x + 15, self.y + 50, 40, 100)
Ejemplo n.º 8
0
 def sim_3(self):
     r1 = vector.Vector(1., 0, 0)
     v1 = vector.Vector(0, 1.1 * math.pi, 0)
     r2 = vector.Vector(-1., 0, 0)
     v2 = vector.Vector(0, -1.1 * math.pi, 0)
     One = Body.GravBody(1., r1, v1)
     Two = Body.GravBody(1., r2, v2)
     Objects = [One, Two]
     sim = Simulation.OrbitSim(physics=self.physics, body=Objects)
     sim.advance(time=10.)
     time, bodies = sim.get_results()
     self.plorbits(bodies)
Ejemplo n.º 9
0
 def __init__(self, scene, pos):
     Entity.__init__(self, scene)
     self.body_handler = Body(scene)
     self.scene = scene
     self.immunities = []
     self.current_path = 0
     self.current_tile = ()
     self.current_order = 0
     self.lifetime = 0
     self.vision_range = 0
     self.max_health = 0
     self.health = 0
     self.alive = True
     self.target = 0
     self.types += ["unit"]
Ejemplo n.º 10
0
    def importBodiesFile(name, combo):
        global gBodies
        buffer = []
        import_file = open(name, 'r')
        for line in import_file:
            current_data = ""
            data_list = list()
            for ch in line:
                # Caracteres de separacion
                if ch != '|' and ch != ',':
                    if ch != " " and ch != '(' and ch != ')':  # Ignorando los espacios
                        current_data += str(ch)
                else:
                    data_list.append(current_data)
                    current_data = ""
            # Acabada de leer una linea, se carga el objeto con sus datos
            temp_body = Body(data_list[0], float(data_list[1]),
                             float(data_list[2]), float(data_list[3]),
                             float(data_list[4]), float(data_list[5]),
                             float(data_list[6]), float(data_list[7]),
                             (float(data_list[8]), float(
                                 data_list[9]), float(data_list[10])),
                             bool(int(data_list[11])))

            buffer.append(temp_body)
        # Acabado el anexo de los cuerpos, se actualiza el combo
        gBodies[:] = buffer[:]
        FileUtilities.refreshBodiesCombo(combo)
        import_file.close()
Ejemplo n.º 11
0
 def canvas_onleftclick(self, event):
     check = self.clickOnObject(event)
     if self.selectedBody == None:
         if check == None:
             body = Body(self.canvas,
                         np.array([event.x, event.y], dtype="float64"),
                         np.zeros(2), 1e10, 10, len(self.bodies), "white",
                         0, "collider", self)
             if self.selectedBody != None:
                 self.selectedBody = None
             self.bodies.append(body)
         else:
             self.selectedBody = check
             self.selectedBody.selected = True
             self.canvas.itemconfig(self.selectedBody.id,
                                    outline="deep sky blue")
     else:
         if self.selectedBody == check:
             self.canvas.itemconfig(self.selectedBody.id, outline="")
             self.selectedBody.selected = False
             self.selectedBody = None
         else:
             dx, dy = (event.x - self.selectedBody.position[0]), (
                 event.y - self.selectedBody.position[1])
             self.selectedBody.mom = [dx * 5e9, dy * 5e9]
             self.selectedBody.updateVector()
Ejemplo n.º 12
0
    def on_draw(self):
        arcade.start_render()

        self.side_bar.draw()
        for button in self.button_list:
            button.draw()
        if self.is_menu:
            self.menu.draw()
        else:
            arcade.draw_text("Points", Const.RIGHT - Const.SIDE_BAR / 2, Const.GAME_HEIGHT - 50, arcade.color.WHITE, 30,
                             align="center", anchor_x="center")
            y = Const.GAME_HEIGHT - 100
            for a in self.body:
                Body.Component(Const.RIGHT - Const.SIDE_BAR + 15, y + 20, a.size, a.color, a.kind).draw()
                arcade.draw_text(str(a.points), Const.RIGHT - Const.SIDE_BAR + 30, y, arcade.color.WHITE, 30,
                                 align="center", anchor_x="left")
                y -= 40

            for a in self.body:
                a.draw()

            if Const.GHOST_WALK:
                self.ghost_walk_effect.draw()

            self.food.draw()
 def vError(self, v):
     '''The error function used in a Search method for finding an initial
     velocity that gives a trajectory that reaches the desired height.
     
     Parameters
     -----
     v : float
         The velocity whose error is being calculated.
         
     Returns
     -----
     float
         The difference between the calculated height and the desired height.
     '''
     step=0.01
     
     skull = Body.GravBody(Vector.Vector(x=0,y=0,z=v),Vector.Vector(x=0,y=0,z=self.startHeight))
     solver = Solver.RK2(step,Physics.UniformGravity.diffEq)
     
     skullFlight = TrajectorySim(solver,Vector.Vector(x=0,y=0,z=self.g),skull,Physics.stopCondition)
     t,bodies = skullFlight.simulate()
     
     hGuess = bodies[-1].position.z
     
     return hGuess-self.desiredHeight  
    def angleError(self, phi):
        '''The error function used in a Search method for finding an angle that
        gives an equal max height and distance.
        
        Parameters
        -----
        phi : float
            The angle whose error is being calculated.
            
        Returns
        -----
        float
            The difference between the max height and the distance traveled for
            the given phi.
        '''
        rock = Body.GravBody(Vector.Vector(r=100.,theta=0,phi=phi),Vector.Vector(x=0,y=0,z=0))
        
        rockTrajectory = TrajectorySim(self.solver,rock,Physics.stopCondition,c=self.c)
        t,bodies = rockTrajectory.simulate()
        
        z=[b.position.z for b in bodies]
#        y=[b.position.y for b in bodies]
        x=[b.position.x for b in bodies]
#        print max(z)
#        print x[-1]
#        
#        plt.plot(x,z)
        
        dist=x[-1]
        
        return max(z)-dist
Ejemplo n.º 15
0
    def __init__(self, cam_resolution=(80,80), action_interval=1):
        self.body = Body.Body()
        self.camera = picamera.PiCamera()
        self.camera.resolution = cam_resolution
        time.sleep(2) # camera initialization
        self.stream = picamera.array.PiRGBArray(self.camera)

        self.time = 0
        self.action_interval = action_interval
Ejemplo n.º 16
0
 def __init__(self):
     super().__init__()
     self.add_component('renderer', Renderer())
     self.add_component(
         'physics',
         Physics(CIRCLE_MASS, CIRCLE_S_FRICTION, CIRCLE_K_FRICTION,
                 Vector2D(0, 0)))
     self.add_component('body', Body.Circle(0, Vector2D(300, 300), 50, 30))
     self.add_component('controller', Controller.CircleController())
    def closed2BodyAutoBuilder(omega, i, mBig, mSmall, ap, e):
        """
        """
        G = 1  #6.67408*10**(-11)
        vp = np.sqrt(G * mBig**3 * (1 + e) / (ap * (mSmall + mBig)**2 *
                                              (1 - e)))
        vs = -(mSmall / mBig) * vp
        rp = ap - ap * e
        rs = -(mSmall / mBig) * rp

        body1x = rp
        body1y = 0
        body1z = 0
        body1pos = Vector.Vector(x=body1x, y=body1y, z=body1z)
        body1pos.rotZ(omega)
        body1pos.rotX(i)

        body2x = rs
        body2y = 0
        body2z = 0
        body2pos = Vector.Vector(x=body2x, y=body2y, z=body2z)
        body2pos.rotZ(omega)
        body2pos.rotX(i)

        body1vx = 0
        body1vy = vp
        body1vz = 0
        body1vel = Vector.Vector(x=body1vx, y=body1vy, z=body1vz)
        body1vel.rotZ(omega)
        body1vel.rotX(i)

        body2vx = 0
        body2vy = vs
        body2vz = 0
        body2vel = Vector.Vector(x=body2vx, y=body2vy, z=body2vz)
        body2vel.rotZ(omega)
        body2vel.rotX(i)

        body1 = Body.GravBody(body1vel, body1pos, mSmall)
        body2 = Body.GravBody(body2vel, body2pos, mBig)
        bodies = [body1, body2]

        return bodies
 def error_3(self,launch_time):
     vShip = vector.Vector(0,2*math.pi,0)
     rShip = vector.Vector(1,0,0)
     Ship = Body.GravBody(1,rShip,vShip)
     rMars = vector.Vector(1.5,0,0)
     vMars = vector.Vector(0,2*math.pi/math.sqrt(1.5),0)
     Mars = Body.GravBody(1,rMars,vMars)
     Objects = [Ship,Mars]
     sim = Simulation.OrbitSim(physics=self.physics,body=Objects)
     sim.advance(time=launch_time)
     sim.body[0].velocity.r = self.vL
     p = ((2.5/2.)**(3./2.))/2.
     sim.advance(time=p+launch_time)
     t2list,blist = sim.get_results()
     sep = sim.body[1].position - sim.body[0].position
     error = sep.r
     if error <= 0.01:
         self.plorbits(blist)
     return error
Ejemplo n.º 19
0
 def __init__(self,
              Ms=None,
              Mp=None,
              ap=None,
              e=0,
              Rs=None,
              Rp=None,
              omega=None,
              i=None,
              apnd=True):
     '''Save Values'''
     self.apnd = apnd
     self.Rs = Rs
     self.Rp = Rp
     self.G = 4 * math.pi**2.
     self.period = np.sqrt(((ap**3.) * ((Ms + Mp)**2.)) / Ms**3.)
     '''Set up Vectors'''
     rpp = ap - e * ap
     rsp = -(Mp / Ms) * rpp
     vpp = math.sqrt(
         ((self.G * Ms**3.) / (ap * (Ms + Mp)**2.)) * ((1. + e) / (1. - e)))
     vsp = -(Mp / Ms) * vpp
     '''Rotate Vectors into Viewer frame'''
     rs = vector.Vector(rsp, 0., 0.)
     rs.rot_z(omega)
     rs.rot_x(i)
     rp = vector.Vector(rpp, 0., 0.)
     rp.rot_z(omega)
     rp.rot_x(i)
     vs = vector.Vector(0., vsp, 0.)
     vs.rot_z(omega)
     vs.rot_x(i)
     vp = vector.Vector(0., vpp, 0.)
     vp.rot_z(omega)
     vp.rot_x(i)
     '''Set Up Sim'''
     star = Body.GravBody(Ms, rs, vs)
     planet = Body.GravBody(Mp, rp, vp)
     self.body = [star, planet]
     solver = Solver.RK2(0.01)
     self.physics = Physics.NBody(solver, self.G)
     self.bodies = [cp.deepcopy(self.body)]
     self.t = [0]
Ejemplo n.º 20
0
    def __init__(self, file):
        i = 0
        self.bodies = list()
        for line in file:
            i = i + 1

        i = i / 30
        for j in range(0, int(i)):
            b1 = b.Body(file, j)
            self.bodies.append(b1)
 def findV(self,tolerance):
     '''Finds the velocity given a desired height within a given tolerance
     for a body on Earth.
     
     Parameters
     -----
     tolerance : float
         How close you want to be to the theoretically ideal value.
         
     Returns
     -----
     The estimated velocity.
     '''
     
     desiredHeight=self.desiredHeight
     vGuess=self.vGuess
     hGuess=self.hGuess
     g = -9.81
     step = 0.1 
     lastvGuess = vGuess
     up = False
     down = False
     
     while abs(hGuess-desiredHeight)>tolerance:
         
         skull = Body.GravBody(vGuess,self.startHeight)
         solver = Solver.RK2(step,Physics.UniformGravity.diffEq)
         
         skullFlight = TrajectorySim(solver,g,skull,Physics.stopCondition)
         t,vAndh = skullFlight.simulate()
         
         hGuess = vAndh[1][-1]
         
         if hGuess-desiredHeight < 0:
             up = True
             if down == False:
                 lastvGuess = vGuess
                 vGuess = vGuess*2
             else:
                 lvgHold = vGuess
                 vGuess = vGuess + abs(lastvGuess-vGuess)*0.5
                 lastvGuess = lvgHold
                 
         elif hGuess-desiredHeight > 0:
             down = True
             if up == False:
                 lastvGuess = vGuess
                 vGuess = vGuess/2.
             else:
                 lvgHold = vGuess
                 vGuess = vGuess - abs(vGuess-lastvGuess)*0.5
                 lastvGuess = lvgHold
         else: print('Error?')
     
     return vGuess
    def __init__(self,solver,stopCondition,physics,M1,M2,a1,e):

        self.M1=M1
        self.M2=M2
        self.a1=a1
        self.e=e
        self.physics=physics
        self.desiredOrbitRadius=None
        self.numberOrbits=0
        self.G=6.67408*10**-11
        
        self.v1=math.sqrt(self.G*M2**3*(1+e)/(a1*(M1+M2)**2*(1-e)))
        self.v2=-(M1/M2)*self.v1
        self.r1=a1-a1*e
        self.r2=-(M1/M2)*self.r1
        
        M=1.989*10**30
        
        body1x=self.r1
        body1y=0
        body1z=0
        body1pos=Vector.Vector(x=body1x,y=body1y,z=body1z)
        
        body2x=self.r2
        body2y=0
        body2z=0
        body2pos=Vector.Vector(x=body2x,y=body2y,z=body2z)
        
        body1vx=0
        body1vy=self.v1
        body1vz=0
        body1vel=Vector.Vector(x=body1vx,y=body1vy,z=body1vz)
        
        body2vx=0
        body2vy=self.v2
        body2vz=0
        body2vel=Vector.Vector(x=body2vx,y=body2vy,z=body2vz)
        
        self.body1=Body.GravBody(body1vel,body1pos,M1)
        self.body2=Body.GravBody(body2vel,body2pos,M2)
        bodies=[self.body1,self.body2]
        super(BinarySim,self).__init__(solver,bodies,stopCondition,M)
Ejemplo n.º 23
0
class Board():
    def __init__(self, mx, my):
        self.map = [[define.elem["case"]] * my for _ in range(mx)]
        self.mx = mx
        self.my = my
        self.head = [self.mx / 2, self.my / 2]
        self.body = Body()
        self.apple = Apple(self.mx, self.my)
        self.cherry = Cherry(self.mx, self.my)

    def init_board(self):
        self.body.init_body(self.head)
        self.apple.set_apple(self.map)
        self.cherry.set_cherry(self.map)
        self.update_board()

    def update_board(self):
        for x in range(self.mx):
            for y in range(self.my):
                self.map[x][y] = define.elem["head"] if [x, y] == self.head \
                    else define.elem["body"] if self.body.is_body([x, y]) \
                    else define.elem["apple"] if self.apple.is_apple([x, y]) \
                    else define.elem["cherry"] if self.cherry.is_cherry_const([x, y]) \
                    else define.elem["case"]

    def get_map(self):
        return self.map

    def get_head(self):
        return self.head

    def set_head(self, x, y):
        self.head = [x, y]

    def is_wall(self, p):
        return p[0] < 0 or p[0] > self.mx or p[1] < 0 or p[1] > self.my

    def deb(self):
        for x in range(self.mx):
            for y in range(self.my):
                print('{} '.format(self.map[x][y]), end="")
            print()
Ejemplo n.º 24
0
 def preset2(self):
     self.canvas.delete("all")
     self.bodies = []
     with open("data/preset2.txt", "r") as preset2File:
         for line in preset2File.read().splitlines():
             data = line.split(",")
             pos = np.array([float(data[1]), 0])
             vel = np.array([0, float(data[2])])
             planet = Body(self.canvas, pos, vel, float(data[0]), 10,
                           len(self.bodies), data[3], 1, data[4], self)
             self.bodies.append(planet)
 def error_2(self,v0):
     vShip = vector.Vector(0,v0,0)
     rShip = vector.Vector(1,0,0)
     Ship = Body.GravBody(1,rShip,vShip)
     sim = Simulation.OrbitSim(self.stop_1,self.physics,Ship)
     sim.advance()
     time, Ships = sim.get_results()
     r = [[s.position.r for s in ship] for ship in Ships]
     max_r = max(r)
     error = max_r[0] - 1.5 #since r becomes another stupid list of lists
     return error
Ejemplo n.º 26
0
 def __init__(self):
     super().__init__()
     self.add_component('controller', Controller.PlayerController())
     self.add_component('renderer', Renderer())
     self.add_component(
         'body', Body.Polygon(0, Vector2D(100, 100), 30,
                              PLAYER_SHAPE_VECTOR))
     self.add_component(
         'physics',
         Physics(PLAYER_MASS, PLAYER_STATIC_FRICTION,
                 PLAYER_KINETIC_FRICTION, Vector2D(0, 0)))
Ejemplo n.º 27
0
 def error(theta):
     htarg = 0
     r =  vector.Vector(0,0,0)
     v = vector.Vector(r=100,theta=theta,phi=(math.pi/2))
     particle = Body.GravBody(5,r,v)
     solver =Solver.RK4(0.1)
     physics = Physics.UniformGravity(solver,c=0.1)
     sim = Simulation.TrajectorySim(stop_maker(htarg),physics,particle)
     a,b = sim.get_results()
     y = [p.position.y for p in b]
     E = particle.position.x - max(y)
     return E
Ejemplo n.º 28
0
def submit():
    mass = float(mass_field.get())
    pos = (float(px_field.get()), float(py_field.get()))
    vect = (float(vx_field.get()), float(vy_field.get()))
    color = (int(r_field.get()), int(g_field.get()), int(b_field.get()))
    if autorad:
        rad = -1
    else:
        rad = float(radius_field.get())
    collisionbool = collision.get()
    body.destroy()
    bodies.append(Body(mass, pos, vect, color, rad, collisionbool))
Ejemplo n.º 29
0
 def __init__(self, M1=None, M2=None, a1=1, e=0, apnd=True):
     '''Build GravBodies'''
     self.G = 4 * math.pi**2.
     r1p = a1 - e * a1
     r2p = -(M1 / M2) * r1p
     v1p = math.sqrt(
         ((self.G * M2**3.) / (a1 * (M1 + M2)**2.)) * ((1. + e) / (1. - e)))
     v2p = -(M1 / M2) * v1p
     r1 = vector.Vector(r1p, 0., 0.)
     r2 = vector.Vector(r2p, 0., 0.)
     v1 = vector.Vector(0., v1p, 0.)
     v2 = vector.Vector(0., v2p, 0.)
     body1 = Body.GravBody(M1, r1, v1)
     body2 = Body.GravBody(M2, r2, v2)
     '''Set up Sim'''
     self.body = [body1, body2]
     solver = Solver.RK2(0.01)
     self.physics = Physics.NBody(solver, self.G)
     self.bodies = [cp.deepcopy(self.body)]
     self.t = [0]
     self.apnd = apnd
Ejemplo n.º 30
0
 def set_players(self, number_of_players):
     if number_of_players < 1:
         number_of_players = 1
     center_x = int(Const.GRID_NR_W / 2) * Const.BODY_SIZE + Const.BODY_SIZE / 2 + 2 * Const.BODY_SIZE
     center_y = int(Const.GRID_NR_H / 2) * Const.BODY_SIZE + Const.BODY_SIZE / 2
     p = 0
     self.body = []
     for i in range(number_of_players):
         player = Body.Body(i)
         player.set_position(center_x - p, center_y)
         player.setup()
         self.body.append(player)
         p += 4 * Const.BODY_SIZE
Ejemplo n.º 31
0
 def __init__( self, scene, pos ) :
     Entity.__init__( self, scene )
     self.body_handler = Body( scene )
     self.scene = scene
     self.immunities = []
     self.current_path = 0
     self.current_tile = ()
     self.current_order = 0
     self.lifetime = 0
     self.vision_range = 0
     self.max_health = 0
     self.health = 0
     self.alive = True
     self.target = 0
     self.types += [ "unit" ]
Ejemplo n.º 32
0
class Unit( Entity ) :

    def __init__( self, scene, pos ) :
        Entity.__init__( self, scene )
        self.body_handler = Body( scene )
        self.scene = scene
        self.immunities = []
        self.current_path = 0
        self.current_tile = ()
        self.current_order = 0
        self.lifetime = 0
        self.vision_range = 0
        self.max_health = 0
        self.health = 0
        self.alive = True
        self.target = 0
        self.types += [ "unit" ]

    def set_body_images( self ) :
        pass

    def set_health( self, health ) :
        self.max_health = health
        self.health = health

    def set_target( self, target ) :
        self.target = target

    def handle_collision( self, my_fixture, colliding_fixture ) :
        pass
        #self.scene.world.DestroyBody( colliding_fixture.body )

    def set_order( self, order ) :
        if self.current_order == 0 :
            self.current_order = order
            return True
        if self.current_order.remove_unit( self ) == True :
            self.current_order = order
            return True
        return False

    def update( self, update ) :
        self.last_update = update
        self.handle_lifetime( update )
        self.body_handler.update( update )
        if self.current_order != 0 :
            if self.current_order.Step() == False :
                return False

    def has_vision_of_point( self, pos ) :
        if self.vision_range > 0 :
            if self.scene.map.fov.is_pos_visible( self.body.transform.position, pos, self.vision_range ) :
                return True
        return False

    def handle_lifetime( self, update ) :
        if self.lifetime > 0 :
            self.lifetime -= 1
            if self.lifetime == 0 :
                self.scene.remove_entity( self )

    def move( self, new_pos ) :
        if self.body == 0 :
            self.pos = new_pos
            return True
        if self.has_vision_of_point( new_pos ) == False :
            self.move_along_path( new_pos )
            return True
        self.move_towards_target( new_pos, 1 )
        return True

    def stop( self ) :
        if self.body == 0 :
            return False
        self.current_path = 0
        self.body.linearVelocity = (0,0)
        #self.move_towards_target( self.scene.target_unit, 1 )

    def move_towards_target( self, target, final_distance ) :
        my_pos = self.body.transform.position
        self.current_path = 0
        if get_distance_between_points( my_pos, target ) > final_distance :
            radians_to_target = get_radians_between_points( my_pos, target )
            movement_vector = get_movement_vector( radians_to_target, self.speed )
            self.body.linearVelocity = movement_vector
            return False
        self.body.linearVelocity = (0,0)
        return True

    def move_along_path( self, new_pos ) :
        if self.current_path != 0 :
            if len( self.current_path ) != 0 :
                next_tile_distance = get_distance_between_points( self.body.transform.position, self.current_tile )
                if next_tile_distance < ( 0.3 * self.speed ) :
                    self.current_tile = self.current_path.pop( 0 )
                    self.move_to_tile( self.current_tile )
                    #self.scene.map.get_visible_tiles( self.body.transform.position )
                    if len( self.current_path ) == 0 :
                        self.current_path = 0
                        self.body.linearVelocity = ( 0, 0 )
                        return False
                    return True
                self.move_to_tile( self.current_tile )
                return True
            return True
        self.current_path = self.scene.map.find_path( self.body.transform.position, new_pos )
        if self.current_path == 0 :
            self.stop()
            return False
        self.current_tile = self.current_path.pop( 0 )
        self.move_to_tile( self.current_tile )

    def move_to_tile( self, tile ) :
        radians_to_tile = get_radians_between_points( self.body.transform.position, tile )
        self.body_handler.turn( radians_to_tile )
        movement_vector = get_movement_vector( radians_to_tile, self.speed )
        self.body.linearVelocity = movement_vector

    def take_damage( self, origin, damage ) :
        if self.immunities.__contains__( damage.type ) :
            return True
        if self.health > 0 :
            self.health -= damage.value
            if self.body_handler != 0 :
                self.body_handler.blink()
            if self.health <= 0 :
                self.die( origin )
                return True
        return False

    def die( self, origin ) :
        if self.alive == False :
            return False
        self.scene.remove_entity( self )
        if "projectile" not in self.types :
            self.scene.game.sound_handler.play_sound("death")
        self.alive = False
        return True

    def pickup( self, item, slot, key, body ) :
        if slot.item != 0 :
            if slot.item.body == body :
                return 0
        self.scene.game.sound_handler.play_sound("pick_up")
        if item.picked( self, slot ) == True :
            return True
        self.body_handler.attach_item( key, item )
        self.set_current_item( 'weapon' )
        return True