void CSoldado::create( TSPRITE _eType, const unsigned int startX, const unsigned int startY, const unsigned int goalX, const unsigned int goalY, JAPR::ref_ptr<CAgentManager> m) { m_myManager_ = m; if (CSprite::Create(g_sImageFileNames[_eType]) == false) return; //necesarias Aestrella m_startNode_.alloc(); m_goalNode_.alloc(); m_Position = Vector3D(startX * DIVIDE_MAP_NUM, 0.0, startY * DIVIDE_MAP_NUM); m_TargetPosition_ = m_Position; createWay(Vector3D(goalX* DIVIDE_MAP_NUM, 0.0, goalY* DIVIDE_MAP_NUM)); // necesarias movimiento m_bDead = false; m_maxSpeed_ = rand() % 10 + 40; m_State = S_SEARCH; m_myManager_->setSoldier(this); }
OWay PrimitiveBlockOutputAdaptor::createWay(const IWay & templateIWay) { OWay result = createWay(); // set fields for new way result.setId(templateIWay.id()); result.setRefs(templateIWay.refBegin(), templateIWay.refEnd()); for (int i = 0; i < templateIWay.tagsSize(); i++) result.addTag(templateIWay.key(i), templateIWay.value(i)); return result; }
void CSoldado::openDoorAndGenerateWay() { CDoor* cDoor; if (m_firstDoor_ && !m_IAmIn_) { m_ElapsedTime = 0; cDoor = isSeeingDoor(); if (cDoor != nullptr) { cDoor->setState(true); } m_finalList_ = m_myManager_->getSoldierNodeList(); m_it_ = m_finalList_.end() - 1; m_IAmIn_ = true; m_firstDoor_ = false; } else if (m_secondDoor_ && m_IAmIn_) { m_ElapsedTime = 0; cDoor = isSeeingDoor(); if (cDoor != nullptr) { cDoor->setState(true); } Vector3D pos = m_myManager_->getNearestBase(m_Position); if (m_myManager_->getAlarm()) { if (cDoor != nullptr) { if (cDoor->getState()) { createWay(pos); m_IAmIn_ = false; } else { m_secondDoor_ = false; } } else { m_secondDoor_ = false; } } else { m_it_ += 2; } } else { // if not end mission and not in the castle and is not watching some door... if (!m_IAmIn_) { Vector3D pos = m_myManager_->getNearestBase(m_Position); createWay(pos); // if not end mission and is in and two doors closed } else { JAPR::ref_ptr<CDoor> nextDoor = m_myManager_->isOpenAnyDoor(); if (nextDoor == nullptr) { m_State = S_ENDMISION; m_endMision_ = true; } else if (!m_endMision_){ Vector3D pos; nextDoor->getPosition(&pos); createWay(pos); m_endMision_ = true; } if (m_endMision_ && m_firstDoor_){ Vector3D pos = m_myManager_->getNearestBase(m_Position); createWay(pos); m_IAmIn_ = false; m_firstDoor_ = false; m_secondDoor_ = false; m_endMision_ = true; } } } }
PrimitiveBlockOutputAdaptor & PrimitiveBlockOutputAdaptor::operator<<(IWay & way) { createWay(way); return *this; }