PixelWars/src/dude.cpp

63 lines
1.6 KiB
C++

#include "dude.h"
#include "map.h"
#include <cstring>
Dude::Dude(const Coord &_pos, Map *_map, int &_team) :
m_pos(_pos),
p_map(_map),
m_team(_team),
m_dead(false),
m_success(true),
m_inventory(EMPTY)
{
m_action.dir = NO_DIR;
m_action.type = Action::WAIT;
m_action.com_data = Com();
std::memset(&m_memory, 0, DUDE_MEMORY_SIZE);
m_under = p_map->getPixel(m_pos).type;
//if(PixelProperty::isResource(m_under))
// m_underResCount = p_map->getPixel(m_pos).data.nbRes;
p_map->getPixel(m_pos).type = DUDE;
p_map->getPixel(m_pos).data.dudePtr = this;
}
void Dude::move(Dir d)
{
p_map->getPixel(m_pos).type = m_under;
//if(PixelProperty::isResource(m_under))
// p_map->getPixel(m_pos).data.nbRes = m_underResCount;
p_map->getPixel(m_pos).data.dudePtr = NULL;
m_pos += Coord(d);
m_under = p_map->getPixel(m_pos).type;
//if(PixelProperty::isResource(m_under))
// m_underResCount = p_map->getPixel(m_pos).data.nbRes;
p_map->getPixel(m_pos).type = DUDE;
p_map->getPixel(m_pos).data.dudePtr = this;
p_map->toreillerLoop(m_pos);
}
void Dude::receiveComData(Dir dir, const char *data)
{
m_receivedComData = true;
m_com_data.flag = dir;
memcpy(m_com_data.data, data, COM_SIZE);
}
void Dude::update(BehaviorFunction func)
{
func(&m_action, m_memory, (Info*)this);
m_receivedComData = false;
}
PixelType Dude::getNear(Dir d) const
{
return p_map->getPixel(Coord(d) + m_pos).type;
}
int Dude::getInfo(Dir d) const
{
return p_map->getPixel(Coord(d) + m_pos).data.nbRes;
}