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 + -
显示快捷键?