-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScreenObject.cpp
More file actions
144 lines (124 loc) · 3.42 KB
/
Copy pathScreenObject.cpp
File metadata and controls
144 lines (124 loc) · 3.42 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <list>
#include <iostream>
#include "ScreenRoot.h"
#include "ScreenObject.h"
void ScreenObject::draw()
{
drawThis(); //draw this object to screen
auto dinIter = dinamicObjectList.begin(); //Iterator for list of dynamic sub-objects
auto statIter = staticObjectList.begin();
while(dinIter != dinamicObjectList.end() && statIter != staticObjectList.end()) //While there are static and dynamic objects to, draw the one in the back
{
if ((*dinIter) -> getFront() < (*statIter) -> getBack())
{
(*dinIter) -> draw();
dinIter ++;
}
else
{
(*statIter) -> draw();
statIter ++;
}
}
while (dinIter != dinamicObjectList.end()) //draw remaining dynamic screen objects
{
(*dinIter) -> draw();
dinIter ++;
}
while (statIter != staticObjectList.end()) //draw remaining static screen objects
{
(*statIter) -> draw();
statIter ++;
}
}
void ScreenObject::addStaticSo(ScreenObject *so_)
{
staticObjectList.push_back(NULL);
auto li = staticObjectList.end(); //list iterator
auto li2 = li; //LIST ITERATOR 2
li2 --; // li2 points to last member
li2 --; //li2 points to semi-last member
li --; // li points to last member
while(li != staticObjectList.begin() && (*li2) -> zValue > so_ -> zValue)
{
(*li) = (*li2);
li --;
li2--;
}
(*li) = so_;
}
void ScreenObject::addDinamicSo(ScreenObject *so_)
{
dinamicObjectList.push_back(NULL);
auto li = dinamicObjectList.end(); //list iterator
auto li2 = li; //LIST ITERATOR 2
li2 --; // li2 points to last member
li2 --; //li2 points to semi-last member
li --; // li points to last member
while(li != dinamicObjectList.begin() && (*li2) -> zValue > so_ -> zValue)
{
(*li) = (*li2);
li --;
li2--;
}
(*li) = so_;
}
void ScreenObject::oneElementSort_din()
{
auto iter = dinamicObjectList.begin();
iter ++;
for (;iter != dinamicObjectList.end(); iter ++)
{
auto last = iter;
last --;
if ((*iter) ->getFront() < (*last) ->getFront())
{
ScreenObject *swc = *iter;
*iter = *last;
*last = swc;
}
}
iter = dinamicObjectList.end();
iter --;
if (iter != dinamicObjectList.begin())
iter --;
for (;iter != dinamicObjectList.begin(); iter --)
{
auto next = iter;
next ++;
if ((*iter) ->getFront() > (*next) ->getFront())
{
std::cout << "2\n";
ScreenObject *swc = *iter;
*iter = *next;
*next = swc;
}
}
}
ScreenRoot& ScreenRoot::access()
{
static ScreenRoot root;
return root;
}
void ScreenRoot::addBackground(Background *background_)
{
background = background_;
}
void ScreenRoot::addFixedGround(FixedGround *theGround_)
{
theGround = theGround_;
}
void ScreenRoot::wipeRoot()
{
for(auto iter = dinamicObjectList.begin(); iter != dinamicObjectList.end(); iter++)
{
delete *iter;
}
for(auto iter = staticObjectList.begin(); iter != staticObjectList.end(); iter++)
{
delete *iter;
}
dinamicObjectList.erase(dinamicObjectList.begin(),dinamicObjectList.end());
staticObjectList.erase(staticObjectList.begin(),staticObjectList.end());
background = NULL;
}