def __setstate__(self, dd): # Update the object's dict self.__dict__.update(dd) # Then, re-initialize the method handle and the object's execution thread from src.controller import ScriptEngine self.callback = ScriptEngine.get(self.methodname) self.map = None self._conclude()
def __init__(self, name, rect, callback, m, _1=0, _2=0): # Init attributes self.name = name self.rect = rect self.methodname = callback self.map = m # Get the actual method handle from the string name from src.controller import ScriptEngine self.callback = ScriptEngine.get(callback) # Init the execution thread self._conclude()
def handle(self, event): # TickEvent: Update player sprites, handle collision detection, # check for player-script collision, process other logic... if isinstance(event, TickEvent): # Update entities self.gh.player.update() self.gh.shadow.update(event.object) if self.gh.player.moving: if (self.gh.currentmap is not None): # Player-Map collision detection coll_result = self.gh.currentmap.isWalkable(self.gh.player, self.gh.player.facing) self.gh.player.move(coll_result, event.object) # Player-Script collision detection script_result = self.gh.currentmap.checkForScriptToggle(self.gh.player) if script_result is not None: ScriptEngine.run(script_result) # FullscreenToggleRequestEvent elif isinstance(event, FullscreenToggleRequestEvent): # Order the Game menu to check if that's possible self.gh.fullscreenToggleRequest() # QuitEvent: Shutdown the Engine objects (killing running interaction threads) elif isinstance(event, QuitEvent): # Shutdown the engine objects ScriptEngine.shutdown() ObjectEngine.shutdown() # MouseMotionEvent: Order the map to check if the moved mouse has highlighted a clickable object elif isinstance(event, MouseMotionEvent): # Check for enabled highlighting if get_property(MOUSE_HIGHLIGHT_ENABLED): # Check for object highlighting obj = self.gh.currentmap.checkForObjectHighlight(event.object) self.gh.evManager.post(ObjectHighlightedEvent(obj)) # MovementRequestEvent: Order the player to start moving and point him in the desired direction elif isinstance(event, MovementRequestEvent): if get_property(PLAYER_MOVEMENT_ENABLED): # Player has started moving self.gh.player.startMoving() self.gh.player.setDirection(event.object) # MovementDoneEvent: Order the player to stop moving elif isinstance(event, MovementDoneEvent): self.gh.player.stopMoving() # ObjectInteractionEvent: Order the Object Engine to interact with the event's object elif isinstance(event, ObjectInteractionEvent): ObjectEngine.interact(event.object) # InventoryToggleEvent: Order the opening of the inventory dialog elif isinstance(event, InventoryToggleEvent): # Open inventory if no script or object execution is running right now if get_property(INVENTORY_OPEN_ENABLED): # Stop the player self.gh.player.stopMoving() # Play a sound for inventory toggling GlobalServices.getAudioDevice().play(SOUND, "journal_open", VOLUME_SOUND) # Change game state self.gh.state = STATE_GAME_INVENTORY self.gh.evManager.post(GameStateChangedEvent(self.gh.state)) elif isinstance(event, GameMenuToggleEvent): if get_property(GAME_MENU_OPEN_ENABLED): # Open game menu! First, stop the player self.gh.player.stopMoving() # Change game state self.gh.state = STATE_GAME_MENU self.gh.evManager.post(GameStateChangedEvent(self.gh.state)) # SaveEvent: Initialize the save process elif isinstance(event, SaveEvent): if get_property(SAVE_ENABLED): # Save the state (the True parameter orders the TextRenderer to display a message as well) self.gh.save(True) # MapChangeRequestEvent: When the user has triggered a teleport to another map, # the ScriptEngine posts this event to the EventManager elif isinstance(event, MapChangeRequestEvent): # Stop moving the player self.gh.player.stopMoving() # Unpack event information map_object = event.object[0] destination = event.object[1] # Init loading with the map and save the dest position self.gh.teleport_destination = destination self.gh.initMapLoading(map_object) # MainMenuSwitchRequestEvent: After the game is finished elif isinstance(event, MainMenuSwitchRequestEvent): self.gh.switchToMainMenu()
def fullscreenToggleRequest(self): if not (ScriptEngine.isRunning() and ObjectEngine.isRunning()): self.evManager.post(FullscreenToggleEvent())