-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDemoLevel.cpp
More file actions
115 lines (92 loc) · 3.43 KB
/
Copy pathDemoLevel.cpp
File metadata and controls
115 lines (92 loc) · 3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "../include/DemoLevel.hpp"
#include "../include/MainMenu.hpp"
#include "../../Entities/include/Player.hpp"
#include "../../Entities/include/Enemy.hpp"
#include "../../Entities/include/InteractiveHeal.hpp"
#include <iostream>
#include <tinyxml.h>
DemoLevel::DemoLevel()
: interface(view)
, manager(new EntityManager)
, world(b2Vec2(0.0f, 0.0f))
{
}
DemoLevel::~DemoLevel()
{
std::cout << "Deleted demolvl" << std::endl;
delete manager;
}
void DemoLevel::initialize(sf::RenderWindow&)
{
level.loadFromFile("WorknameProject/Textures/Levels/Demo/Final.tmx");
createBarriers(level.getObjects("wall"));
enemyFromFile("WorknameProject/Textures/Levels/Demo/enemies.xml");
manager->addEntity("Player", new Player(level.getObject("player").shape.getPoint(0), world));
manager->addEntity("Potion", new InteractiveHeal(sf::Vector2f(720.f, 1700.f), sf::Vector2f(20.f, 20.f), 15));
}
BasicScene* DemoLevel::update(sf::RenderWindow& window, float deltaTime)
{
view.setCenter(manager->getEntity(Entity::GROUP_PLAYER, "Player")->getSprite().getPosition());
view.setSize(1280.f, 720.f);
window.setView(view);
interface.update(static_cast<Player*>(manager->getEntity(Entity::GROUP_PLAYER, "Player"))->getStats());
world.Step(deltaTime, 8, 3);
manager->update(deltaTime, world);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape))
{
window.setView(window.getDefaultView());
active = false;
return new MainMenu;
}
return this;
}
void DemoLevel::createBarriers(const std::vector<Object>& barriers) {
for(auto& object: barriers) {
b2PolygonShape barrier;
b2Vec2 vertices[4];
for(int j = 0; j < 4; j++) {
vertices[j].Set(object.shape.getPoint(j).x, object.shape.getPoint(j).y);
}
barrier.Set(vertices, 4);
b2BodyDef bDef;
bDef.type = b2_staticBody;
world.CreateBody(&bDef)->CreateFixture(&barrier, 1);
}
}
void DemoLevel::render(sf::RenderWindow& window)
{
level.drawLayer(window, 0);
level.drawLayer(window, 1);
level.drawLayer(window, 2);
manager->render(window);
level.drawLayer(window, 3);
level.drawLayer(window, 4);
interface.render(window);
}
void DemoLevel::enemyFromFile(std::string path) {
TiXmlDocument enemiesFile(path);
enemiesFile.LoadFile();
TiXmlElement* enemiesBD = enemiesFile.FirstChildElement("enemies");
std::vector<Object> enemies = level.getObjects("enemy");
char index = '1';
for(auto& object: enemies) {
TiXmlElement* enemy = enemiesBD->FirstChildElement("enemy");
while(enemy) {
if(enemy->Attribute("id") == object.type) {
TiXmlElement* stats = enemy->FirstChildElement("stats");
int hp = atoi(stats->Attribute("hppool"));
int strenght = atoi(stats->Attribute("strenght"));
float speed = strtof(stats->Attribute("speed"), nullptr);
TiXmlElement* images = enemy->FirstChildElement("images");
std::string name = "Enemy";
name.push_back(index);
manager->addEntity(name, new Enemy(object.shape.getPoint(0), world, hp, strenght, speed,
images->Attribute("attack"), images->Attribute("death"),
images->Attribute("idle"), images->Attribute("stagger"),
images->Attribute("walk"), atoi(images->Attribute("attackCount")), atoi(images->Attribute("deathCount")), atoi(images->Attribute("idleCount")), atoi(images->Attribute("staggerCount")), atoi(images->Attribute("walkCount"))));
index++;
}
enemy = enemy->NextSiblingElement("enemy");
}
}
}