📄 wander.cpp
字号:
#include "character.h"
#include "Wander.h"
#include "gametime.h"
#include "util.h"
Wander::Wander()
{
m_name = "Wander"; // must match class name
m_owner = NULL;
}
void Wander::init ( IEOwner * owner )
{
m_owner = dynamic_cast<Character *> (owner);
m_minWanderTime = 5.0f;
}
bool Wander::start ()
{
m_state = Go;
m_owner->animStart ( CA_Walk );
printf ( "%s starts walking.\n", m_owner->getName() );
m_dirClock = 0.0f;
newDirection();
m_owner->setMotionSpeed ( m_owner->getWalkSpeed() );
return false;
}
bool Wander::update ()
{
switch ( m_state )
{
case Go:
m_owner->move ();
m_dirClock += GameTime::dt;
if ( m_dirClock > m_timeChangeDir )
{
newDirection();
m_dirClock = 0.0f;
}
if ( m_owner->inNewPos() )
{
int x, y;
m_owner->getPos ( x, y );
printf ( "%s wandering at %d %d\n",
m_owner->getName(), x, y );
}
m_owner->burnEnergy();
break;
}
return true;
}
bool Wander::finish ()
{
return true;
}
IEOwner * Wander::getOwner ()
{
return m_owner;
}
const char * Wander::getName()
{
return m_name.c_str();
}
void Wander::newDirection ()
{
float r = frand();
int xdir, ydir;
// x direction
if ( r < 0.5f )
{
r = frand();
if ( r < 0.5f )
xdir = 1;
else
xdir = -1;
ydir = 0;
}
// else y direction
else
{
r = frand();
if ( r < 0.5f )
ydir = 1;
else
ydir = -1;
xdir = 0;
}
//printf ( "changed dir %d %d\n", xdir, ydir );
// figure the time to change next direction
r = frand();
m_timeChangeDir = m_minWanderTime + ( r * 10.0f );
m_owner->setDirection ( xdir, ydir );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -