/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#include "pyCritterBrain.h"
#include "pyGeometry3.h"
#include "plAvatar/plAvBrainCritter.h"
pyCritterBrain::pyCritterBrain(): fBrain(nil) {}
hsBool pyCritterBrain::operator==(const pyCritterBrain& other) const
{
// pointer compare
return fBrain == other.fBrain;
}
void pyCritterBrain::AddReceiver(pyKey& newReceiver)
{
if (!fBrain)
return;
fBrain->AddReceiver(newReceiver.getKey());
}
void pyCritterBrain::RemoveReceiver(pyKey& oldReceiver)
{
if (!fBrain)
return;
fBrain->RemoveReceiver(oldReceiver.getKey());
}
void pyCritterBrain::LocallyControlled(bool local)
{
if (!fBrain)
return;
fBrain->LocallyControlled(local);
}
bool pyCritterBrain::LocallyControlled() const
{
if (!fBrain)
return false;
return fBrain->LocallyControlled();
}
void pyCritterBrain::AddBehavior(const std::string& animationName, const std::string& behaviorName, bool loop /* = true */,
bool randomStartPos /* = true */, float fadeInLen /* = 2.f */, float fadeOutLen /* = 2.f */)
{
if (!fBrain)
return;
fBrain->AddBehavior(animationName, behaviorName, loop, randomStartPos, fadeInLen, fadeOutLen);
}
void pyCritterBrain::StartBehavior(const std::string& behaviorName, bool fade /* = true */)
{
if (!fBrain)
return;
fBrain->StartBehavior(behaviorName, fade);
}
bool pyCritterBrain::RunningBehavior(const std::string& behaviorName) const
{
if (!fBrain)
return false;
return fBrain->RunningBehavior(behaviorName);
}
std::string pyCritterBrain::BehaviorName(int behavior) const
{
if (!fBrain)
return false;
return fBrain->BehaviorName(behavior);
}
std::string pyCritterBrain::AnimationName(int behavior) const
{
if (!fBrain)
return false;
return fBrain->AnimationName(behavior);
}
int pyCritterBrain::CurBehavior() const
{
if (!fBrain)
return false;
return fBrain->CurBehavior();
}
int pyCritterBrain::NextBehavior() const
{
if (!fBrain)
return false;
return fBrain->NextBehavior();
}
std::string pyCritterBrain::IdleBehaviorName() const
{
if (!fBrain)
return false;
return fBrain->IdleBehaviorName();
}
std::string pyCritterBrain::RunBehaviorName() const
{
if (!fBrain)
return false;
return fBrain->RunBehaviorName();
}
void pyCritterBrain::GoToGoal(hsPoint3 newGoal, bool avoidingAvatars /* = false */)
{
if (!fBrain)
return;
fBrain->GoToGoal(newGoal, avoidingAvatars);
}
PyObject* pyCritterBrain::CurrentGoal() const
{
if (!fBrain)
PYTHON_RETURN_NONE;
return pyPoint3::New(fBrain->CurrentGoal());
}
bool pyCritterBrain::AvoidingAvatars() const
{
if (!fBrain)
return false;
return fBrain->AvoidingAvatars();
}
bool pyCritterBrain::AtGoal() const
{
if (!fBrain)
return false;
return fBrain->AtGoal();
}
void pyCritterBrain::StopDistance(hsScalar stopDistance)
{
if (!fBrain)
return;
fBrain->StopDistance(stopDistance);
}
hsScalar pyCritterBrain::StopDistance() const
{
if (!fBrain)
return 0;
return fBrain->StopDistance();
}
void pyCritterBrain::SightCone(hsScalar coneRad)
{
if (!fBrain)
return;
fBrain->SightCone(coneRad);
}
hsScalar pyCritterBrain::SightCone() const
{
if (!fBrain)
return 0;
return fBrain->SightCone();
}
void pyCritterBrain::SightDistance(hsScalar sightDis)
{
if (!fBrain)
return;
fBrain->SightDistance(sightDis);
}
hsScalar pyCritterBrain::SightDistance() const
{
if (!fBrain)
return 0;
return fBrain->SightDistance();
}
void pyCritterBrain::HearingDistance(hsScalar hearDis)
{
if (!fBrain)
return;
fBrain->HearingDistance(hearDis);
}
hsScalar pyCritterBrain::HearingDistance() const
{
if (!fBrain)
return 0;
return fBrain->HearingDistance();
}
bool pyCritterBrain::CanSeeAvatar(unsigned long id) const
{
if (!fBrain)
return false;
return fBrain->CanSeeAvatar(id);
}
bool pyCritterBrain::CanHearAvatar(unsigned long id) const
{
if (!fBrain)
return false;
return fBrain->CanHearAvatar(id);
}
PyObject* pyCritterBrain::PlayersICanSee() const
{
if (!fBrain)
PYTHON_RETURN_NONE;
std::vector players = fBrain->PlayersICanSee();
PyObject* retVal = PyList_New(players.size());
for (unsigned i = 0; i < players.size(); ++i)
PyList_SetItem(retVal, i, PyLong_FromUnsignedLong(players[i]));
return retVal;
}
PyObject* pyCritterBrain::PlayersICanHear() const
{
if (!fBrain)
PYTHON_RETURN_NONE;
std::vector players = fBrain->PlayersICanHear();
PyObject* retVal = PyList_New(players.size());
for (unsigned i = 0; i < players.size(); ++i)
PyList_SetItem(retVal, i, PyLong_FromUnsignedLong(players[i]));
return retVal;
}
PyObject* pyCritterBrain::VectorToPlayer(unsigned long id) const
{
if (!fBrain)
PYTHON_RETURN_NONE;
return pyVector3::New(fBrain->VectorToPlayer(id));
}