25
25
#include " util/reader_mapping.hpp"
26
26
27
27
Shard::Shard (const ReaderMapping& reader) :
28
- StickyObject(reader, " images/creatures/crystallo/shard.sprite" , LAYER_TILES - 2 , COLGROUP_MOVING),
29
- m_physic(),
30
- m_stick_timer()
28
+ MovingSprite(reader, " images/creatures/crystallo/shard.sprite" , LAYER_TILES - 2 , COLGROUP_MOVING),
29
+ m_physic()
31
30
{
32
31
m_physic.enable_gravity (true );
33
32
SoundManager::current ()->preload (" sounds/crystallo-shardhit.ogg" );
34
33
}
35
34
36
35
Shard::Shard (const Vector& pos, const Vector& velocity, const std::string& sprite) :
37
- StickyObject(pos, sprite, LAYER_TILES - 2 , COLGROUP_MOVING),
38
- m_physic(),
39
- m_stick_timer()
36
+ MovingSprite(pos, sprite, LAYER_TILES - 2 , COLGROUP_MOVING),
37
+ m_physic()
40
38
{
41
39
m_physic.enable_gravity (true );
42
40
m_physic.set_velocity (velocity);
@@ -47,29 +45,19 @@ Shard::Shard(const Vector& pos, const Vector& velocity, const std::string& sprit
47
45
void
48
46
Shard::update (float dt_sec)
49
47
{
50
- m_sticky = true ;
51
-
52
- if (m_physic.get_velocity () != Vector (0 .f , 0 .f ) && !m_sticking)
48
+ if (m_physic.get_velocity () != Vector (0 .f , 0 .f ))
53
49
m_sprite->set_angle (math::degrees (math::angle (Vector (m_physic.get_velocity_x (), m_physic.get_velocity_y ()))));
54
- if (m_stick_timer.check ())
55
- remove_me ();
56
50
57
51
m_col.set_movement (m_physic.get_movement (dt_sec));
58
52
59
- StickyObject ::update (dt_sec);
53
+ MovingSprite ::update (dt_sec);
60
54
}
61
55
62
56
void
63
57
Shard::collision_solid (const CollisionHit& hit)
64
58
{
65
- m_physic.set_velocity (0 .f , 0 .f );
66
- m_physic.set_acceleration (0 .f , 0 .f );
67
- m_physic.enable_gravity (hit.bottom );
68
- if (!m_stick_timer.started ())
69
- {
70
- m_stick_timer.start (5 .f );
71
- SoundManager::current ()->play (" sounds/crystallo-shardhit.ogg" , get_pos ());
72
- }
59
+ SoundManager::current ()->play (" sounds/crystallo-shardhit.ogg" , get_pos ());
60
+ remove_me ();
73
61
}
74
62
75
63
HitResponse
@@ -82,11 +70,17 @@ Shard::collision(MovingObject& other, const CollisionHit&)
82
70
// kill badguys
83
71
auto badguy = dynamic_cast <BadGuy*>(&other);
84
72
if (badguy != nullptr )
73
+ {
85
74
badguy->kill_fall ();
75
+ remove_me ();
76
+ }
86
77
// kill players
87
78
auto player = dynamic_cast <Player*>(&other);
88
79
if (player != nullptr )
80
+ {
89
81
player->kill (false );
82
+ remove_me ();
83
+ }
90
84
return ABORT_MOVE;
91
85
}
92
86
0 commit comments