dgunweapon.cpp
来自「这是整套横扫千军3D版游戏的源码」· C++ 代码 · 共 68 行
CPP
68 行
#include "StdAfx.h"
#include "DGunWeapon.h"
#include "Game/Team.h"
#include "Sim/Projectiles/WeaponProjectiles/FireBallProjectile.h"
#include "Sim/Units/Unit.h"
#include "Sim/Units/UnitHandler.h"
#include "Sound.h"
#include "WeaponDefHandler.h"
#include "mmgr.h"
CR_BIND_DERIVED(CDGunWeapon, CWeapon, (NULL));
CR_REG_METADATA(CDGunWeapon,(
CR_RESERVED(8)
));
CDGunWeapon::CDGunWeapon(CUnit* owner)
: CWeapon(owner)
{
}
CDGunWeapon::~CDGunWeapon(void)
{
}
void CDGunWeapon::Update(void)
{
if(targetType!=Target_None){
weaponPos=owner->pos+owner->frontdir*relWeaponPos.z+owner->updir*relWeaponPos.y+owner->rightdir*relWeaponPos.x;
weaponMuzzlePos=owner->pos+owner->frontdir*relWeaponMuzzlePos.z+owner->updir*relWeaponMuzzlePos.y+owner->rightdir*relWeaponMuzzlePos.x;
if(!onlyForward){
wantedDir=targetPos-weaponPos;
wantedDir.Normalize();
}
predict=0; //have to manually predict
}
CWeapon::Update();
}
void CDGunWeapon::Fire(void)
{
if(uh->limitDgun && owner->unitDef->isCommander && owner->pos.distance(gs->Team(owner->team)->startPos)>uh->dgunRadius){
return; //prevents dgunning using fps view if outside dgunlimit
}
float3 dir;
if(onlyForward){
dir=owner->frontdir;
} else {
dir=targetPos-weaponMuzzlePos;
dir.Normalize();
}
dir+=(gs->randVector()*sprayangle+salvoError)*(1-owner->limExperience*0.5f);
dir.Normalize();
SAFE_NEW CFireBallProjectile(weaponMuzzlePos, dir * projectileSpeed, owner, 0, targetPos, weaponDef);
if (fireSoundId && (!weaponDef->soundTrigger || salvoLeft == salvoSize - 1))
sound->PlaySample(fireSoundId, owner, fireSoundVolume * 0.2f);
}
void CDGunWeapon::Init(void)
{
CWeapon::Init();
muzzleFlareSize=1.5f;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?