Esempio n. 1
0
GameState::GameState(StateManager* _stateManager) : State(_stateManager), tileSize(64.0f, 64.0f), playerPosition(0.0f, 4.0f), ballPosition(0.0f, 0.0f), ballVelocity(0.0f, 0.1f),
													ballSize(40.0f, 40.0f), playerSize(150, 35.0f), tilesSize(90.0f, 40.0f)
{
	tileAmount = 10;

	boxWorld = new b2World(yam2d::vec2(0.0f, 0.0f));
	boxWorld->SetAllowSleeping(false);
	contactListener = new ContactListener();
	boxWorld->SetContactListener(contactListener);

	map = new yam2d::Map(tileSize.x, tileSize.y);

	background = new yam2d::Layer(map, "Background", 1.0f, true, true);
	objects = new yam2d::Layer(map, "Objects", 1.0f, true, false);

	map->addLayer(yam2d::Map::BACKGROUND0, background);
	map->addLayer(yam2d::Map::MAPLAYER0, objects);

	backgroundObject = createSpriteGameObject("Textures/menu_background.png", 1280.0f, 720.0f);
	
	playerObject = createSpriteGameObject("Textures/player.png", playerSize.x, playerSize.y);
	PhysicsBody* Playerbody = new PhysicsBody(playerObject, boxWorld, 1.0f, 1.0f);
	Playerbody->setBoxFixture(playerSize / tileSize, yam2d::vec2(0.0f, 0.0f), playerObject->getRotation(), true);
	playerObject->addComponent(Playerbody);
	playerObject->setName("Player");
	playerObject->getComponent<PhysicsBody>()->getBody()->SetTransform(playerPosition, 0.0f);

	ballObject = createSpriteGameObject("Textures/ball.png", ballSize.x, ballSize.y);
	PhysicsBody* ballBody = new PhysicsBody(ballObject, boxWorld, 1.0f, 1.0f);
	ballBody->setCircleFixture((ballSize.x / tileSize.x) / 2 , true);
	ballObject->addComponent(ballBody);
	ballObject->setName("Ball");
	ballObject->getComponent<PhysicsBody>()->getBody()->SetTransform(ballPosition, 0.0f);

	for (int i = 0; i < tileAmount; i++)
	{
		tileObjects.push_back(createSpriteGameObject("Textures/tile.png", tilesSize.x, tilesSize.y));
		objects->addGameObject(tileObjects.back());
		PhysicsBody* tileBody = new PhysicsBody(tileObjects.back(), boxWorld, 1.0f, 1.0f);
		tileBody->setBoxFixture(tilesSize / tileSize, yam2d::vec2(0.0f, 0.0f), tileObjects.back()->getRotation(), true);
		tileObjects.back()->addComponent(tileBody);
		tileObjects.back()->setName("Tile");
		tileObjects.back()->getComponent<PhysicsBody>()->getBody()->SetTransform(yam2d::vec2(-3.0f + 2 * i, -2.0f), 0.0f);
	}

	textObject = createTextObject();
	textObject->setPosition(8.0f, -5.0f);

	background->addGameObject(backgroundObject);
	objects->addGameObject(playerObject);
	objects->addGameObject(ballObject);
	objects->addGameObject(textObject);
}
MainMenuState::MainMenuState(GameApp* app) : GameState(app), m_app(app), m_map(0), backgroundLayer(0), objectsLayer(0)
{
	// Tile size
	vec2 tileSize(64.0f, 64.0f);

	// Create new map, with width == tile, heigh == 32pixels/tile
	m_map = new Map(tileSize.x, tileSize.y);

	// Background layer
	backgroundLayer = new Layer(m_map, "Background", 1.0f, true, false);

	m_map->addLayer(Map::BACKGROUND0, backgroundLayer);

	// Create new sprite GameObject from texture (background sprite) size is same than screen size.
	GameObject* backgroundGameObject = createSpriteGameObject("../assets/menuBG.png", 1280.0f, 720.0f, false);

	// Add GameObject to background layer.
	backgroundLayer->addGameObject(backgroundGameObject);

	// Objects layer
	objectsLayer = new Layer(m_map, "Objects", 1.0f, true, false);

	m_map->addLayer(Map::MAPLAYER0, objectsLayer);

	// Create new start button object, and clip it, white color shall be transparent
	GameObject* startButtonObject = createSpriteGameObject("../assets/buttons.png", 242.0f, 96.0f, 0, 0, 242, 96, false);

	// Add start button to level
	objectsLayer->addGameObject(startButtonObject);

	// Set Start button position
	startButtonObject->setPosition(-6.0f, 2.0f);
	
	// Set button name
	startButtonObject->setName("Start");

	// Create new start button object, and clip it, white color shall be transparent
	GameObject* exitButtonObject = createSpriteGameObject("../assets/buttons.png", 242.0f, 96.0f, 242, 0, 242, 96, false);

	// Add exit button to level
	objectsLayer->addGameObject(exitButtonObject);

	// Set button size
	//exitButtonObject->setSize(tileSize.x / 2.0, tileSize.y / 2.0);

	// Set exit button position
	exitButtonObject->setPosition(-6.0f, 4.5f);

	// Setting object names
	exitButtonObject->setName("Exit");
}