2020-01-28 11:00:33 +01:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
|
|
Created on Tue Jan 28 10:54:33 2020
|
|
|
|
|
|
|
|
@author: suwako
|
|
|
|
"""
|
|
|
|
import mecha
|
2020-01-31 17:44:20 +01:00
|
|
|
import pygame
|
|
|
|
import sys
|
|
|
|
import numpy as np
|
2020-01-28 11:00:33 +01:00
|
|
|
|
2020-01-31 17:44:20 +01:00
|
|
|
|
|
|
|
class Obj():
|
|
|
|
def __init__(self, **keyargs):
|
|
|
|
self.mecha = mecha.Player(**keyargs)
|
|
|
|
self.image = pygame.image.load("assets/planet.gif")
|
|
|
|
self.position = self.image.get_rect()
|
|
|
|
self.dimension = np.array((self.position.width, self.position.height))
|
|
|
|
|
|
|
|
def dimension(self):
|
|
|
|
return np.array((self.position.width, self.position.height),
|
|
|
|
dtype='float64')
|
|
|
|
|
|
|
|
def draw(self,
|
|
|
|
scale=1,
|
|
|
|
reference=np.array((0, 0), dtype='float64'),
|
|
|
|
size=(0, 0)):
|
2020-02-01 12:29:45 +01:00
|
|
|
npsize=np.array(size, dtype='float64')
|
|
|
|
scaled_pos = scale * (self.mecha.pos - reference + npsize/(2*scale))
|
|
|
|
if np.linalg.norm(scaled_pos - npsize/2) > max(size):
|
|
|
|
return
|
2020-01-31 17:44:20 +01:00
|
|
|
scaled_dimension = (scale*self.dimension()).astype(int)
|
|
|
|
scaled_image = pygame.transform.scale(self.image, scaled_dimension)
|
2020-01-31 23:30:38 +01:00
|
|
|
scaled_image = pygame.transform.rotate(scaled_image,
|
|
|
|
self.mecha.orientation%360)
|
2020-01-31 17:44:20 +01:00
|
|
|
scaled_position = scaled_image.get_rect()
|
2020-01-31 23:30:38 +01:00
|
|
|
scaled_position.center = tuple(map(int, scaled_pos))
|
2020-01-31 17:44:20 +01:00
|
|
|
screen.blit(scaled_image, scaled_position)
|
|
|
|
|
|
|
|
|
|
|
|
class Star(Obj):
|
|
|
|
def __init__(self, **keyargs):
|
|
|
|
self.mecha = mecha.Player(**keyargs)
|
2020-02-01 12:29:45 +01:00
|
|
|
self.image = pygame.image.load("assets/ship/loop/00001.png")
|
2020-01-31 17:44:20 +01:00
|
|
|
self.position = self.image.get_rect()
|
|
|
|
|
|
|
|
|
|
|
|
class Planet(Obj):
|
|
|
|
def __init__(self, **keyargs):
|
|
|
|
self.mecha = mecha.Player(**keyargs)
|
2020-02-01 12:29:45 +01:00
|
|
|
self.image = pygame.image.load("assets/planet/loop/00001.png")
|
2020-01-31 17:44:20 +01:00
|
|
|
self.position = self.image.get_rect()
|
|
|
|
|
|
|
|
|
|
|
|
class Player(Obj):
|
|
|
|
def __init__(self, **keyargs):
|
|
|
|
self.mecha = mecha.Player(**keyargs)
|
2020-02-01 12:29:45 +01:00
|
|
|
self.image = pygame.image.load("assets/ship/loop/00001.png").convert_alpha()
|
2020-01-31 17:44:20 +01:00
|
|
|
self.position = self.image.get_rect()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
import time
|
|
|
|
pygame.init()
|
|
|
|
black = (0, 0, 0)
|
|
|
|
size = width, height = 1366, 720
|
2020-02-01 12:29:45 +01:00
|
|
|
TICK_RATE = 30
|
2020-01-31 17:44:20 +01:00
|
|
|
keys = set()
|
|
|
|
tick = (time.time(), time.time(), 0)
|
2020-01-31 23:30:38 +01:00
|
|
|
screen = pygame.display.set_mode(size,
|
|
|
|
flags=pygame.RESIZABLE)
|
2020-02-01 12:29:45 +01:00
|
|
|
elements = [Player(speed=(5, 0), pos=(10, -200)), Player(speed=(-5, 0), pos=(10, 200), mass = 2), Planet(mass=200)]
|
2020-01-31 17:44:20 +01:00
|
|
|
reference = 1
|
2020-01-31 23:30:38 +01:00
|
|
|
joy=[1, 1]
|
2020-01-31 17:44:20 +01:00
|
|
|
while 1:
|
|
|
|
dtick = tick
|
|
|
|
tick = (tick[0], time.time(), int((time.time() - tick[0])*TICK_RATE))
|
|
|
|
dtick = tick[2] - dtick[2]
|
|
|
|
if dtick > 2:
|
|
|
|
print(dtick)
|
2020-01-31 23:30:38 +01:00
|
|
|
for i in range(dtick):
|
|
|
|
size = pygame.display.get_surface().get_size()
|
2020-01-31 17:44:20 +01:00
|
|
|
for event in pygame.event.get():
|
|
|
|
#print(event.type)
|
2020-01-31 23:30:38 +01:00
|
|
|
if event.type == pygame.VIDEORESIZE:
|
|
|
|
size = width, height = event.size
|
|
|
|
screen =screen = pygame.display.set_mode(size,
|
|
|
|
flags=pygame.RESIZABLE)
|
2020-01-31 17:44:20 +01:00
|
|
|
if event.type == pygame.QUIT: sys.exit()
|
|
|
|
if event.type == pygame.KEYDOWN:
|
|
|
|
keys.update({event.key})
|
|
|
|
print(event.key)
|
|
|
|
# if event.key == 102:
|
|
|
|
# follow = (follow + 1)%len(elements)
|
|
|
|
if event.type == pygame.KEYUP:
|
|
|
|
if event.key in keys:
|
|
|
|
keys.remove(event.key)
|
|
|
|
screen.fill(black)
|
2020-01-31 23:30:38 +01:00
|
|
|
for key in keys:
|
|
|
|
if key in [275,276,273,274]:
|
|
|
|
exec("joy" + ("[0]+","[0]-","[1]+","[1]-")[[275,276,273,274].index(key)] + "=1")
|
|
|
|
elements[1].mecha.orientation=joy[0]*(-3)
|
2020-02-01 12:29:45 +01:00
|
|
|
for element in elements:
|
2020-01-31 17:44:20 +01:00
|
|
|
element.mecha.apply_gravity([element.mecha for element in elements])
|
2020-02-01 12:29:45 +01:00
|
|
|
element.mecha.tick()
|
|
|
|
ori,speed=origin=elements[1].mecha.pos, origin=elements[1].mecha.speed
|
|
|
|
for element in elements:
|
|
|
|
element.mecha.ref(origin=ori, speed=speed)
|
|
|
|
if i < 2:
|
2020-01-31 23:30:38 +01:00
|
|
|
for element in elements:
|
2020-02-01 12:29:45 +01:00
|
|
|
element.draw(scale=10**(joy[1]*0.05), reference=elements[reference].mecha.pos, size=screen.get_size())
|
2020-01-31 23:30:38 +01:00
|
|
|
pygame.display.flip()
|
2020-01-31 17:44:20 +01:00
|
|
|
# for element in elements:
|
|
|
|
# element.apply(camera=camera, origin=origin)
|
|
|
|
# screen.blit(element.image, element.position)
|
|
|
|
time.sleep(0.001)
|
2020-02-01 12:29:45 +01:00
|
|
|
if tick[2]%60 == 0 : print(elements[2].mecha.pos, elements[2].mecha.speed)
|