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