Skip to content

Commit

Permalink
Improvements to object type support
Browse files Browse the repository at this point in the history
  • Loading branch information
Vankata453 committed Jul 16, 2023
1 parent 9cfad1a commit 3dcc414
Show file tree
Hide file tree
Showing 20 changed files with 136 additions and 76 deletions.
20 changes: 14 additions & 6 deletions src/badguy/crusher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ Crusher::Crusher(const ReaderMapping& reader) :
m_whites()
{
parse_type(reader);
on_type_change(-1);

reader.get("sideways", m_sideways);
// TODO: crusher hitting deserves its own sounds-
Expand All @@ -80,17 +79,26 @@ Crusher::get_types() const
};
}

std::string
Crusher::get_default_sprite_name() const
{
const std::string size_prefix = (m_ic_size == NORMAL ? "krush" : "krosh");
switch (m_ic_type)
{
case CORRUPTED:
return "images/creatures/crusher/corrupted/" + size_prefix + "_corrupt.sprite";
default:
return "images/creatures/crusher/" + size_prefix + "_ice.sprite";
}
}

void
Crusher::on_type_change(int old_type)
{
m_ic_size = (m_type == 0 || m_type == 2 ? NORMAL : LARGE);
m_ic_type = (m_type == 0 || m_type == 1 ? ICE : CORRUPTED);

if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
{
const std::string size_prefix = (m_ic_size == NORMAL ? "krush" : "krosh");
change_sprite("images/creatures/crusher/" + (m_ic_type == CORRUPTED ? "corrupted/" + size_prefix + "_corrupt" : size_prefix + "_ice") + ".sprite");
}
MovingSprite::on_type_change();
}

HitResponse
Expand Down
1 change: 1 addition & 0 deletions src/badguy/crusher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class Crusher final : public MovingSprite

virtual ObjectSettings get_settings() override;
GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

virtual void on_flip(float height) override;

Expand Down
18 changes: 13 additions & 5 deletions src/badguy/dispenser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,6 @@ Dispenser::Dispenser(const ReaderMapping& reader) :
// if (badguys.size() <= 0)
// throw std::runtime_error("No badguys in dispenser.");

set_correct_action();

m_col.m_bbox.set_size(m_sprite->get_current_hitbox_width(), m_sprite->get_current_hitbox_height());
m_countMe = false;
}
Expand Down Expand Up @@ -343,9 +341,6 @@ Dispenser::is_portable() const
void
Dispenser::set_correct_action()
{
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite("images/creatures/dispenser/" + (m_type == DispenserType::POINT ? "invisible" : type_value_to_id(m_type)) + ".sprite");

switch (m_type)
{
case DispenserType::CANNON:
Expand All @@ -362,6 +357,7 @@ Dispenser::set_correct_action()
void
Dispenser::on_type_change(int old_type)
{
MovingSprite::on_type_change();
set_correct_action();
}

Expand Down Expand Up @@ -395,6 +391,18 @@ Dispenser::get_types() const
};
}

std::string
Dispenser::get_default_sprite_name() const
{
switch (m_type)
{
case POINT:
return "images/creatures/dispenser/invisible.sprite";
default:
return "images/creatures/dispenser/" + type_value_to_id(m_type) + ".sprite";
}
}

void
Dispenser::on_flip(float height)
{
Expand Down
1 change: 1 addition & 0 deletions src/badguy/dispenser.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class Dispenser final : public BadGuy,

virtual ObjectSettings get_settings() override;
virtual GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

virtual void on_flip(float height) override;

Expand Down
16 changes: 13 additions & 3 deletions src/badguy/mrtree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ MrTree::MrTree(const ReaderMapping& reader) :
"images/objects/lightmap_light/lightmap_light-large.sprite")
{
parse_type(reader);
on_type_change(-1);

max_drop_height = 16;
SoundManager::current()->preload("sounds/mr_tree.ogg");
Expand All @@ -53,11 +52,22 @@ MrTree::get_types() const
};
}

std::string
MrTree::get_default_sprite_name() const
{
switch (m_type)
{
case CORRUPTED:
return "images/creatures/mr_tree/corrupted/haunted_tree.sprite";
default:
return "images/creatures/mr_tree/mr_tree.sprite";
}
}

void
MrTree::on_type_change(int old_type)
{
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite("images/creatures/mr_tree/" + std::string(m_type == CORRUPTED ? "corrupted/haunted_tree" : "mr_tree") + ".sprite");
MovingSprite::on_type_change();

switch (m_type)
{
Expand Down
1 change: 1 addition & 0 deletions src/badguy/mrtree.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class MrTree final : public WalkingBadguy
virtual std::string get_display_name() const override { return display_name(); }

GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

protected:
virtual bool collision_squished(GameObject& object) override;
Expand Down
14 changes: 9 additions & 5 deletions src/badguy/snail.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ Snail::Snail(const ReaderMapping& reader) :
squishcount(0)
{
parse_type(reader);
on_type_change(-1);

walk_speed = 80;
max_drop_height = 600;
Expand All @@ -72,11 +71,16 @@ Snail::get_types() const
};
}

void
Snail::on_type_change(int old_type)
std::string
Snail::get_default_sprite_name() const
{
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite("images/creatures/snail/" + std::string(m_type == Type::CORRUPTED ? "corrupted/corrupted_" : "") + "snail.sprite");
switch (m_type)
{
case CORRUPTED:
return "images/creatures/snail/corrupted/corrupted_snail.sprite";
default:
return "images/creatures/snail/snail.sprite";
}
}

void
Expand Down
3 changes: 1 addition & 2 deletions src/badguy/snail.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class Snail final :
virtual std::string get_display_name() const override { return display_name(); }

virtual GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

virtual bool is_portable() const override;
virtual void ungrab(MovingObject& , Direction dir_) override;
Expand All @@ -52,8 +53,6 @@ class Snail final :
protected:
virtual bool collision_squished(GameObject& object) override;

void on_type_change(int old_type) override;

private:
void be_normal(); /**< switch to state STATE_NORMAL */
void be_guard(); /**< switch to state STATE_GUARD_SHAKE (prepare for STATE_GUARD) */
Expand Down
13 changes: 9 additions & 4 deletions src/badguy/stalactite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,16 @@ Stalactite::get_types() const
};
}

void
Stalactite::on_type_change(int old_type)
std::string
Stalactite::get_default_sprite_name() const
{
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite("images/creatures/stalactite/" + std::string(m_type == StalactiteType::ROCK ? "rock_" : "") + "stalactite.sprite");
switch (m_type)
{
case ROCK:
return "images/creatures/stalactite/rock_stalactite.sprite";
default:
return "images/creatures/stalactite/stalactite.sprite";
}
}

void
Expand Down
4 changes: 1 addition & 3 deletions src/badguy/stalactite.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class Stalactite : public BadGuy
virtual HitResponse collision_bullet(Bullet& bullet, const CollisionHit& hit) override;

virtual GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

virtual void kill_fall() override;
virtual void draw(DrawingContext& context) override;
Expand All @@ -45,9 +46,6 @@ class Stalactite : public BadGuy

void squish();

protected:
void on_type_change(int old_type) override;

protected:
enum StalactiteType {
ICE,
Expand Down
17 changes: 13 additions & 4 deletions src/badguy/viciousivy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,12 @@ ViciousIvy::ViciousIvy(const ReaderMapping& reader) :
m_fall_speed()
{
parse_type(reader);
on_type_change(-1);
}

ViciousIvy::ViciousIvy(const Vector& pos, Direction d) :
WalkingBadguy(pos, d, "images/creatures/vicious_ivy/vicious_ivy.sprite", "left", "right"),
m_fall_speed()
{
on_type_change(-1);
}

GameObjectTypes
Expand All @@ -48,11 +46,22 @@ ViciousIvy::get_types() const
};
}

std::string
ViciousIvy::get_default_sprite_name() const
{
switch (m_type)
{
case CORRUPTED:
return "images/creatures/vicious_ivy/corrupted/rotten_ivy.sprite";
default:
return "images/creatures/vicious_ivy/vicious_ivy.sprite";
}
}

void
ViciousIvy::on_type_change(int old_type)
{
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite("images/creatures/vicious_ivy/" + std::string(m_type == CORRUPTED ? "corrupted/rotten_ivy" : "vicious_ivy") + ".sprite");
MovingSprite::on_type_change();

switch (m_type)
{
Expand Down
1 change: 1 addition & 0 deletions src/badguy/viciousivy.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class ViciousIvy final : public WalkingBadguy
virtual std::string get_display_name() const override { return display_name(); }

GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

virtual void active_update(float dt_sec) override;
virtual bool is_snipable() const override { return true; }
Expand Down
16 changes: 13 additions & 3 deletions src/badguy/walkingleaf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ WalkingLeaf::WalkingLeaf(const ReaderMapping& reader) :
m_fall_speed()
{
parse_type(reader);
on_type_change(-1);

max_drop_height = 16;
}
Expand All @@ -38,11 +37,22 @@ WalkingLeaf::get_types() const
};
}

std::string
WalkingLeaf::get_default_sprite_name() const
{
switch (m_type)
{
case CORRUPTED:
return "images/creatures/walkingleaf/corrupted/rotten_leaf.sprite";
default:
return "images/creatures/walkingleaf/walkingleaf.sprite";
}
}

void
WalkingLeaf::on_type_change(int old_type)
{
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite("images/creatures/walkingleaf/" + std::string(m_type == CORRUPTED ? "corrupted/rotten_leaf" : "walkingleaf") + ".sprite");
MovingSprite::on_type_change();

switch (m_type)
{
Expand Down
1 change: 1 addition & 0 deletions src/badguy/walkingleaf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class WalkingLeaf final : public WalkingBadguy
virtual std::string get_display_name() const override { return display_name(); }

GameObjectTypes get_types() const override;
std::string get_default_sprite_name() const override;

virtual void active_update(float dt_sec) override;
virtual bool is_snipable() const override { return true; }
Expand Down
31 changes: 8 additions & 23 deletions src/object/moving_sprite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,7 @@ MovingSprite::MovingSprite(const ReaderMapping& reader, const std::string& sprit
}
else
{
if (!change_sprite(m_sprite_name)) // If sprite change fails, change back to default.
{
m_sprite = SpriteManager::current()->create(m_default_sprite_name);
m_sprite_found = false;
}
change_sprite(m_sprite_name);
}

update_hitbox();
Expand Down Expand Up @@ -120,10 +116,11 @@ MovingSprite::has_found_sprite()
return found;
}

std::string
MovingSprite::get_sprite_name() const
void
MovingSprite::on_type_change(int old_type)
{
return m_sprite_name;
if (!has_found_sprite()) // Change sprite only if a custom sprite has not just been loaded.
change_sprite(get_default_sprite_name());
}

void
Expand Down Expand Up @@ -179,31 +176,19 @@ MovingSprite::set_action(const std::string& action, int loops, AnchorPoint ancho
m_sprite->get_current_hitbox_height(), anchorPoint));
}

bool
void
MovingSprite::change_sprite(const std::string& new_sprite_name)
{
SpritePtr new_sprite;
try
{
new_sprite = SpriteManager::current()->create(m_sprite_name);
}
catch (std::exception& err)
{
log_warning << "Sprite change failed: Sprite '" << new_sprite_name << "' cannot be loaded: " << err.what() << std::endl;
return false;
}

m_sprite = std::move(new_sprite);
m_sprite = SpriteManager::current()->create(new_sprite_name);
m_sprite_name = new_sprite_name;
return true;
}

ObjectSettings
MovingSprite::get_settings()
{
ObjectSettings result = MovingObject::get_settings();

result.add_sprite(_("Sprite"), &m_sprite_name, "sprite", m_default_sprite_name);
result.add_sprite(_("Sprite"), &m_sprite_name, "sprite", get_default_sprite_name());

result.reorder({"sprite", "x", "y"});

Expand Down
Loading

0 comments on commit 3dcc414

Please sign in to comment.