-
Notifications
You must be signed in to change notification settings - Fork 5
/
stairs.cpp
112 lines (92 loc) · 2.19 KB
/
stairs.cpp
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
/*
Copyright 2013-2015 Rohit Nirmal
This file is part of Clonepoint.
Clonepoint is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Clonepoint is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Clonepoint. If not, see <https://www.gnu.org/licenses/>.
*/
#include "entity.h"
Stairs::Stairs(float x, float y) : Entity(x, y)
{
_upstairs = NULL;
_downstairs = NULL;
_well = NULL;
setCollisionRectDims(30, 42, ENTDIM);
_sprite = Locator::getSpriteManager()->getIndex("./data/sprites/objects.sprites", "stairs");
}
void Stairs::registerStairwell(Stairwell* well)
{
_well = well;
}
Stairs* Stairs::getUpstairs()
{
return _upstairs;
}
Stairs* Stairs::getDownstairs()
{
return _downstairs;
}
void Stairs::setUpstairs(Stairs* target)
{
_upstairs = target;
if (target->getDownstairs() == NULL)
target->setDownstairs(this);
}
void Stairs::setDownstairs(Stairs* target)
{
_downstairs = target;
if (target->getUpstairs() == NULL)
target->setUpstairs(this);
}
Stairwell::Stairwell(int x)
{
_x = x;
}
Stairwell::~Stairwell()
{
_stairs.clear();
}
void Stairwell::addStairs(Stairs* stairs)
{
_stairs.push_back(stairs);
}
int Stairwell::getX()
{
return _x;
}
void Stairwell::setDirections(unsigned int yMax)
{
size_t i;
size_t prevStairs = 0;
unsigned int yMin = yMax;
unsigned int y;
for (i = 0; i < _stairs.size(); i++)
{
if (_stairs[i]->getPosition().y < yMin)
{
yMin = _stairs[i]->getPosition().y;
prevStairs = i;
}
}
//stair positions are unordered, so scan down and find the downstairs of above stairs!
for (y = yMin; y < yMax; y++)
{
for (i = 0; i < _stairs.size(); i++)
{
if (_stairs[i]->getPosition().y == y && _stairs[prevStairs] != _stairs[i])
{
_stairs[prevStairs]->setDownstairs(_stairs[i]);
prevStairs = i;
break;
}
}
}
_stairs.clear();
}