1 /***************************************************************************
2 entity_player.cpp - description
3 -------------------
4 begin : Thu Sep 20 2001
5 copyright : (C) 2001 by Giuseppe D'Aqu�
6 email : kumber@tiscalinet.it
7 ***************************************************************************/
8
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License, Version 2, as published by *
13 * the Free Software Foundation. *
14 * *
15 ***************************************************************************/
16
17 #include "dephine.h"
18 #include "sprite.h"
19 #include "entity.h"
20 #include "entity_manager.h"
21
22 #include "entity_all.h"
23
24
Entity_Player(Level * level,Uint32 x,Uint32 y)25 Entity_Player::Entity_Player(Level* level, Uint32 x, Uint32 y)
26 {
27
28 m_type=PLAYER;
29
30 current_level=level;
31
32
33
34 if((x<current_level->get_size_x())&&(x>=0))
35 m_position_x=x;
36 else
37 m_position_x=0;
38
39 if((y<current_level->get_size_y())&&(y>=0))
40 m_position_y=y;
41 else
42 m_position_y=0;
43
44 Surface_Manager* surf_man = Surface_Manager::instance();
45 m_sprite=Sprite(surf_man->get_surface(Surface_Manager::SRF_PLAYER));
46 m_sprite.set_state(SP_STOP);
47 m_score=0;
48
49 m_exists=true;
50
51 m_is_exited=false;
52
53 m_is_alive=true;
54
55 m_is_snapping=false;
56
57 m_direction=STOP;
58
59 }
60
set_direction(Direction d)61 void Entity_Player::set_direction(Direction d)
62 {
63 m_direction=d;
64 }
65
set_snap(bool snap)66 void Entity_Player::set_snap(bool snap)
67 {
68 m_is_snapping=snap;
69
70 }
71
inc_score(int score)72 void Entity_Player::inc_score(int score)
73 {
74 m_score+=score;
75 }
76
check_and_do()77 void Entity_Player::check_and_do()
78 {
79 if(m_just_checked==true)
80 {
81 // m_just_moved=false;
82
83 return;
84 }
85 if(m_is_exited)
86 {
87 kill();
88 return;
89 }
90
91 //adesso controlla che di lato ci sia una casella vuota
92 //oppure un oggetto passabile
93 if(m_direction==STOP)
94 {
95 m_sprite.set_state(SP_STOP);
96 }
97
98 if(current_level->player_push(m_position_x, m_position_y, m_direction))
99 {
100 if(!m_is_snapping)
101 move(m_direction);
102 }
103 else
104 {
105 m_sprite.set_state(SP_STOP);
106 }
107
108 /* Entity* neigh_entity;
109
110 Entity_Handle neigh_entity_id=current_level->get_entity(m_position_x,m_position_y, m_direction);
111 if(neigh_entity_id!=0)
112 {
113 neigh_entity=Entity_Manager::instance()->get_entity(neigh_entity_id);
114 if(neigh_entity->pass_on_me(m_direction))
115 {
116 if(!m_is_snapping)
117 move(m_direction);
118 }
119 else
120 {
121 m_sprite.set_state(SP_STOP);
122 }
123
124 }
125 else
126 {
127 if(!m_is_snapping)
128 {
129 Sample_Manager::instance()->play(SFX_PLAYER_MOVE);
130 move(m_direction);
131 }
132 }
133 */
134 m_direction=STOP;
135
136 m_just_checked=true;
137
138 m_is_snapping=false;
139
140
141 }
142
143
pass_on_me(Direction d)144 bool Entity_Player::pass_on_me(Direction d)
145 {
146 return false;
147 }
148
is_alive()149 bool Entity_Player::is_alive()
150 {
151
152 return m_is_alive;
153
154 }
155
get_score()156 Uint32 Entity_Player::get_score()
157 {
158
159 return m_score;
160
161 }
162
win()163 void Entity_Player::win()
164 {
165 m_is_exited=true;
166
167 DEBOUT("Winner!\n");
168 }
169
is_exited()170 bool Entity_Player::is_exited()
171 {
172 return m_is_exited;
173
174 }
175
hit_from_up(Entity_Handle ntt)176 bool Entity_Player::hit_from_up(Entity_Handle ntt)
177 {
178 current_level->explode(m_position_x,m_position_y);
179
180 kill();
181 return false;
182 }
183
explode()184 bool Entity_Player::explode()
185 {
186 kill();
187 return true;
188 }
189
kill()190 void Entity_Player::kill()
191 {
192 m_exists=false;
193 m_is_alive=false;
194 if(!m_is_exited)
195 {
196 Sample_Manager::instance()->play(SFX_GAME_GAMEOVER);
197 }
198 // set_position(0,0);
199
200 }
201