vg_slewf( &world_static.focus_strength, active,
vg.time_frame_delta * (1.0f/0.5f) );
+ if( world_static.focused_entity == 0 )
+ return;
+
u32 type = mdl_entity_id_type( world_static.focused_entity ),
index = mdl_entity_id_id( world_static.focused_entity );
+
world_instance *world = world_current_instance();
- /* TODO: Table. */
- if( type == k_ent_skateshop )
- {
- ent_skateshop *skateshop = mdl_arritm( &world->ent_skateshop, index );
- ent_skateshop_preupdate( skateshop, active );
- }
- else if( type == k_ent_challenge )
- {
- ent_challenge *challenge = mdl_arritm( &world->ent_challenge, index );
- ent_challenge_preupdate( challenge, active );
- }
- else if( type == k_ent_route )
+ static void (*table[])( ent_focus_context *ctx ) =
{
- ent_route *route = mdl_arritm( &world->ent_route, index );
- ent_route_preupdate( route, active );
- }
- else if( type == k_ent_npc )
+ [ k_ent_skateshop ] = ent_skateshop_preupdate,
+ [ k_ent_challenge ] = ent_challenge_preupdate,
+ [ k_ent_route ] = ent_route_preupdate,
+ [ k_ent_npc ] = ent_npc_preupdate,
+ };
+
+ if( (type > vg_list_size(table)) || (table[type] == NULL) )
{
- ent_npc *npc = mdl_arritm( &world->ent_npc, index );
- ent_npc_preupdate( npc, active );
+ vg_fatal_error( "No pre-update method set for entity (%u#%u)\n",
+ type, index );
}
+
+ table[type]( &(ent_focus_context){
+ .world = world,
+ .index = index,
+ .active = active } );
}
/* additional renderings like text etc.. */