Example #1
0
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;
	}
Example #3
0
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;
	}