Beispiel #1
0
void ItemFactory::addDoor(eID doorID, eDirection dir, cocos2d::Vec2 pos, std::string model)
{
	if (doorID != eID_Door1 && doorID != eID_Door2)
		return;

	if (dir == eDir_None || (pos.x < 0 || pos.x >= MAPWIDTH || pos.y < 0 || pos.y >= MAPHEIGHT))
		return;

	// remove origin door
	removeDoor(doorID);

	Door** ppDoorToAdd = nullptr;
	if (doorID == eID_Door1)
		ppDoorToAdd = &m_pDoors.first;
	else if (doorID == eID_Door2)
		ppDoorToAdd = &m_pDoors.second;

	if (ppDoorToAdd)
	{
		Door* pDoorToAdd = Door::create(model);
		*ppDoorToAdd = pDoorToAdd;
		this->addChild(pDoorToAdd, 1, doorID);
		pDoorToAdd->setPosition(VisibleRect::getVisibleRect().origin + VisibleRect::getHalfGridVec() + VisibleRect::getGridLength()*pos);
		pDoorToAdd->setIndex(pos);

		//set the door transfer direction
		pDoorToAdd->setTransferDirection(dir);
		//actual door direction is opposite to transfer direction
		pDoorToAdd->setRotation(arcByDirection(oppositeDirection(dir)));

		//set the grid type
		m_pSnakeMap->setGridType(pos, eType_Door);
	}

	//connect the two doors
	if (m_pDoors.first)
		m_pDoors.first->setOtherDoor(m_pDoors.second);
	if (m_pDoors.second)
		m_pDoors.second->setOtherDoor(m_pDoors.first);
}