Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions modules/core/kivent_core/gameworld.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ class GameWorld(Widget):
super(GameWorld, self).__init__(**kwargs)
self.states = {}
self.state_callbacks = {}
self.before_update_callbacks = []
self.managers = {}
self.entity_manager = None
self.entities = None
Expand Down Expand Up @@ -496,6 +497,9 @@ class GameWorld(Widget):
entity.load_order = []
entity_manager.remove_entity(entity_id)

def schedule_once(self, fn):
self.before_update_callbacks.append(fn)

def update(self, dt):
'''
Args:
Expand All @@ -510,6 +514,11 @@ class GameWorld(Widget):
cdef SystemManager system_manager = self.system_manager
cdef list systems = system_manager.systems
cdef GameSystem system

for f in self.before_update_callbacks:
f()
self.before_update_callbacks = []

for system_index in system_manager._update_order:
system = systems[system_index]
if system.updateable and not system.paused:
Expand Down
53 changes: 29 additions & 24 deletions modules/core/kivent_core/systems/renderers.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -144,31 +144,36 @@ cdef class RenderComponent(MemComponent):
component_data.texkey)

def __set__(self, str value):
def _real_set(str value):
cdef RenderStruct* component_data = <RenderStruct*>self.pointer
cdef unsigned int groupkey = (
texture_manager.get_groupkey_from_texkey(component_data.texkey))
cdef unsigned int texkey = texture_manager.get_texkey_from_name(
value)
cdef float u0, v0, u1, v1
cdef list uv_list = texture_manager.get_uvs(texkey)
u0 = uv_list[0]
v0 = uv_list[1]
u1 = uv_list[2]
v1 = uv_list[3]
same_batch = texture_manager.get_texkey_in_group(texkey, groupkey)
cdef VertexModel model = <VertexModel>component_data.model
cdef Renderer renderer = <Renderer>component_data.renderer
if not same_batch:
renderer._unbatch_entity(component_data.entity_id,
component_data)
component_data.texkey = texkey
model[0].uvs = [u0, v0]
model[1].uvs = [u0, v1]
model[2].uvs = [u1, v1]
model[3].uvs = [u1, v0]
if not same_batch:
renderer._batch_entity(component_data.entity_id,
component_data)

cdef RenderStruct* component_data = <RenderStruct*>self.pointer
cdef unsigned int groupkey = (
texture_manager.get_groupkey_from_texkey(component_data.texkey))
cdef unsigned int texkey = texture_manager.get_texkey_from_name(
value)
cdef float u0, v0, u1, v1
cdef list uv_list = texture_manager.get_uvs(texkey)
u0 = uv_list[0]
v0 = uv_list[1]
u1 = uv_list[2]
v1 = uv_list[3]
same_batch = texture_manager.get_texkey_in_group(texkey, groupkey)
cdef VertexModel model = <VertexModel>component_data.model
cdef Renderer renderer = <Renderer>component_data.renderer
if not same_batch:
renderer._unbatch_entity(component_data.entity_id,
component_data)
component_data.texkey = texkey
model[0].uvs = [u0, v0]
model[1].uvs = [u0, v1]
model[2].uvs = [u1, v1]
model[3].uvs = [u1, v0]
if not same_batch:
renderer._batch_entity(component_data.entity_id,
component_data)
renderer.gameworld.schedule_once(partial(_real_set, value))


property render:
Expand Down Expand Up @@ -1341,4 +1346,4 @@ Factory.register('RotateColorRenderer', cls=RotateColorRenderer)
Factory.register('ColorRenderer', cls=ColorRenderer)
Factory.register('PolyRenderer', cls=PolyRenderer)
Factory.register('ColorPolyRenderer', cls=ColorPolyRenderer)
Factory.register('ScaledPolyRenderer', cls=ScaledPolyRenderer)
Factory.register('ScaledPolyRenderer', cls=ScaledPolyRenderer)