void Physics::Serialize(Properties* prop) { Subsystem::Serialize(prop); vec3 grav {0.0f}; if(prop->mode == Properties::Mode::Output) grav = GetGravity(); prop->Value("gravity", &grav); if(prop->mode == Properties::Mode::Input) SetGravity(grav); auto add_pt_func = [](GravPoint& gp, Properties* prop) { prop->Value("name", &gp.name); prop->Value("force", &gp.force); }; prop->ValueArray<GravPoint>("gravityPoint", gravityPoints, add_pt_func); /* Properties* gravPts = prop->Child("gravityPoints", ""); if(gravPts) { for(auto& pgpt : gravPts->children) { GravPoint* gpt = new GravPoint; pgpt->Value("name", gpt->name); pgpt->Value("force", gpt->force); gravityPoints.push_back(*gpt); } }*/ }
void CGrenadePathfollower::Spawn( void ) { Precache( ); // ------------------------- // Inert when first spawned // ------------------------- SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_SOLID ); SetMoveType( MOVETYPE_NONE ); AddFlag( FL_OBJECT ); // So can be shot down AddEffects( EF_NODRAW ); UTIL_SetSize(this, Vector(0, 0, 0), Vector(0, 0, 0)); m_flDamage = sk_dmg_pathfollower_grenade.GetFloat(); m_DmgRadius = sk_pathfollower_grenade_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 200; SetGravity( 0.00001 ); SetFriction( 0.8 ); SetSequence( 1 ); }
//----------------------------------------------------------------------------- // Purpose: Spawn //----------------------------------------------------------------------------- void CGrappleHook::Spawn( void ) { Precache( ); SetModel( HOOK_MODEL ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); UTIL_SetSize( this, -Vector(1,1,1), Vector(1,1,1) ); SetSolid( SOLID_BBOX ); SetGravity( 0.05f ); // The rock is invisible, the crossbow bolt is the visual representation AddEffects( EF_NODRAW ); // Make sure we're updated if we're underwater UpdateWaterState(); SetTouch( &CGrappleHook::HookTouch ); SetThink( &CGrappleHook::FlyThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_pSpring = NULL; m_fSpringLength = 0.0f; m_bPlayerWasStanding = false; }
cPawn::cPawn(eEntityType a_EntityType, double a_Width, double a_Height) : super(a_EntityType, 0, 0, 0, a_Width, a_Height) , m_EntityEffects(tEffectMap()) { SetGravity(-32.0f); SetAirDrag(0.02f); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CDODBaseRocket::Spawn( void ) { Precache(); SetSolid( SOLID_BBOX ); Assert( GetModel() ); //derived classes must have set model UTIL_SetSize( this, -Vector(2,2,2), Vector(2,2,2) ); SetTouch( &CDODBaseRocket::RocketTouch ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); m_takedamage = DAMAGE_NO; SetGravity( 0.1 ); SetDamage( mp_rocketdamage.GetFloat() ); AddFlag( FL_OBJECT ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); EmitSound( "Weapon_Bazooka.Shoot" ); // Smoke trail. CreateSmokeTrail(); SetThink( &CDODBaseRocket::FlyThink ); SetNextThink( gpGlobals->curtime ); }
cChicken::cChicken(void) : super("Chicken", mtChicken, "entity.chicken.hurt", "entity.chicken.death", 0.4, 0.7), m_EggDropTimer(0) { SetGravity(-2.0f); SetAirDrag(0.0f); }
cTNTEntity::cTNTEntity(Vector3d a_Pos, int a_FuseTicks) : super(etTNT, a_Pos.x, a_Pos.y, a_Pos.z, 0.98, 0.98), m_FuseTicks(a_FuseTicks) { SetGravity(-16.0f); SetAirDrag(0.4f); }
void CGrenadeMP5::Spawn( void ) { Precache( ); SetSolid( SOLID_BBOX ); SetMoveType( MOVETYPE_FLY ); AddFlag( FL_GRENADE ); SetModel( "models/grenade.mdl" ); //UTIL_SetSize(this, Vector(-3, -3, -3), Vector(3, 3, 3)); UTIL_SetSize(this, Vector(0, 0, 0), Vector(0, 0, 0)); SetUse( &CBaseGrenade::DetonateUse ); SetTouch( &CGrenadeMP5::GrenadeMP5Touch ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_plr_dmg_mp5_grenade.GetFloat(); m_DmgRadius = sk_mp5_grenade_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_bIsLive = true; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( 400 ) ); // use a lower gravity for grenades to make them easier to see SetFriction( 0.8 ); SetSequence( 0 ); m_fSpawnTime = gpGlobals->curtime; }
void CBaseGrenadeContact::Spawn( void ) { // point sized, solid, bouncing SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetSolid( SOLID_BBOX ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); SetModel( "models/weapons/w_grenade.mdl" ); // BUG: wrong model UTIL_SetSize(this, vec3_origin, vec3_origin); // contact grenades arc lower SetGravity( UTIL_ScaleForGravity( 400 ) ); // use a lower gravity for grenades to make them easier to see QAngle angles; VectorAngles(GetAbsVelocity(), angles); SetLocalAngles( angles ); // make NPCs afaid of it while in the air SetThink( &CBaseGrenadeContact::DangerSoundThink ); SetNextThink( gpGlobals->curtime ); // Tumble in air QAngle vecAngVelocity( random->RandomFloat ( -100, -500 ), 0, 0 ); SetLocalAngularVelocity( vecAngVelocity ); // Explode on contact SetTouch( &CBaseGrenadeContact::ExplodeTouch ); m_flDamage = 100; // BOXBOX was sk_plr_dmg_grenade.GetFloat(); // Allow player to blow this puppy up in the air m_takedamage = DAMAGE_YES; m_iszBounceSound = NULL_STRING; }
void CASW_Flamer_Projectile::Spawn( void ) { Precache( ); //SetModel( PELLET_MODEL ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); m_flDamage = sk_plr_dmg_asw_f.GetFloat(); m_takedamage = DAMAGE_NO; SetSize( -Vector(1,1,1), Vector(1,1,1) ); SetSolid( SOLID_BBOX ); SetGravity( 0.05f ); SetCollisionGroup( ASW_COLLISION_GROUP_FLAMER_PELLETS ); // ASW_COLLISION_GROUP_SHOTGUN_PELLET SetTouch( &CASW_Flamer_Projectile::ProjectileTouch ); CreateEffects(); m_vecOldPos = vec3_origin; m_fDieTime = gpGlobals->curtime + 1.0f; // will need to change size scale algos below if this changes SetThink( &CASW_Flamer_Projectile::CollideThink ); SetNextThink( gpGlobals->curtime ); // flamer projectile only lasts 1 second //SetThink( &CASW_Flamer_Projectile::SUB_Remove ); //SetNextThink( gpGlobals->curtime + 1.0f ); }
void CShower::Spawn( void ) { Vector vecForward; AngleVectors( GetLocalAngles(), &vecForward ); Vector vecNewVelocity; vecNewVelocity = random->RandomFloat( 200, 300 ) * vecForward; vecNewVelocity.x += random->RandomFloat(-100.f,100.f); vecNewVelocity.y += random->RandomFloat(-100.f,100.f); if ( vecNewVelocity.z >= 0 ) vecNewVelocity.z += 200; else vecNewVelocity.z -= 200; SetAbsVelocity( vecNewVelocity ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetGravity( UTIL_ScaleForGravity( 400 ) ); // fall a bit more slowly than normal SetNextThink( gpGlobals->curtime + 0.1f ); SetSolid( SOLID_NONE ); UTIL_SetSize(this, vec3_origin, vec3_origin ); AddEffects( EF_NODRAW ); m_flSpeed = random->RandomFloat( 0.5, 1.5 ); SetLocalAngles( vec3_angle ); }
//----------------------------------------------------------------------------- // Purpose: Drop/throw the weapon with the given velocity. //----------------------------------------------------------------------------- void CASW_Weapon::Drop( const Vector &vecVelocity ) { StopAnimation(); StopFollowingEntity( ); SetMoveType( MOVETYPE_FLYGRAVITY ); // clear follow stuff, setup for collision SetGravity(1.0); m_iState = WEAPON_NOT_CARRIED; RemoveEffects( EF_NODRAW ); FallInit(); SetGroundEntity( NULL ); SetTouch(NULL); IPhysicsObject *pObj = VPhysicsGetObject(); if ( pObj != NULL ) { AngularImpulse angImp( 200, 200, 200 ); pObj->AddVelocity( &vecVelocity, &angImp ); } else { SetAbsVelocity( vecVelocity ); } SetNextThink( gpGlobals->curtime + 1.0f ); SetOwnerEntity( NULL ); SetOwner( NULL ); SetModel( GetWorldModel() ); }
void ParticlePhysics::ParseAttribute(const TiXmlAttribute* attribute) { if (IsEqual(attribute->Name(), "gravity")) { SetGravity(attribute->FloatValue()); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CResourceChunk::Spawn( ) { // Init model if ( IsProcessed() ) { SetModelName( AllocPooledString( sProcessedResourceChunkModel ) ); } else { SetModelName( AllocPooledString( sResourceChunkModel ) ); } BaseClass::Spawn(); UTIL_SetSize( this, Vector(-4,-4,-4), Vector(4,4,4) ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_TRIGGER ); CollisionProp()->UseTriggerBounds( true, 24 ); SetCollisionGroup( TFCOLLISION_GROUP_RESOURCE_CHUNK ); SetGravity( 1.0 ); SetFriction( 1 ); SetTouch( ChunkTouch ); SetThink( ChunkRemove ); SetNextThink( gpGlobals->curtime + random->RandomFloat( 50.0, 80.0 ) ); // Remove myself the }
void CBaseHelicopter::Event_Killed( const CTakeDamageInfo &info ) { m_lifeState = LIFE_DYING; SetMoveType( MOVETYPE_FLYGRAVITY ); SetGravity( UTIL_ScaleForGravity( 240 ) ); // use a lower gravity StopLoopingSounds(); UTIL_SetSize( this, Vector( -32, -32, -64), Vector( 32, 32, 0) ); SetThink( &CBaseHelicopter::CallDyingThink ); SetTouch( &CBaseHelicopter::CrashTouch ); SetNextThink( gpGlobals->curtime + 0.1f ); m_iHealth = 0; m_takedamage = DAMAGE_NO; /* if (m_spawnflags & SF_NOWRECKAGE) { m_flNextRocket = gpGlobals->curtime + 4.0; } else { m_flNextRocket = gpGlobals->curtime + 15.0; } */ StopRotorWash(); m_OnDeath.FireOutput( info.GetAttacker(), this ); }
void CNPC_Controller::Spawn() { Precache( ); SetModel( "models/controller.mdl" ); UTIL_SetSize( this, Vector( -32, -32, 0 ), Vector( 32, 32, 64 )); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetGravity(0.001); m_bloodColor = BLOOD_COLOR_GREEN; m_iHealth = sk_controller_health.GetFloat(); m_flFieldOfView = VIEW_FIELD_FULL;// indicates the width of this monster's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; SetRenderColor( 255, 255, 255, 255 ); CapabilitiesClear(); AddFlag( FL_FLY ); SetNavType( NAV_FLY ); CapabilitiesAdd( bits_CAP_MOVE_FLY | bits_CAP_INNATE_RANGE_ATTACK1 | bits_CAP_INNATE_RANGE_ATTACK2 | bits_CAP_MOVE_SHOOT); NPCInit(); SetDefaultEyeOffset(); }
void CSatchelCharge::Spawn( void ) { Precache( ); // motor SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetSolid( SOLID_BBOX ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); SetModel( "models/Weapons/w_slam.mdl" ); UTIL_SetSize(this, Vector( -6, -6, -2), Vector(6, 6, 2)); SetTouch( SatchelTouch ); SetUse( SatchelUse ); SetThink( SatchelThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_plr_dmg_satchel.GetFloat(); m_DmgRadius = sk_satchel_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( 560 ) ); // slightly lower gravity SetFriction( 1.0 ); SetSequence( 1 ); m_bIsAttached = false; m_bInAir = true; m_flSlideVolume = -1.0; m_flNextBounceSoundTime = 0; m_vLastPosition = vec3_origin; InitSlideSound(); }
void PhysicsServer::Init() { if (m_bInited) { return; } RemoveChildren(); m_Objects.clear(); dInitODE(); m_WorldID = dWorldCreate(); m_DefaultSpaceID = dHashSpaceCreate( NULL ); m_ContactGroupID = dJointGroupCreate( 0 ); dWorldSetAutoDisableFlag( m_WorldID, 1 ); dWorldSetAutoDisableAverageSamplesCount( m_WorldID, 1 ); if (m_WorldID) { SetERP( m_ERP ); SetCFM( m_CFM ); SetGravity( m_Gravity ); } m_pDefMaterial = g_pObjectServer->FindObject<PhysMaterial>( "defaullt_mtl", this ); if (!m_pDefMaterial) { m_pDefMaterial = new PhysMaterial(); m_pDefMaterial->SetName( "defaullt_mtl" ); AddChild( m_pDefMaterial ); } m_bInited = true; } // PhysicsServer::Init
void CGrenadeSpit::Spawn( void ) { Precache( ); SetSolid( SOLID_BBOX ); SetMoveType( MOVETYPE_FLYGRAVITY ); // FIXME, if these is a sprite, then we need a base class derived from CSprite rather than // CBaseAnimating. pev->scale becomes m_flSpriteScale in that case. SetModel( "models/spitball_large.mdl" ); UTIL_SetSize(this, Vector(0, 0, 0), Vector(0, 0, 0)); m_nRenderMode = kRenderTransAdd; SetRenderColor( 255, 255, 255, 255 ); m_nRenderFX = kRenderFxNone; SetThink( SpitThink ); SetUse( DetonateUse ); SetTouch( GrenadeSpitTouch ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_dmg_spit_grenade.GetFloat(); m_DmgRadius = sk_spit_grenade_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( SPIT_GRAVITY ) ); SetFriction( 0.8 ); SetSequence( 1 ); SetCollisionGroup( HL2COLLISION_GROUP_SPIT ); }
cFireChargeEntity::cFireChargeEntity(cEntity * a_Creator, double a_X, double a_Y, double a_Z, const Vector3d & a_Speed) : super(pkFireCharge, a_Creator, a_X, a_Y, a_Z, 0.3125, 0.3125) { SetSpeed(a_Speed); SetGravity(0); SetAirDrag(0); }
cWitherSkullEntity::cWitherSkullEntity(cEntity * a_Creator, double a_X, double a_Y, double a_Z, const Vector3d & a_Speed) : super(pkWitherSkull, a_Creator, a_X, a_Y, a_Z, 0.25, 0.25) { SetSpeed(a_Speed); SetGravity(0); SetAirDrag(0); }
//----------------------------------------------------------------------------- // Purpose: Spawn //----------------------------------------------------------------------------- void CGrappleHook::Spawn(void) { Precache(); SetModel(HOOK_MODEL); SetMoveType(MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM); UTIL_SetSize(this, -Vector(1, 1, 1), Vector(1, 1, 1)); SetSolid(SOLID_BBOX); SetGravity(0.05f); // The rock is invisible, the crossbow bolt is the visual representation AddEffects(EF_NODRAW); // Make sure we're updated if we're underwater UpdateWaterState(); SetTouch(&CGrappleHook::HookTouch); SetThink(&CGrappleHook::FlyThink); SetNextThink(gpGlobals->curtime + 0.1f); //m_pSpring = NULL; m_fSpringLength = 0.0f; m_bPlayerWasStanding = false; // Create bolt model and parent it CBaseEntity *pBolt = CBaseEntity::CreateNoSpawn("prop_dynamic", GetAbsOrigin(), GetAbsAngles(), this); pBolt->SetModelName(MAKE_STRING(BOLT_MODEL)); pBolt->SetModel(BOLT_MODEL); DispatchSpawn(pBolt); pBolt->SetParent(this); }
void CSatchelCharge::Spawn( void ) { Precache( ); SetModel( "models/Weapons/w_slam.mdl" ); VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); SetCollisionGroup( COLLISION_GROUP_WEAPON ); UTIL_SetSize(this, Vector( -6, -6, -2), Vector(6, 6, 2)); SetThink( &CSatchelCharge::SatchelThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_plr_dmg_satchel.GetFloat(); m_DmgRadius = sk_satchel_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( 560 ) ); // slightly lower gravity SetFriction( 1.0 ); SetSequence( 1 ); SetDamage( 150 ); m_bIsAttached = false; m_bInAir = true; m_flNextBounceSoundTime = 0; m_vLastPosition = vec3_origin; m_hGlowSprite = NULL; CreateEffects(); }
AIMoveResult_t CAI_Motor::MoveJumpStop() { SetSmoothedVelocity( Vector(0,0,0) ); if (GetOuter()->GetActivity() == ACT_GLIDE) { float flTime = GetOuter()->GetGroundChangeTime(); GetOuter()->AddStepDiscontinuity( flTime, GetAbsOrigin(), GetAbsAngles() ); if ( SelectWeightedSequence( ACT_LAND ) == ACT_INVALID ) return AIMR_CHANGE_TYPE; SetActivity( ACT_LAND ); // FIXME: find out why the client doesn't interpolate immediatly after sequence change // GetOuter()->SetCycle( flTime - gpGlobals->curtime ); } if (GetOuter()->GetActivity() != ACT_LAND || GetOuter()->IsActivityFinished()) { return AIMR_CHANGE_TYPE; } SetMoveInterval( 0 ); SetGravity( 1.0f ); return AIMR_OK; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CGETKnife::Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel( "models/weapons/knife/w_tknife.mdl" ); SetSize( -Vector(8,8,8), Vector(8,8,8) ); // Init our physics definition VPhysicsInitNormal( SOLID_VPHYSICS, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); SetCollisionGroup( COLLISION_GROUP_GRENADE ); // No Air-Drag, lower gravity VPhysicsGetObject()->EnableDrag( false ); SetGravity( UTIL_ScaleForGravity( 540.0f ) ); m_bInAir = true; m_takedamage = DAMAGE_NO; AddSolidFlags( FSOLID_NOT_STANDABLE ); m_flStopFlyingTime = gpGlobals->curtime + 4.5f; // const CBaseEntity *host = te->GetSuppressHost(); // te->SetSuppressHost( NULL ); // DispatchParticleEffect( "tracer_tknife", PATTACH_POINT_FOLLOW, this, "tip" ); // te->SetSuppressHost( (CBaseEntity*)host ); SetTouch( &CGETKnife::DamageTouch ); SetThink( &CGETKnife::SoundThink ); SetNextThink( gpGlobals->curtime ); }
void vpRagdollWorld::UserInputFun(unsigned char dir) { static int sidx = 0; static int jidx = 0; static int kidx = 0; switch ( dir ) { case 0x26 : // up SetGravity(Vec3(0.0, 10.0, 0.0)); break; case 0x28: // down SetGravity(Vec3(0.0, -10.0, 0.0)); break; case 0x25: // left SetGravity(Vec3(-10.0, 0.0, 0.0)); break; case 0x27: // right //SetGravity(Vec3(10.0, 0.0, 0.0)); break; case 0x24: // home SetGravity(Vec3(0.0, 0.0, 10.0)); break; case 0x23: //end SetGravity(Vec3(0.0, 0.0, -10.0)); break; case 0x20: // space sidx++; sidx %= NUM_STONE; stone[sidx].SetFrame(Vec3(drand(-6.0 * NUM_PUPPET, 6.0 * NUM_PUPPET), -30.0, drand(10.0, 20.0))); stone[sidx].SetGenVelocity(se3(0, 0, 0, 0, 20, 0)); break; case 'b': puppet[jidx][kidx].J_rope[NUM_ROPE].Break(); kidx++; if ( kidx == NUM_PUPPET ) { jidx++; if ( jidx == NUM_PUPPET ) jidx = 0; kidx = 0; } break; } }
void CObject_Player::ChangeCamera(ID3D11Device *pd3dDevice, DWORD nNewCameraMode, float fTimeElapsed) { DWORD nCurrentCameraMode = (m_pCamera) ? m_pCamera->GetMode() : 0x00; if (nCurrentCameraMode == nNewCameraMode) return; switch (nNewCameraMode) { case FIRST_PERSON_CAMERA: //플레이어의 특성을 1인칭 카메라 모드에 맞게 변경한다. 중력은 적용하지 않는다. SetFriction(200.0f); SetGravity(D3DXVECTOR3(0.0f, 0.0f, 0.0f)); SetMaxVelocityXZ(125.0f); SetMaxVelocityY(400.0f); m_pCamera = OnChangeCamera(pd3dDevice, FIRST_PERSON_CAMERA, nCurrentCameraMode); m_pCamera->SetTimeLag(0.0f); m_pCamera->SetOffset(D3DXVECTOR3(0.0f, 20.0f, 0.0f)); m_pCamera->GenerateProjectionMatrix(1.01f, 5000.0f, ASPECT_RATIO, 60.0f); break; case SPACESHIP_CAMERA: //플레이어의 특성을 스페이스-쉽 카메라 모드에 맞게 변경한다. 중력은 적용하지 않는다. SetFriction(125.0f); SetGravity(D3DXVECTOR3(0.0f, 0.0f, 0.0f)); SetMaxVelocityXZ(400.0f); SetMaxVelocityY(400.0f); m_pCamera = OnChangeCamera(pd3dDevice, SPACESHIP_CAMERA, nCurrentCameraMode); m_pCamera->SetTimeLag(0.0f); m_pCamera->SetOffset(D3DXVECTOR3(0.0f, 0.0f, 0.0f)); m_pCamera->GenerateProjectionMatrix(1.01f, 5000.0f, ASPECT_RATIO, 60.0f); break; case THIRD_PERSON_CAMERA: //플레이어의 특성을 3인칭 카메라 모드에 맞게 변경한다. 지연 효과와 카메라 오프셋을 설정한다. SetFriction(250.0f); SetGravity(D3DXVECTOR3(0.0f, 0.0f, 0.0f)); SetMaxVelocityXZ(125.0f); SetMaxVelocityY(400.0f); m_pCamera = OnChangeCamera(pd3dDevice, THIRD_PERSON_CAMERA, nCurrentCameraMode); m_pCamera->SetTimeLag(0.25f); m_pCamera->SetOffset(D3DXVECTOR3(0.0f, 130.0f, -80.0f)); m_pCamera->GenerateProjectionMatrix(1.01f, 5000.0f, ASPECT_RATIO, 60.0f); break; default: break; } //카메라 정보를 시간에 따라 갱신한다. Update(fTimeElapsed); }
cExpOrb::cExpOrb(double a_X, double a_Y, double a_Z, int a_Reward) : cEntity(etExpOrb, a_X, a_Y, a_Z, 0.98, 0.98) , m_Reward(a_Reward) , m_Timer(0) { SetMaxHealth(5); SetHealth(5); SetGravity(0); }
cExpOrb::cExpOrb(const Vector3d & a_Pos, int a_Reward) : cEntity(etExpOrb, a_Pos.x, a_Pos.y, a_Pos.z, 0.98, 0.98) , m_Reward(a_Reward) , m_Timer(0) { SetMaxHealth(5); SetHealth(5); SetGravity(0); }
cPawn::cPawn(eEntityType a_EntityType, double a_Width, double a_Height) : super(a_EntityType, 0, 0, 0, a_Width, a_Height), m_EntityEffects(tEffectMap()), m_LastGroundHeight(0), m_bTouchGround(false) { SetGravity(-32.0f); SetAirDrag(0.02f); }