void CPHActivationShape::Create(const Fvector start_pos,const Fvector start_size,IPhysicsShellHolder* ref_obj,EType _type/*=etBox*/,u16 flags) { VERIFY(ref_obj); R_ASSERT(_valid( start_pos ) ); R_ASSERT( _valid( start_size ) ); m_body = dBodyCreate (0) ; dMass m; dMassSetSphere(&m,1.f,100000.f); dMassAdjust(&m,1.f); dBodySetMass(m_body,&m); switch(_type) { case etBox: m_geom = dCreateBox (0,start_size.x,start_size.y,start_size.z) ; break; case etSphere: m_geom = dCreateSphere (0,start_size.x); break; }; dGeomCreateUserData (m_geom) ; dGeomUserDataSetObjectContactCallback(m_geom,ActivateTestDepthCallback) ; dGeomUserDataSetPhysicsRefObject(m_geom,ref_obj) ; dGeomSetBody (m_geom,m_body) ; dBodySetPosition (m_body,start_pos.x,start_pos.y,start_pos.z) ; Island() .AddBody (m_body) ; dBodyEnable (m_body) ; m_safe_state .create(m_body) ; spatial_register () ; m_flags.set(flags,TRUE); }
BOOL CObject::net_Spawn (CSE_Abstract* data) { PositionStack.clear (); VERIFY (_valid(renderable.xform)); if (0==Visual() && pSettings->line_exist( cNameSect(), "visual" ) ) cNameVisual_set (pSettings->r_string( cNameSect(), "visual" ) ); if (0==collidable.model) { if (pSettings->line_exist(cNameSect(),"cform")) { //LPCSTR cf = pSettings->r_string (*cNameSect(), "cform"); VERIFY3 (*NameVisual, "Model isn't assigned for object, but cform requisted",*cName()); collidable.model = xr_new<CCF_Skeleton> (this); } } R_ASSERT(spatial.space); spatial_register(); if (register_schedule()) shedule_register (); // reinitialize flags //. Props.bActiveCounter = 0; processing_activate (); setDestroy (false); MakeMeCrow (); return TRUE ; }
void CPHShell::Activate(bool disable, bool not_set_bone_callbacks /*= false*/) { if(isActive())return; activate(disable); { IKinematics* K = m_pKinematics; if(not_set_bone_callbacks) m_pKinematics = 0; ELEMENT_I i=elements.begin(),e=elements.end(); for(;i!=e;++i)(*i)->Activate(mXFORM,disable); m_pKinematics = K; } { JOINT_I i=joints.begin(),e=joints.end(); for(;i!=e;++i) (*i)->Activate(); } if(PKinematics() && !not_set_bone_callbacks ) { SetCallbacks( ); } spatial_register(); m_flags.set(flActivating,TRUE); m_flags.set(flActive,TRUE); }
void CPHShell::Activate(const Fmatrix &transform,const Fvector& lin_vel,const Fvector& ang_vel,bool disable){ if(isActive())return; activate(disable); ELEMENT_I i; mXFORM.set(transform); for(i=elements.begin();elements.end() != i;++i){ (*i)->Activate(transform,lin_vel, ang_vel); } { JOINT_I i=joints.begin(),e=joints.end(); for(;i!=e;++i) (*i)->Activate(); } if(PKinematics()) { SetCallbacks( ); } spatial_register(); //bActive=true; //bActivating=true; m_flags.set(flActivating,TRUE); m_flags.set(flActive,TRUE); ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// //mXFORM.set(transform); //Activate(disable); //set_LinearVel(lin_vel); //set_AngularVel(ang_vel); }
void light::set_active (bool a) { if (a) { if (flags.bActive) return; flags.bActive = true; spatial_register (); spatial_move (); //Msg ("! L-register: %X",u32(this)); #ifdef DEBUG Fvector zero = {0,-1000,0} ; if (position.similar(zero)) { Msg ("- Uninitialized light position."); } #endif // DEBUG } else { if (!flags.bActive) return; flags.bActive = false; spatial_move (); spatial_unregister (); //Msg ("! L-unregister: %X",u32(this)); } }
void CParticlesObject::UpdateSpatial() { if(g_dedicated_server) return; // spatial (+ workaround occasional bug inside particle-system) if (_valid(renderable.visual->vis.sphere)) { Fvector P; float R; renderable.xform.transform_tiny (P,renderable.visual->vis.sphere.P); R = renderable.visual->vis.sphere.R; if (0==spatial.type) { // First 'valid' update - register spatial.type = STYPE_RENDERABLE; spatial.sphere.set (P,R); spatial_register (); } else { BOOL bMove = FALSE; if (!P.similar(spatial.sphere.P,EPS_L*10.f)) bMove = TRUE; if (!fsimilar(R,spatial.sphere.R,0.15f)) bMove = TRUE; if (bMove) { spatial.sphere.set (P, R); spatial_move (); } } } }
void CPHShell::PureActivate() { if(isActive()) return; //bActive=true; m_flags.set(flActive,TRUE); if(!CPHObject::is_active()) vis_update_deactivate(); EnableObject(0); m_object_in_root.identity(); spatial_register(); }
void CGlow::set_active (bool a) { if (a) { if (flags.bActive) return; flags.bActive = true; spatial_register (); } else { if (!flags.bActive) return; flags.bActive = false; spatial_unregister (); } }
void CPHShell::Activate(const Fmatrix &m0,float dt01,const Fmatrix &m2,bool disable){ if(isActive())return; activate(disable); // ELEMENT_I i; mXFORM.set(m0); //for(i=elements.begin();elements.end() != i;++i){ // (*i)->Activate(m0,dt01, m2, disable); //} { ELEMENT_I i=elements.begin(),e=elements.end(); for(;i!=e;++i)(*i)->Activate(mXFORM,disable); } { JOINT_I i=joints.begin(),e=joints.end(); for(;i!=e;++i) (*i)->Activate(); } Fmatrix m; { Fmatrix old_m = mXFORM;//+GetGlobalTransformDynamic update mXFORM; GetGlobalTransformDynamic (&m); mXFORM = old_m; } m.invert();m.mulA_43 (mXFORM); TransformPosition(m); if(PKinematics()) { SetCallbacks( ); } //bActive=true; //bActivating=true; m_flags.set(flActive,TRUE); m_flags.set(flActivating,TRUE); spatial_register(); /////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// //mXFORM.set(m0); //Activate(disable); Fvector lin_vel; lin_vel.sub(m2.c,m0.c); set_LinearVel(lin_vel); }
void CPHShell::RunSimulation(bool place_current_forms/*true*/) { if(!CPHObject::is_active()) vis_update_deactivate(); EnableObject(0); dSpaceSetCleanup(m_space,0); { ELEMENT_I i=elements.begin(),e=elements.end(); if(place_current_forms) for(;i!=e;++i)(*i)->RunSimulation(mXFORM); } { JOINT_I i=joints.begin(),e=joints.end(); for(;i!=e;++i) (*i)->RunSimulation(); } spatial_register(); }
CObject* CObject::H_SetParent (CObject* new_parent, bool just_before_destroy) { if (new_parent==Parent) return new_parent; CObject* old_parent = Parent; VERIFY2((new_parent==0)||(old_parent==0),"Before set parent - execute H_SetParent(0)"); // if (Parent) Parent->H_ChildRemove (this); if (0==old_parent) OnH_B_Chield (); // before attach else OnH_B_Independent (just_before_destroy); // before detach if (new_parent) spatial_unregister (); else spatial_register (); Parent = new_parent; if (0==old_parent) OnH_A_Chield (); // after attach else OnH_A_Independent (); // after detach // if (Parent) Parent->H_ChildAdd (this); MakeMeCrow (); return old_parent; }
void CPHShell::Activate(bool disable) { if(isActive())return; activate(disable); { ELEMENT_I i=elements.begin(),e=elements.end(); for(;i!=e;++i)(*i)->Activate(mXFORM,disable); } { JOINT_I i=joints.begin(),e=joints.end(); for(;i!=e;++i) (*i)->Activate(); } if(PKinematics()) { SetCallbacks(GetBonesCallback()); } spatial_register(); m_flags.set(flActivating,TRUE); m_flags.set(flActive,TRUE); }