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 light::set_position (const Fvector& P) { float eps = EPS_L; //_max (range*0.001f,EPS_L); if (position.similar(P,eps))return ; position.set (P); spatial_move (); }
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 CObject::spatial_update (float eps_P, float eps_R) { // BOOL bUpdate=FALSE; if (PositionStack.empty()) { // Empty bUpdate = TRUE; PositionStack.push_back (SavedPosition()); PositionStack.back().dwTime = Device.dwTimeGlobal; PositionStack.back().vPosition = Position(); } else { if (PositionStack.back().vPosition.similar(Position(),eps_P)) { // Just update time PositionStack.back().dwTime = Device.dwTimeGlobal; } else { // Register _new_ record bUpdate = TRUE; if (PositionStack.size()<4) { PositionStack.push_back (SavedPosition()); } else { PositionStack[0] = PositionStack[1]; PositionStack[1] = PositionStack[2]; PositionStack[2] = PositionStack[3]; } PositionStack.back().dwTime = Device.dwTimeGlobal; PositionStack.back().vPosition = Position(); } } if (bUpdate) { spatial_move (); } else { if (spatial.node_ptr) { // Object registered! if (!fsimilar(Radius(),spatial.sphere.R,eps_R)) spatial_move(); else { Fvector C; Center (C); if (!C.similar(spatial.sphere.P,eps_P)) spatial_move(); } // else nothing to do :_) } } }
void CPhysicObject::PH_A_CrPr () { if (m_just_after_spawn) { VERIFY(Visual()); IKinematics *K = Visual()->dcast_PKinematics(); VERIFY( K ); if (!PPhysicsShell()) { return; } if(!PPhysicsShell()->isFullActive()) { K->CalculateBones_Invalidate(); K->CalculateBones(TRUE); } PPhysicsShell()->GetGlobalTransformDynamic(&XFORM()); K->CalculateBones_Invalidate(); K->CalculateBones(TRUE); #if 0 Fbox bb= BoundingBox (); DBG_OpenCashedDraw (); Fvector c,r,p; bb.get_CD(c,r ); XFORM().transform_tiny(p,c); DBG_DrawAABB( p, r,D3DCOLOR_XRGB(255, 0, 0)); //PPhysicsShell()->XFORM().transform_tiny(c); Fmatrix mm; PPhysicsShell()->GetGlobalTransformDynamic(&mm); mm.transform_tiny(p,c); DBG_DrawAABB( p, r,D3DCOLOR_XRGB(0, 255, 0)); DBG_ClosedCashedDraw (50000); #endif spatial_move(); m_just_after_spawn = false; VERIFY(!OnServer()); PPhysicsShell()->get_ElementByStoreOrder(0)->Fix(); PPhysicsShell()->SetIgnoreStatic (); //PPhysicsShell()->SetIgnoreDynamic (); //PPhysicsShell()->DisableCollision(); } //CalculateInterpolationParams() };
bool CPHObject::step_single(dReal step) { CollideDynamics (); bool ret=!m_island.IsObjGroun (); if(ret) { //PhTune (step); IslandStep (step); reinit_single (); //PhDataUpdate (step); spatial_move (); CollideDynamics (); ret =!m_island.IsObjGroun (); } reinit_single (); return ret ; }
void light::set_rotation (const Fvector& D, const Fvector& R) { Fvector old_D = direction; direction.normalize (D); right.normalize(R); if (!fsimilar(1.f, old_D.dotproduct(D))) spatial_move (); }
void light::set_cone (float angle) { if (fsimilar(cone,angle)) return ; VERIFY (cone < deg2rad(121.f)); // 120 is hard limit for lights cone = angle; spatial_move (); }
void light::set_range (float R) { float eps = _max (range*0.1f,EPS_L); if (fsimilar(range,R,eps)) return ; range = R ; spatial_move (); };
void CGlow::set_radius (float R) { if (fsimilar(radius,R)) return; radius = R; spatial_move (); };
void CGlow::set_position (const Fvector& P) { if (position.similar(P)) return; position.set (P); spatial_move (); };