wind.cpp
来自「这是整套横扫千军3D版游戏的源码」· C++ 代码 · 共 80 行
CPP
80 行
#include "StdAfx.h"
#include "Wind.h"
#include "Sim/Units/UnitHandler.h"
#include "Map/ReadMap.h"
#include "mmgr.h"
CR_BIND(CWind, );
CR_REG_METADATA(CWind, (
CR_MEMBER(maxWind),
CR_MEMBER(minWind),
CR_MEMBER(curWind),
CR_MEMBER(curStrength),
CR_MEMBER(curDir),
CR_MEMBER(newWind),
CR_MEMBER(oldWind),
CR_MEMBER(status),
CR_RESERVED(12)
));
CWind wind;
CWind::CWind()
{
curDir=float3(1,0,0);
curStrength=0;
curWind=float3(0,0,0);
newWind=curWind;
oldWind=curWind;
maxWind=300;
minWind=50;
status=895; //make sure we can read in the correct wind before we try to set it
}
CWind::~CWind()
{
}
void CWind::LoadWind()
{
// TODO: decouple
readmap->mapDefParser.GetDef(minWind,"5","MAP\\ATMOSPHERE\\MinWind");
readmap->mapDefParser.GetDef(maxWind,"25","MAP\\ATMOSPHERE\\MaxWind");
}
void CWind::Update()
{
if(status==0){
oldWind=curWind;
float ns=gs->randFloat()*(maxWind-minWind)+minWind;
float nd=gs->randFloat()*2*PI;
newWind=float3(sin(nd)*ns,0,cos(nd)*ns);
// TODO: decouple
uh->PushNewWind(newWind.x, newWind.z, newWind.Length());
status++;
} else if(status<=300) {
float mod=status/300.0f;
curWind=oldWind*(1-mod)+newWind*mod;
curStrength=curWind.Length();
curDir=curWind;
curDir.Normalize();
status++;
} else if(status==900) {
status=0;
} else {
status++;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?