void CBlackGraviArtefact::UpdateCLChild() { VERIFY(!ph_world->Processing()); inherited::UpdateCLChild (); if (getVisible() && m_pPhysicsShell) { if (m_bStrike) { Fvector P; P.set(Position()); feel_touch_update(P,m_fRadius); GraviStrike(); CParticlesObject* pStaticPG; pStaticPG = CParticlesObject::Create(*m_sParticleName,TRUE); Fmatrix pos; pos.set(XFORM()); Fvector vel; //vel.sub(Position(),ps_Element(0).vPosition); //vel.div((Level().timeServer()-ps_Element(0).dwTime)/1000.f); vel.set(0,0,0); pStaticPG->UpdateParent(pos, vel); pStaticPG->Play(); m_bStrike = false; } }else if(H_Parent()) XFORM().set(H_Parent()->XFORM()); }
void CActor::PickupModeUpdate() { if(!m_bPickupMode) return; // kUSE key pressed if(!IsGameTypeSingle()) return; //подбирание объекта if( m_pObjectWeLookingAt && m_pObjectWeLookingAt->cast_inventory_item() && m_pObjectWeLookingAt->cast_inventory_item()->Useful() && m_pUsableObject && !m_pUsableObject->nonscript_usable() && !Level().m_feel_deny.is_object_denied(m_pObjectWeLookingAt) ) { m_pUsableObject->use(this); Game().SendPickUpEvent(ID(), m_pObjectWeLookingAt->ID()); } feel_touch_update (Position(), m_fPickupInfoRadius); CFrustum frustum; frustum.CreateFromMatrix(Device.mFullTransform, FRUSTUM_P_LRTB|FRUSTUM_P_FAR); for(xr_vector<CObject*>::iterator it = feel_touch.begin(); it != feel_touch.end(); it++) { if (CanPickItem(frustum, Device.vCameraPosition, *it)) PickupInfoDraw(*it); } }
void CActor::PickupModeUpdate() { if(!m_bPickupMode) return; if (GameID() != GAME_SINGLE) return; //подбирание объекта if(inventory().m_pTarget && inventory().m_pTarget->Useful() && m_pUsableObject && m_pUsableObject->nonscript_usable() && !Level().m_feel_deny.is_object_denied(smart_cast<CGameObject*>(inventory().m_pTarget)) ) { NET_Packet P; u_EventGen(P, GE_OWNERSHIP_TAKE, ID()); P.w_u16(inventory().m_pTarget->object().ID()); u_EventSend(P); } //. ????? GetNearest ????? feel_touch_update (Position(), /*inventory().GetTakeDist()*/m_fPickupInfoRadius); CFrustum frustum; frustum.CreateFromMatrix(Device.mFullTransform,FRUSTUM_P_LRTB|FRUSTUM_P_FAR); //. slow (ray-query test) for(xr_vector<CObject*>::iterator it = feel_touch.begin(); it != feel_touch.end(); it++) if (CanPickItem(frustum,Device.vCameraPosition,*it)) PickupInfoDraw(*it); }
void CBastArtefact::shedule_Update(u32 dt) { inherited::shedule_Update(dt); Fvector P; P.set(Position()); feel_touch_update(P,m_fRadius); }
void CTeamBaseZone::shedule_Update(u32 dt) { inherited::shedule_Update (dt); const Fsphere &s = CFORM()->getSphere(); Fvector P; XFORM().transform_tiny (P,s.P); feel_touch_update (P,s.R); }
void CPsyAura::schedule_update() { inherited::schedule_update(); if (is_active()){ feel_touch_update(m_object->Position(), m_radius); process_objects_in_aura(); } }
void CLevelChanger::shedule_Update(u32 dt) { inherited::shedule_Update (dt); const Fsphere &s = CFORM()->getSphere(); Fvector P; XFORM().transform_tiny (P,s.P); feel_touch_update (P,s.R); update_actor_invitation (); }
void CCustomDetector::shedule_Update(u32 dt) { inherited::shedule_Update (dt); if( !IsWorking() ) return; if( !H_Parent() ) return; Position().set(H_Parent()->Position()); Fvector P; P.set (H_Parent()->Position()); feel_touch_update (P,m_fRadius); UpdateNightVisionMode(); }
void CPda::shedule_Update(u32 dt) { inherited::shedule_Update (dt); if(!H_Parent()) return; Position().set (H_Parent()->Position()); if( IsOn() && Level().CurrentEntity() && Level().CurrentEntity()->ID()==H_Parent()->ID() ) { CEntityAlive* EA = smart_cast<CEntityAlive*>(H_Parent()); if(!EA || !EA->g_Alive()) { TurnOff(); return; } feel_touch_update(Position(),m_fRadius); UpdateActiveContacts (); } }
void CActor::shedule_Update (u32 DT) { setSVU(OnServer()); //установить режим показа HUD для текущего активного слота CHudItem* pHudItem = smart_cast<CHudItem*>(inventory().ActiveItem()); if(pHudItem && !pHudItem->object().getDestroy()) pHudItem->SetHUDmode(HUDview()); //обновление инвентаря UpdateInventoryOwner (DT); if (GameID() == GAME_SINGLE) GameTaskManager().UpdateTasks (); if(m_holder || !getEnabled() || !Ready()) { m_sDefaultObjAction = NULL; inherited::shedule_Update (DT); /* if (OnServer()) { Check_Weapon_ShowHideState(); }; */ return; } // clamp (DT,0u,100u); float dt = float(DT)/1000.f; // Check controls, create accel, prelimitary setup "mstate_real" //----------- for E3 ----------------------------- // if (Local() && (OnClient() || Level().CurrentEntity()==this)) if (Level().CurrentControlEntity() == this && (!Level().IsDemoPlay() || Level().IsServerDemo())) //------------------------------------------------ { g_cl_CheckControls (mstate_wishful,NET_SavedAccel,NET_Jump,dt); { /* if (mstate_real & mcJump) { NET_Packet P; u_EventGen(P, GE_ACTOR_JUMPING, ID()); P.w_sdir(NET_SavedAccel); P.w_float(NET_Jump); u_EventSend(P); } */ } g_cl_Orientate (mstate_real,dt); g_Orientate (mstate_real,dt); g_Physics (NET_SavedAccel,NET_Jump,dt); g_cl_ValidateMState (dt,mstate_wishful); g_SetAnimation (mstate_real); // Check for game-contacts Fvector C; float R; //m_PhysicMovementControl->GetBoundingSphere (C,R); Center(C); R=Radius(); feel_touch_update (C,R); // Dropping if (b_DropActivated) { f_DropPower += dt*0.1f; clamp (f_DropPower,0.f,1.f); } else { f_DropPower = 0.f; } if (!Level().IsDemoPlay()) { //----------------------------------------------------- mstate_wishful &=~mcAccel; mstate_wishful &=~mcLStrafe; mstate_wishful &=~mcRStrafe; mstate_wishful &=~mcLLookout; mstate_wishful &=~mcRLookout; mstate_wishful &=~mcFwd; mstate_wishful &=~mcBack; extern bool g_bAutoClearCrouch; if (g_bAutoClearCrouch) mstate_wishful &=~mcCrouch; //----------------------------------------------------- } } else { make_Interpolation(); if (NET.size()) { // NET_SavedAccel = NET_Last.p_accel; // mstate_real = mstate_wishful = NET_Last.mstate; g_sv_Orientate (mstate_real,dt ); g_Orientate (mstate_real,dt ); g_Physics (NET_SavedAccel,NET_Jump,dt ); if (!m_bInInterpolation) g_cl_ValidateMState (dt,mstate_wishful); g_SetAnimation (mstate_real); if (NET_Last.mstate & mcCrouch) { if (isActorAccelerated(mstate_real, IsZoomAimingMode())) character_physics_support()->movement()->ActivateBox(1, true); else character_physics_support()->movement()->ActivateBox(2, true); } else character_physics_support()->movement()->ActivateBox(0, true); } mstate_old = mstate_real; } if (this == Level().CurrentViewEntity()) { UpdateMotionIcon (mstate_real); }; NET_Jump = 0; inherited::shedule_Update (DT); //эффектор включаемый при ходьбе if (!pCamBobbing) { pCamBobbing = xr_new<CEffectorBobbing> (); Cameras().AddCamEffector (pCamBobbing); } pCamBobbing->SetState (mstate_real, conditions().IsLimping(), IsZoomAimingMode()); //звук тяжелого дыхания при уталости и хромании if(this==Level().CurrentControlEntity() && !g_pGamePersistent->bDedicatedServer ) { if(conditions().IsLimping() && g_Alive()){ if(!m_HeavyBreathSnd._feedback()){ m_HeavyBreathSnd.play_at_pos(this, Fvector().set(0,ACTOR_HEIGHT,0), sm_Looped | sm_2D); }else{ m_HeavyBreathSnd.set_position(Fvector().set(0,ACTOR_HEIGHT,0)); } }else if(m_HeavyBreathSnd._feedback()){ m_HeavyBreathSnd.stop (); } float bs = conditions().BleedingSpeed(); if(bs>0.6f) { Fvector snd_pos; snd_pos.set(0,ACTOR_HEIGHT,0); if(!m_BloodSnd._feedback()) m_BloodSnd.play_at_pos(this, snd_pos, sm_Looped | sm_2D); else m_BloodSnd.set_position(snd_pos); float v = bs+0.25f; m_BloodSnd.set_volume (v); }else{ if(m_BloodSnd._feedback()) m_BloodSnd.stop(); } } //если в режиме HUD, то сама модель актера не рисуется if(!character_physics_support()->IsRemoved()) setVisible (!HUDview ()); //что актер видит перед собой collide::rq_result& RQ = HUD().GetCurrentRayQuery(); if(!input_external_handler_installed() && RQ.O && RQ.range<inventory().GetTakeDist()) { m_pObjectWeLookingAt = smart_cast<CGameObject*>(RQ.O); CGameObject *game_object = smart_cast<CGameObject*>(RQ.O); m_pUsableObject = smart_cast<CUsableScriptObject*>(game_object); m_pInvBoxWeLookingAt = smart_cast<CInventoryBox*>(game_object); inventory().m_pTarget = smart_cast<PIItem>(game_object); m_pPersonWeLookingAt = smart_cast<CInventoryOwner*>(game_object); m_pVehicleWeLookingAt = smart_cast<CHolderCustom*>(game_object); CEntityAlive* pEntityAlive = smart_cast<CEntityAlive*>(game_object); if (GameID() == GAME_SINGLE ) { if (m_pUsableObject && m_pUsableObject->tip_text()) { m_sDefaultObjAction = CStringTable().translate( m_pUsableObject->tip_text() ); } else { if (m_pPersonWeLookingAt && pEntityAlive->g_Alive()) m_sDefaultObjAction = m_sCharacterUseAction; else if (pEntityAlive && !pEntityAlive->g_Alive()) { bool b_allow_drag = !!pSettings->line_exist("ph_capture_visuals",pEntityAlive->cNameVisual()); if(b_allow_drag) m_sDefaultObjAction = m_sDeadCharacterUseOrDragAction; else m_sDefaultObjAction = m_sDeadCharacterUseAction; }else if (m_pVehicleWeLookingAt) m_sDefaultObjAction = m_sCarCharacterUseAction; else if (inventory().m_pTarget && inventory().m_pTarget->CanTake() ) m_sDefaultObjAction = m_sInventoryItemUseAction; //. else if (m_pInvBoxWeLookingAt) //. m_sDefaultObjAction = m_sInventoryBoxUseAction; else m_sDefaultObjAction = NULL; } } } else { inventory().m_pTarget = NULL; m_pPersonWeLookingAt = NULL; m_sDefaultObjAction = NULL; m_pUsableObject = NULL; m_pObjectWeLookingAt = NULL; m_pVehicleWeLookingAt = NULL; m_pInvBoxWeLookingAt = NULL; } // UpdateSleep (); //для свойст артефактов, находящихся на поясе UpdateArtefactsOnBelt (); m_pPhysics_support->in_shedule_Update (DT); Check_for_AutoPickUp (); };
// called as usual void CCustomZone::shedule_Update(u32 dt) { m_zone_flags.set(eZoneIsActive, FALSE); if (IsEnabled()) { const Fsphere& s = CFORM()->getSphere(); Fvector P; XFORM().transform_tiny (P,s.P); // update feel_touch_update (P,s.R); //пройтись по всем объектам в зоне //и проверить их состояние for(OBJECT_INFO_VEC_IT it = m_ObjectInfoMap.begin(); m_ObjectInfoMap.end() != it; ++it) { CGameObject* pObject = (*it).object; if (!pObject) continue; CEntityAlive* pEntityAlive = smart_cast<CEntityAlive*>(pObject); SZoneObjectInfo& info = (*it); info.dw_time_in_zone += dt; if((!info.small_object && m_iDisableHitTime != -1 && (int)info.dw_time_in_zone > m_iDisableHitTime) || (info.small_object && m_iDisableHitTimeSmall != -1 && (int)info.dw_time_in_zone > m_iDisableHitTimeSmall)) { if(!pEntityAlive || !pEntityAlive->g_Alive()) info.zone_ignore = true; } if(m_iDisableIdleTime != -1 && (int)info.dw_time_in_zone > m_iDisableIdleTime) { if(!pEntityAlive || !pEntityAlive->g_Alive()) StopObjectIdleParticles( pObject ); } //если есть хотя бы один не дисабленый объект, то //зона считается активной if(info.zone_ignore == false) m_zone_flags.set(eZoneIsActive,TRUE); } if(eZoneStateIdle == m_eZoneState) CheckForAwaking(); inherited::shedule_Update(dt); // check "fast-mode" border float cam_distance = Device.vCameraPosition.distance_to(P)-s.R; if (cam_distance>FASTMODE_DISTANCE && !m_zone_flags.test(eAlwaysFastmode) ) o_switch_2_slow (); else o_switch_2_fast (); if (!m_zone_flags.test(eFastMode)) UpdateWorkload (dt); }; UpdateOnOffState (); if( !IsGameTypeSingle() && Local() ) { if(Device.dwTimeGlobal > m_ttl) DestroyObject (); } }