Created
February 14, 2017 01:18
-
-
Save spinningD20/5f5b9b45171fe349ebe6ac8180b0a53a to your computer and use it in GitHub Desktop.
this is the example 14_tmx_loader modified to try to unload the loaded map and then loading another map (same file).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from kivy.app import App | |
from kivy.core.window import Window | |
from kivy.clock import Clock | |
from kivy.uix.widget import Widget | |
from kivy.properties import StringProperty | |
from kivent_core.systems.gamesystem import GameSystem | |
from kivent_core.managers.resource_managers import texture_manager | |
from os.path import dirname, join, abspath | |
from kivent_maps import map_utils | |
from kivent_maps.map_system import MapSystem | |
Window.size = (640, 640) | |
def get_asset_path(asset, asset_loc): | |
return join(dirname(dirname(abspath(__file__))), asset_loc, asset) | |
class Game(Widget): | |
def __init__(self, **kwargs): | |
super(Game, self).__init__(**kwargs) | |
self.do_map_init() | |
# Init gameworld with all the systems | |
self.gameworld.init_gameworld( | |
['position', 'color', 'camera1', 'tile_map'] | |
+ self.map_layers | |
+ self.map_layer_animators, | |
callback=self.init_game) | |
def do_map_init(self): | |
# Args required for Renderer init | |
map_render_args = { | |
'zones': ['general'], | |
'frame_count': 2, | |
'gameview': 'camera1', | |
'shader_source': get_asset_path('positionshader.glsl', 'assets/glsl') | |
} | |
# Args for AnimationSystem init | |
map_anim_args = { | |
'zones': ['general'], | |
} | |
# Args for PolyRenderer init | |
map_poly_args = { | |
'zones': ['general'], | |
'frame_count': 2, | |
'gameview': 'camera1', | |
'shader_source': 'poscolorshader.glsl' | |
} | |
# Initialise systems for 4 map layers and get the renderer and | |
# animator names | |
self.map_layers, self.map_layer_animators = \ | |
map_utils.load_map_systems(4, self.gameworld, | |
map_render_args, map_anim_args, map_poly_args) | |
# Set the camera1 render order to render lower layers first | |
self.camera1.render_system_order = reversed(self.map_layers) | |
def init_game(self): | |
self.setup_states() | |
self.setup_tile_map() | |
self.set_state() | |
def setup_tile_map(self): | |
# The map file to load | |
# Change to hexagonal/isometric/isometric_staggered.tmx for other maps | |
filename = get_asset_path('orthogonal.tmx','assets/maps') | |
map_manager = self.gameworld.managers['map_manager'] | |
# Load TMX data and create a TileMap from it | |
map_name = map_utils.parse_tmx(filename, self.gameworld) | |
# Initialise each tile as an entity in the gameworld | |
map_utils.init_entities_from_map(map_manager.maps[map_name], | |
self.gameworld.init_entity) | |
self.tilemap = map_manager.maps[map_name] | |
def setup_states(self): | |
# We want renderers to be added and unpaused | |
# and animators to be unpaused | |
self.gameworld.add_state(state_name='main', | |
systems_added=self.map_layers, | |
systems_unpaused=self.map_layer_animators + self.map_layers) | |
self.gameworld.add_state(state_name='loading', | |
systems_removed=self.map_layer_animators + self.map_layers) | |
def set_state(self): | |
self.gameworld.state = 'main' | |
def screen_touched(self, event): | |
self.gameworld.state = 'loading' | |
for system in self.map_layers + self.map_layer_animators: | |
print('removing', self.gameworld.system_manager[system]) | |
self.gameworld.delete_system(system) | |
# self.gameworld.clear_entities() | |
self.do_map_init() | |
self.setup_tile_map() | |
class DebugPanel(Widget): | |
fps = StringProperty(None) | |
def __init__(self, **kwargs): | |
super(DebugPanel, self).__init__(**kwargs) | |
Clock.schedule_once(self.update_fps) | |
def update_fps(self,dt): | |
self.fps = str(int(Clock.get_fps())) | |
Clock.schedule_once(self.update_fps, .05) | |
class YourAppNameApp(App): | |
pass | |
if __name__ == '__main__': | |
YourAppNameApp().run() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#:kivy 1.9.0 | |
#:import get_asset_path __main__.get_asset_path | |
#:set map_layers ['map_layer%d' % i for i in range(4)] | |
Game: | |
on_touch_down: self.screen_touched(args[1]) | |
<Game>: | |
gameworld: gameworld | |
camera1: camera1 | |
GameWorld: | |
id: gameworld | |
gamescreenmanager: gamescreenmanager | |
size_of_gameworld: 250*1024 | |
system_count: 4 | |
zones: {'general': 100000} | |
PositionSystem2D: | |
system_id: 'position' | |
gameworld: gameworld | |
zones: ['general'] | |
ColorSystem: | |
system_id: 'color' | |
gameworld: gameworld | |
zones: ['general'] | |
MapSystem: | |
system_id: 'tile_map' | |
id: tile_map | |
gameworld: gameworld | |
zones: ['general'] | |
GameView: | |
system_id: 'camera1' | |
gameworld: gameworld | |
size: root.size | |
window_size: root.size | |
pos: root.pos | |
do_scroll_lock: False | |
id: camera1 | |
updateable: True | |
GameScreenManager: | |
id: gamescreenmanager | |
size: root.size | |
pos: root.pos | |
gameworld: gameworld | |
<GameScreenManager>: | |
MainScreen: | |
id: main_screen | |
<MainScreen@GameScreen>: | |
name: 'main' | |
FloatLayout: | |
DebugPanel: | |
size_hint: (.2, .1) | |
pos_hint: {'x': .225, 'y': .025} | |
<DebugPanel>: | |
Label: | |
pos: root.pos | |
size: root.size | |
font_size: root.size[1]*.5 | |
halign: 'center' | |
valign: 'middle' | |
color: (1,1,1,1) | |
text: 'FPS: ' + root.fps if root.fps != None else 'FPS:' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment