Skip to content

Instantly share code, notes, and snippets.

@spinningD20
Created February 14, 2017 01:18
Show Gist options
  • Save spinningD20/5f5b9b45171fe349ebe6ac8180b0a53a to your computer and use it in GitHub Desktop.
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).
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()
#: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