Mercurial > atc
annotate atc_plane.py @ 13:4a95c5552d3b
Stall speed and normal rate of climb adjustment
committer: Jeff Sipek <jeffpc@jeff.(none)> 1120872321 -0400
author | Jeff Sipek <jeffpc@jeff.(none)> |
---|---|
date | Sat, 09 Jul 2005 01:25:21 -0400 |
parents | 243941ec0a36 |
children | d9c394a5ef77 |
rev | line source |
---|---|
6 | 1 #/* |
2 # * ATC - Air Traffic Controller simulation game | |
3 # * | |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
4 # * Copyright (C) 2004, 2005 Josef "Jeff" Sipek <jeffpc@optonline.net> |
6 | 5 # * |
6 # * This program is free software; you can redistribute it and/or modify | |
7 # * it under the terms of the GNU General Public License as published by | |
8 # * the Free Software Foundation; either version 2 of the License, or | |
9 # * (at your option) any later version. | |
10 # * | |
11 # * This program is distributed in the hope that it will be useful, | |
12 # * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # * GNU General Public License for more details. | |
15 # * | |
16 # * You should have received a copy of the GNU General Public License | |
17 # * along with this program; if not, write to the Free Software | |
18 # * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 # * | |
20 # * @(#) %M% %I% %E% %U% | |
21 # */ | |
22 | |
0 | 23 import os |
24 import sys | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
25 import time |
0 | 26 import pygame |
27 from math import * | |
28 | |
29 import atc_colors | |
30 import atc_utils | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
31 from atc_plane_specs import * |
0 | 32 |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
33 mperpix = 30000.0/800.0 # 800 px == 30 km |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
34 mperdeg = 1852.0*60.0 # == 1852 m/min * 60 min/deg |
0 | 35 |
36 def m2pix(m): | |
37 """ Meters to pixels conversion fn """ | |
38 return m/mperpix | |
39 | |
40 def pix2m(pix): | |
41 """ Pixels to meters conversion fn """ | |
42 return pix*mperpix | |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
43 |
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
44 def pix2geo(pix): |
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
45 return pix2m(pix)/mperdeg |
0 | 46 |
47 plane_OK = 0 | |
48 plane_RANGE = 1 | |
49 plane_CRASHED = 2 | |
50 plane_STALL = 3 | |
51 plane_DEAD = 4 | |
52 plane_PROXY = 5 | |
53 | |
54 class Plane(pygame.sprite.Sprite): | |
55 """ Class to manage one plane's motion """ | |
8 | 56 def __init__(self,callsign,flightno,pos=(0.0, 0.0, 0.0),vel=(0.0, 0.0, 0.0)): |
0 | 57 """ Set up everything """ |
58 pygame.sprite.Sprite.__init__(self) | |
59 | |
60 # screen | |
61 screen = pygame.display.get_surface() | |
62 self.area = screen.get_rect() | |
63 | |
64 # plane image | |
1
4c7bb645fd75
Data separated into image and sound files
Jeff Sipek <jeffpc@jeff.(none)>
parents:
0
diff
changeset
|
65 (self.image, self.rect) = atc_utils.load_png('data/image/plane.png') |
0 | 66 |
67 # call sign | |
68 self.callsign = callsign | |
69 | |
8 | 70 # flight number |
71 self.flightno = flightno | |
72 | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
73 # position (X, Y, Z) |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
74 self.pos = { \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
75 "X":pos[0], \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
76 "Y":pos[1], \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
77 "Z":pos[2]} |
0 | 78 |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
79 # target position |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
80 self.targetPos = { \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
81 "X":None, \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
82 "Y":None, \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
83 "Z":None} |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
84 |
0 | 85 # velocity |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
86 self.vel = { \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
87 "i":vel[0], \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
88 "j":vel[1], \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
89 "k":vel[2], \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
90 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
91 "heading":0, \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
92 "speed":0, \ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
93 "climb":0} |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
94 self.complete_vel(ijk=1) |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
95 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
96 self.timer = 0 # this is timeout the next time we try to recalculate position |
0 | 97 |
98 # plane specs | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
99 self.specs = plane_SPECS[0] # default to a simple prop plane, FIXME: add param to override |
0 | 100 |
101 # status flag | |
102 self.status = plane_OK | |
103 | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
104 def complete_vel(self, ijk=None, hac=None): |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
105 """ Recalculate all the velocity variables """ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
106 if ijk == None and hac == None: |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
107 print "Nothing calculated" |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
108 return |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
109 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
110 if ijk == None: |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
111 self.vel["i"] = sin(self.vel["heading"]) * sqrt(self.vel["speed"]**2 - self.vel["climb"]**2) |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
112 self.vel["j"] = cos(self.vel["heading"]) * sqrt(self.vel["speed"]**2 - self.vel["climb"]**2) |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
113 self.vel["k"] = self.vel["climb"] |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
114 else: |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
115 self.vel["heading"] = self.calc_head() |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
116 self.vel["speed"] = sqrt(self.vel["i"]**2 + self.vel["j"]**2 + self.vel["k"]**2) |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
117 self.vel["climb"] = self.vel["k"] |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
118 |
0 | 119 def update(self): |
120 """ Move the plane, and check for collisions """ | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
121 if (self.timer > time.time()): |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
122 return |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
123 |
0 | 124 if (self.status != plane_OK): |
125 return | |
126 | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
127 self.pos["X"] += self.vel["i"]/10.0 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
128 self.pos["Y"] += self.vel["j"]/10.0 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
129 self.pos["Z"] += self.vel["k"]/10.0 |
0 | 130 |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
131 # FIXME: need physics |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
132 if (self.targetPos["Z"] != None) and (self.pos["Z"] >= (self.targetPos["Z"] - 25)) and (self.pos["Z"] <= (self.targetPos["Z"] + 25)): |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
133 self.vel["k"] = 0 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
134 self.targetPos["Z"] = None |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
135 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
136 self.complete_vel(ijk=1) |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
137 |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
138 #if (self.pos["X"] < 0) or (self.pos["Y"] < 0): # FIXME: max values |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
139 # self.status = plane_RANGE |
0 | 140 |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
141 if (self.pos["Z"] < 0): |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
142 self.vel["i"] = self.vel["j"] = self.vel["k"] = 0 |
0 | 143 self.status = plane_CRASHED |
144 | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
145 if (self.vel["speed"]<m2pix(self.specs["stall_speed"])) and (not self.status==plane_CRASHED): |
0 | 146 self.status = plane_STALL |
147 | |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
148 self.rect.move(m2pix(self.vel["i"])/10.0,m2pix(self.vel["j"])/10.0) |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
149 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
150 self.timer = time.time() + m2pix(self.vel["speed"])**-1/10.0 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
151 |
0 | 152 def calc_head(self): |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
153 """ Calculate heading of the airplane (in radians)""" |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
154 if (self.vel["i"] == self.vel["j"] == 0): # no movement |
0 | 155 return 0 |
156 | |
157 try: | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
158 head = fabs(atan(self.vel["i"]/-self.vel["j"])) |
0 | 159 except ZeroDivisionError: |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
160 if (self.vel["i"]>0): |
0 | 161 return pi/2 # east |
162 return 3*pi/2 # west | |
163 | |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
164 return head |
0 | 165 |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
166 def calc_geo(self, xy, prefix): |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
167 """ Return a geographic coodrinate-formated xy """ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
168 df = m2pix(pix2geo(xy)) |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
169 minus = prefix[0] |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
170 if df<0: |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
171 df *= -1 |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
172 minus = prefix[1] |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
173 d = floor(df) |
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
174 mf = (df-d) * 60.0 |
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
175 m = floor(mf) |
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
176 s = (mf-m) * 60.0 |
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
177 |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
178 return "%s %dd %02dm %02ds" % (minus, int(d), int(m), int(s)) |
0 | 179 |
8 | 180 def process(self,cmd): |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
181 """ Process a user command """ |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
182 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
183 # FIXME: convert multiple spaces to single |
8 | 184 parts = cmd.split(' ') |
185 | |
186 if (parts[0] == "ALT"): | |
187 print "Changing altitude to " + parts[1] + "m" | |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
188 self.targetPos["Z"] = int(parts[1]) |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
189 self.vel["k"] = self.specs["climb_normal"] |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
190 if (self.pos["Z"] > self.targetPos["Z"]): |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
191 self.vel["k"] *= -1 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
192 self.complete_vel(ijk=1) |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
193 |
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
194 if (parts[0] == "HEAD"): |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
195 self.vel["heading"] = int(parts[1]) |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
196 while(True): |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
197 if self.vel["heading"]>=360: |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
198 self.vel["heading"] -= 360 |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
199 elif self.vel["heading"]<0: |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
200 self.vel["heading"] += 360 |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
201 else: |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
202 break |
10
7bb4cd2fa1bc
Changed window size from 800x600 to 1024x768
Jeff Sipek <jeffpc@jeff.(none)>
parents:
9
diff
changeset
|
203 |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
204 print "Changing heading to " + str(self.vel["heading"]) |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
205 self.vel["heading"] *= pi/180.0 |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
206 self.complete_vel(hac=1) |
8 | 207 |
0 | 208 def display(self,screen): |
209 """ Put everything onto the screen """ | |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
210 screen.blit(self.image, (int(1024/2+m2pix(self.pos["X"])), int(768/2-m2pix(self.pos["Y"])))) |
0 | 211 |
212 # Plane info | |
213 font = pygame.font.Font(None, 16) | |
214 | |
215 color = atc_colors.planeinfo_ok | |
216 if (self.status == plane_CRASHED) or (self.status == plane_DEAD): | |
217 color = atc_colors.planeinfo_crashed | |
218 | |
11
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
219 x = int(1024/2+m2pix(self.pos["X"])) + 10 |
300ba3412449
Fixed velocity calc formulas
Jeff Sipek <jeffpc@jeff.(none)>
parents:
10
diff
changeset
|
220 y = int(768/2-m2pix(self.pos["Y"])) - 5 |
0 | 221 |
9
480ccfc8a57e
Display dms instead of m (for geo coords)
Jeff Sipek <jeffpc@jeff.(none)>
parents:
8
diff
changeset
|
222 # FIXME: display geographic coordinates with NSWE appended/prepended |
12
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
223 #strings = ( self.flightno, |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
224 # self.callsign + " " + str(self.status), |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
225 # "Alt: " + str(int(self.pos["Z"])), |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
226 # "Lat: " + self.calc_geo(self.pos["Y"],"NS"), |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
227 # "Long: " + self.calc_geo(self.pos["X"],"EW"), |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
228 # "Head: " + str(int(atc_utils.todeg(self.vel["heading"]))), |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
229 # "AS: " + str(int(self.vel["speed"]*3.6))) |
8 | 230 strings = ( self.flightno, |
12
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
231 "%03d %03d" % (int(atc_utils.todeg(self.vel["heading"])), int(self.vel["speed"]*3.6)), |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
232 self.specs["name"]) |
243941ec0a36
Make the plane info more realistic
Jeff Sipek <jeffpc@jeff.(none)>
parents:
11
diff
changeset
|
233 |
0 | 234 for stri in strings: |
235 alt = font.render(stri, 1, color) | |
236 altpos = alt.get_rect() | |
237 altpos.topleft = (x,y) | |
238 screen.blit(alt, altpos) | |
239 (x,y) = (x,y+10) |