• Fichier: Sector.cpp
  • Path: /dungeon_ascii/DungeonASCII/Sector.cpp
  • File size: 2.75 KB
  • MIME-type: text/x-c
  • Charset: utf-8
 
Retour
#include "Sector.h"

Sector::Sector(std::string p_nom)
{
	m_nom = p_nom;
}

void Sector::loadMap(Player* pPlayer, short *pGameState)
{	
	std::ifstream mapFile("Maps/" + m_nom + ".txt");

	if (mapFile)
	{
		std::vector<char> mapRow;
		
		char mapChar = ' ';
		while (mapChar != '!')
		{
			mapChar = ' ';
			mapFile.get(mapChar);

			while (mapChar != '\n' && mapChar != '!' && !mapFile.eof())
			{
				mapRow.push_back(mapChar);
				mapFile.get(mapChar);
			}

			if (mapChar == '\n')
			{
				m_map.push_back(mapRow);
				mapRow.clear();
			}
		}

		std::string data;
		while (data != "EOF")
		{
			mapFile >> data;
			if (data == "door")
			{
				std::string doorDestination;
				mapFile >> doorDestination;
				
				int doorCoordinatesX;
				mapFile >> doorCoordinatesX;

				int doorCoordinatesY;
				mapFile >> doorCoordinatesY;

				int doorDestinationCoordinatesX;
				mapFile >> doorDestinationCoordinatesX;

				int doorDestinationCoordinatesY;
				mapFile >> doorDestinationCoordinatesY;

				m_doorList.push_back(new Door(doorDestination, doorCoordinatesX, doorCoordinatesY, doorDestinationCoordinatesX, doorDestinationCoordinatesY, this, pPlayer, pGameState));
			}
			else if (data == "bchest")
			{
				int chestCoordinatesX;
				mapFile >> chestCoordinatesX;

				int chestCoordinatesY;
				mapFile >> chestCoordinatesY;

				m_interactableList.push_back(new Chest(chestCoordinatesX, chestCoordinatesY, pGameState));
			}
			else if (data == "trap")
			{
				int trapCoordinatesX;
				mapFile >> trapCoordinatesX;

				int trapCoordinatesY;
				mapFile >> trapCoordinatesY;

				m_interactableList.push_back(new Trap(trapCoordinatesX, trapCoordinatesY, 1, pPlayer, pGameState));
			}
		}

		mapFile.close();

		m_doorList.push_back(new Door("crashRoom", 0, 0, 11, 3, this, pPlayer, pGameState)); // This is Narnia...
	}
}

Door* Sector::getDoorAt(int px, int py)
{
	for (int i = 0; i < m_doorList.size(); i++)
	{
		if (m_doorList[i]->getCoordinates().x == px && m_doorList[i]->getCoordinates().y == py)
		{
			return m_doorList[i];
		}
	}

	// Si la porte n'existe pas... retourner la porte de Narnia :D
	return m_doorList[m_doorList.size() - 1];
}

Interactable* Sector::getInteractableAt(int px, int py)
{
	for (int i = 0; i < m_interactableList.size(); i++)
	{
		if (m_interactableList[i]->getCoordinates().x == px && m_interactableList[i]->getCoordinates().y == py)
		{
			return m_interactableList[i];
		}
	}

	// Si l'objet n'est pas dans la liste, retourner la porte de Narnia
	return m_doorList[m_doorList.size() - 1];
}

std::vector<std::vector<char>>& Sector::getMap()
{
	return m_map;
}

std::string Sector::getSectorName()
{
	return m_nom;
}

Sector::~Sector()
{
}