@@ -49,7 +49,7 @@ class StopGameException(Exception):
4949 pass
5050
5151class Minecraft (window .Window ):
52- VERSION_STRING = '0.0.20a_01 '
52+ VERSION_STRING = '0.0.21a '
5353 __timer = Timer (20.0 )
5454 level = None
5555 __levelRenderer = None
@@ -94,6 +94,7 @@ class Minecraft(window.Window):
9494 __hitResult = None
9595
9696 __fogColorMultiplier = 1.0
97+ __displayActive = False
9798 __unusedInt1 = 0
9899 __unusedInt2 = 0
99100
@@ -122,7 +123,8 @@ def setServer(self, server, port):
122123
123124 def setScreen (self , screen ):
124125 if not isinstance (self .guiScreen , ErrorScreen ):
125- self .screenChanged = True
126+ if self .guiScreen or screen :
127+ self .screenChanged = True
126128 if self .guiScreen :
127129 self .guiScreen .closeScreen ()
128130
@@ -169,52 +171,52 @@ def on_deactivate(self):
169171 def on_mouse_press (self , x , y , button , modifiers ):
170172 try :
171173 if self .guiScreen :
172- self .guiScreen .updateEvents (button = button )
173- if self .guiScreen :
174- self .guiScreen .tick ()
175- return
174+ self .guiScreen .updateMouseEvents (button )
176175
177- if not self .__mouseGrabbed :
178- self .grabMouse ()
179- elif button == window .mouse .LEFT :
180- self .__clickMouse ()
181- self .__prevFrameTime = self .__ticksRan
182- elif button == window .mouse .RIGHT :
183- self .__editMode = (self .__editMode + 1 ) % 2
184- elif button == window .mouse .MIDDLE and self .__hitResult :
185- tile = self .level .getTile (self .__hitResult .x , self .__hitResult .y , self .__hitResult .z )
186- if tile == tiles .grass .id :
187- tile = tiles .dirt .id
188-
189- slot = self .player .inventory .getSlotContainsID (tile )
190- if slot >= 0 :
191- self .player .inventory .selectedSlot = slot
192- elif tile > 0 and tiles .tiles [tile ] in User .creativeTiles :
193- self .player .inventory .getSlotContainsTile (tiles .tiles [tile ])
176+ if self .screenChanged :
177+ self .screenChanged = False
178+ if compat_platform != 'darwin' :
179+ return
180+
181+ if not self .guiScreen or (self .guiScreen and self .guiScreen .allowUserInput ):
182+ if not self .guiScreen :
183+ if not self .__mouseGrabbed :
184+ self .grabMouse ()
185+ elif button == window .mouse .LEFT :
186+ self .__clickMouse ()
187+ self .__prevFrameTime = self .__ticksRan
188+ elif button == window .mouse .RIGHT :
189+ self .__editMode = (self .__editMode + 1 ) % 2
190+ elif button == window .mouse .MIDDLE and self .__hitResult :
191+ tile = self .level .getTile (self .__hitResult .x , self .__hitResult .y , self .__hitResult .z )
192+ if tile == tiles .grass .id :
193+ tile = tiles .dirt .id
194+
195+ slot = self .player .inventory .getSlotContainsID (tile )
196+ if slot >= 0 :
197+ self .player .inventory .selectedSlot = slot
198+ elif tile > 0 and tiles .tiles [tile ] in User .creativeTiles :
199+ self .player .inventory .getSlotContainsTile (tiles .tiles [tile ])
194200 except Exception as e :
195201 print (traceback .format_exc ())
196202 self .setScreen (ErrorScreen ('Client error' , 'The game broke! [' + str (e ) + ']' ))
197203
198204 def on_mouse_scroll (self , x , y , dx , dy ):
199205 try :
200- if self .guiScreen :
201- return
202-
203- if dy == 0 :
204- return
205- elif dy > 0 :
206- dy = 1
207- elif dy < 0 :
208- dy = - 1
209-
210- i3 = 0
206+ if not self .guiScreen or (self .guiScreen and self .guiScreen .allowUserInput ):
207+ if dy == 0 :
208+ return
209+ elif dy > 0 :
210+ dy = 1
211+ elif dy < 0 :
212+ dy = - 1
211213
212- self .player .inventory .selectedSlot -= dy
213- while self .player .inventory .selectedSlot < 0 :
214- self .player .inventory .selectedSlot += len (self .player .inventory .slots )
214+ self .player .inventory .selectedSlot -= dy
215+ while self .player .inventory .selectedSlot < 0 :
216+ self .player .inventory .selectedSlot += len (self .player .inventory .slots )
215217
216- while self .player .inventory .selectedSlot >= len (self .player .inventory .slots ):
217- self .player .inventory .selectedSlot -= len (self .player .inventory .slots )
218+ while self .player .inventory .selectedSlot >= len (self .player .inventory .slots ):
219+ self .player .inventory .selectedSlot -= len (self .player .inventory .slots )
218220 except Exception as e :
219221 self .setScreen (ErrorScreen ('Client error' , 'The game broke! [' + str (e ) + ']' ))
220222
@@ -233,47 +235,49 @@ def on_mouse_motion(self, x, y, dx, dy):
233235 def on_key_press (self , symbol , modifiers ):
234236 try :
235237 if self .guiScreen :
236- self .guiScreen .updateEvents (key = symbol )
237- if self .guiScreen :
238- self .guiScreen .tick ()
239- return
238+ self .guiScreen .updateKeyboardEvents (key = symbol )
240239
241- self .player .setKey (symbol , True )
240+ if self .screenChanged :
241+ self .screenChanged = False
242+ if compat_platform != 'darwin' :
243+ return
242244
243- if symbol == window .key .ESCAPE :
244- self .__pauseGame ()
245- elif symbol == window .key .R :
246- self .player .resetPos ()
247- elif symbol == window .key .RETURN :
248- self .level .setSpawnPos (int (self .player .x ), int (self .player .y ), int (self .player .z ), self .player .yRot )
249- self .player .resetPos ()
250-
251- for i in range (9 ):
252- if symbol == getattr (window .key , '_' + str (i + 1 )):
253- self .player .inventory .selectedSlot = i
254-
255- if symbol == window .key .Y :
256- self .__yMouseAxis = - self .__yMouseAxis
257- elif symbol == window .key .G and self .connectionManager is None and len (self .level .entities ) < 256 :
258- self .level .entities .add (Zombie (self .level , self .player .x , self .player .y , self .player .z ))
259- elif symbol == window .key .F :
260- z15 = modifiers & window .key .MOD_SHIFT
261- self .__levelRenderer .drawDistance = self .__levelRenderer .drawDistance + (- 1 if z15 else 1 ) & 3
262- elif symbol == window .key .B :
263- self .setScreen (InventoryScreen ())
264- elif symbol == window .key .T and self .connectionManager and self .connectionManager .isConnected ():
265- self .player .releaseAllKeys ()
266- self .setScreen (ChatScreen ())
245+ if not self .guiScreen or (self .guiScreen and self .guiScreen .allowUserInput ):
246+ self .player .setKey (symbol , True )
247+
248+ if not self .guiScreen :
249+ if symbol == window .key .ESCAPE :
250+ self .__pauseGame ()
251+ elif symbol == window .key .R :
252+ self .player .resetPos ()
253+ elif symbol == window .key .RETURN :
254+ self .level .setSpawnPos (int (self .player .x ), int (self .player .y ), int (self .player .z ), self .player .yRot )
255+ self .player .resetPos ()
256+ elif symbol == window .key .G and self .connectionManager is None and len (self .level .entities ) < 256 :
257+ self .level .entities .add (Zombie (self .level , self .player .x , self .player .y , self .player .z ))
258+ elif symbol == window .key .B :
259+ self .setScreen (InventoryScreen ())
260+ elif symbol == window .key .T and self .connectionManager and self .connectionManager .isConnected ():
261+ self .player .releaseAllKeys ()
262+ self .setScreen (ChatScreen ())
263+
264+ for i in range (9 ):
265+ if symbol == getattr (window .key , '_' + str (i + 1 )):
266+ self .player .inventory .selectedSlot = i
267+
268+ if symbol == window .key .Y :
269+ self .__yMouseAxis = - self .__yMouseAxis
270+ elif symbol == window .key .F :
271+ z15 = modifiers & window .key .MOD_SHIFT
272+ self .__levelRenderer .drawDistance = self .__levelRenderer .drawDistance + (- 1 if z15 else 1 ) & 3
267273 except Exception as e :
268274 print (traceback .format_exc ())
269275 self .setScreen (ErrorScreen ('Client error' , 'The game broke! [' + str (e ) + ']' ))
270276
271277 def on_key_release (self , symbol , modifiers ):
272278 try :
273- if self .guiScreen :
274- return
275-
276- self .player .setKey (symbol , False )
279+ if not self .guiScreen or (self .guiScreen and self .guiScreen .allowUserInput ):
280+ self .player .setKey (symbol , False )
277281 except Exception as e :
278282 print (traceback .format_exc ())
279283 self .setScreen (ErrorScreen ('Client error' , 'The game broke! [' + str (e ) + ']' ))
@@ -286,19 +290,15 @@ def on_text(self, text):
286290 return
287291
288292 if self .guiScreen :
289- self .guiScreen .updateEvents (char = text )
290- if self .guiScreen :
291- self .guiScreen .tick ()
293+ self .guiScreen .updateKeyboardEvents (char = text )
292294 except Exception as e :
293295 print (traceback .format_exc ())
294296 self .setScreen (ErrorScreen ('Client error' , 'The game broke! [' + str (e ) + ']' ))
295297
296298 def on_text_motion (self , motion ):
297299 try :
298300 if self .guiScreen :
299- self .guiScreen .updateEvents (motion = motion )
300- if self .guiScreen :
301- self .guiScreen .tick ()
301+ self .guiScreen .updateKeyboardEvents (motion = motion )
302302 except Exception as e :
303303 print (traceback .format_exc ())
304304 self .setScreen (ErrorScreen ('Client error' , 'The game broke! [' + str (e ) + ']' ))
@@ -339,9 +339,11 @@ def on_draw(self):
339339 self .__tick ()
340340
341341 self .__checkGlError ('Pre render' )
342- if not self .__active :
342+ if self . __displayActive and not self .__active :
343343 self .__pauseGame ()
344344
345+ self .__displayActive = self .__active
346+
345347 if not self .hideGui :
346348 if self .level :
347349 self .__render (self .__timer .a )
@@ -511,7 +513,7 @@ def __clickMouse(self):
511513 else :
512514 tile = tiles .tiles [self .level .getTile (x , y , z )]
513515 texture = self .player .inventory .getSelected ()
514- aabb = tiles .tiles [texture ].getAABB (x , y , z )
516+ aabb = tiles .tiles [texture ].getTileAABB (x , y , z )
515517 if (tile is None or tile == tiles .water or tile == tiles .calmWater or tile == tiles .lava or tile == tiles .calmLava ) and \
516518 (aabb is None or (False if self .player .bb .intersects (aabb ) else self .level .isFree (aabb ))):
517519 if self .__isMultiplayer ():
@@ -562,9 +564,7 @@ def __tick(self):
562564
563565 if self .guiScreen :
564566 self .__prevFrameTime = self .__ticksRan + 10000
565- self .guiScreen .updateEvents ()
566- if self .guiScreen :
567- self .guiScreen .tick ()
567+ self .guiScreen .tick ()
568568 else :
569569 if self .msh [window .mouse .LEFT ] and float (self .__ticksRan - self .__prevFrameTime ) >= self .__timer .ticksPerSecond / 4.0 and self .__mouseGrabbed :
570570 self .__clickMouse ()
@@ -765,6 +765,8 @@ def initGui(self):
765765
766766 def __setupFog (self ):
767767 gl .glFogfv (gl .GL_FOG_COLOR , self .__getBuffer (self .__fogColorRed , self .__fogColorGreen , self .__fogColorBlue , 1.0 ))
768+ gl .glNormal3f (0.0 , - 1.0 , 0.0 )
769+ gl .glColor4f (1.0 , 1.0 , 1.0 , 1.0 )
768770 currentTile = tiles .tiles [self .level .getTile (int (self .player .x ), int (self .player .y + 0.12 ), int (self .player .z ))]
769771 if currentTile and currentTile .getLiquidType () != Liquid .none :
770772 liquid = currentTile .getLiquidType ()
@@ -892,7 +894,7 @@ def addChatMessage(self, string):
892894 elif arg == '-mppass' :
893895 mpPass = sys .argv [i + 1 ]
894896
895- game = Minecraft (fullScreen , width = 854 , height = 480 , caption = 'Minecraft 0.0.20a_01 ' )
897+ game = Minecraft (fullScreen , width = 854 , height = 480 , caption = 'Minecraft 0.0.21a ' )
896898 game .user = User (name , 0 , mpPass )
897899 if server and port :
898900 game .setServer (server , int (port ))
0 commit comments