-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathship.py
More file actions
executable file
·165 lines (142 loc) · 4.54 KB
/
Copy pathship.py
File metadata and controls
executable file
·165 lines (142 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import pygame as py
import numpy as np
from config import *
import copy
class Player(py.sprite.Sprite):
def __init__(self,pos,*groups):
super(Player,self).__init__(*groups)
self.src = ['img/herohor.png','img/herover1.png']
self.thrsrc = [['img/thrust1inv.png','img/thrust2inv.png'],['img/thrust1.png','img/thrust2.png']]
self.inverted = True
self.thr1img = py.image.load(self.thrsrc[1][0])
self.thr2img = py.image.load(self.thrsrc[1][1])
self.landed = False
self.stopgravity = False
self.accelerating = False
self.force = np.array([0.0,0.0])
self.mass = 100
self.autorotate = False
self.missilecount = 0
self.fuel = 200
self.requireorbitalvel = 0
####################
self.angle = 0
self.pos = np.array(pos, dtype='float64')
self.rectheight = 30
self.rectwidth = 30
# self.pos[1] -= 2100
self.zoom = 1
self.old_zoom = 1
self.angu_vel = 0
self.vel = np.array([0.0, 0.0])
self.accel = np.array([0.0, 0.0])
self.dt = dt
self.groundcheck = False
#####################
self.image = None
self.rect = None
self.invert()
def invert(self):
self.inverted = not self.inverted
if self.inverted:
self.permimage = py.image.load(self.src[1])
else:
self.permimage = py.image.load(self.src[0])
self.permimage = py.transform.scale(self.permimage,(int(self.rectwidth*self.zoom),int(self.rectheight*self.zoom)))
self.permrect = self.permimage.get_rect()
self.rect = self.permimage.get_rect()
self.image = self.permimage
self.rot_center()
def nonfireimage(self):
if self.inverted:
self.permimage = py.image.load(self.src[1])
else:
self.permimage = py.image.load(self.src[0])
self.permimage = py.transform.scale(self.permimage,(int(self.rectwidth*self.zoom),int(self.rectheight*self.zoom)))
self.rect = self.permimage.get_rect()
self.image = self.permimage
self.rot_center()
def accelerate(self):
#print("accelerating")
if self.fuel > 0.0:
self.landed = False
rad = (self.angle+90)*np.pi/180
self.accel = playeracceleration*np.array([np.cos(rad),-np.sin(rad)])
self.stopgravity = False
self.landed = False
self.fuel -= 0.1;
#print(self.angle,self.accel)
if self.inverted:
self.permimage = py.image.load(self.thrsrc[1][np.random.randint(0,2)])
else:
self.permimage = py.image.load(self.thrsrc[0][np.random.randint(0,2)])
self.permimage = py.transform.scale(self.permimage,(int(self.rectwidth*self.zoom),int(self.rectheight*self.zoom)))
self.rect = self.permimage.get_rect()
self.image = self.permimage
self.rot_center()
def decelerate(self):
self.accelerating = False
self.vel = np.array([0.0,0.0])
pass
def stopaccelerate(self):
self.accel = np.array([0.0,0.0])
def rotate(self,clockwise=True):
if self.inverted:
if clockwise:self.angu_vel -= ship_angular_acceleration
else:self.angu_vel += ship_angular_acceleration
else:
if clockwise:self.angu_vel -= ship_angular_acceleration
else:self.angu_vel += ship_angular_acceleration
def setvelocity(self,v):
rad = (self.angle+90)*np.pi/180
self.vel = v*np.array([np.cos(rad),-np.sin(rad)])
#print(self.velocity)
def stoprotate(self):
self.angu_vel = 0;
def rot_center(self):
orig_rect = self.permimage.get_rect()
rot_image = py.transform.rotate(self.permimage, self.angle-90)
rot_rect = orig_rect.copy()
rot_rect.center = rot_image.get_rect().center
rot_image = rot_image.subsurface(rot_rect).copy()
if self.zoom != self.old_zoom:
self.image = py.transform.scale(rot_image,(int(self.rect.width*self.zoom),int(self.rect.height*self.zoom)))
self.rect = self.image.get_rect()
self.old_zoom = self.zoom
print("Palyer zoom",self.zoom)
else:
self.image = rot_image
self.rect = self.image.get_rect()
self.rect.centerx = 500
self.rect.centery = 500
def returnrotcenter(self):
orig_rect = self.permimage.get_rect()
def update(self,planets):
self.mask = py.mask.from_surface(self.image)
checkcoll = False
for i in planets:
coll = py.sprite.collide_mask(i,self)
if coll != None:
if self.accelerating == False and self.landed == False:
self.landed = True
self.groundcheck = True
checkcoll = True
else:
self.landed = True
self.angu_vel = 0
pass
break
if self.landed == True:
self.decelerate()
self.stopgravity = True
self.landed = False
if checkcoll == False:
self.stopgravity = False
self.landed = False
#print(self.vel)
self.vel = self.vel + self.accel * self.dt
if checkcoll == False:
self.pos += self.vel*dt
self.angle += self.angu_vel
self.rot_center()
#print("Two "+str(self.vel))