#}
elif obj_data.tipo == 'nonlocal':
#{
- gate.target = _af_pack_string(obj_data.nonlocal_world)
+ if obj_data.nonlocal_world != '':
+ gate.target = _af_pack_string(obj_data.nonlocal_world)
gate.key = _af_pack_string(obj_data.key)
flags |= 0x0002
#}
enum prop_flag
{
k_prop_flag_hidden = 0x1,
- k_prop_flag_spinning = 0x2
+ k_prop_flag_spinning = 0x2,
+ k_prop_flag_collider = 0x4
};
struct ent_prop {
* Collision detection
*/
- len = rb_capsule__scene( mtx, &w->collider, NULL,
- world->geo_bh, manifold, 0 );
+ len = rb_capsule__scene( mtx, &w->collider, NULL, world->geo_bh, manifold, 0 );
+
+ for( u32 i=0; i<af_arrcount( &world->ent_prop ); i ++ )
+ {
+ ent_prop *prop = af_arritm( &world->ent_prop, i );
+ if( prop->flags & k_prop_flag_collider )
+ {
+ m4x3f mmdl, mmdl_inv;
+ q_m3x3( prop->transform.q, mmdl );
+ v3_copy( prop->transform.co, mmdl[3] );
+ m4x3_invert_affine( mmdl, mmdl_inv );
+
+ boxf box;
+ v3_negate( prop->transform.s, box[0] );
+ v3_copy( prop->transform.s, box[1] );
+ len += rb_capsule__box( mtx, &w->collider, mmdl, mmdl_inv, box, manifold+len );
+ }
+ }
+
player_walk_custom_filter( world, manifold, len, 0.01f );
len = rb_manifold_apply_filtered( manifold, len );