BossFightUI now loads out of LevelManager and is treated like a normal level. This also adds a prototype for a different kind of 'stationary' boss to prototype its motions.

master
Zed A. Shaw 5 days ago
parent 6e8aa48332
commit eb8fb82837
  1. 22
      assets/bosses.json
  2. 4
      assets/config.json
  3. BIN
      assets/devils_fingers_background.jpg
  4. BIN
      assets/devils_fingers_sprite.png
  5. 6
      boss_fight_ui.cpp
  6. 3
      components.cpp
  7. 6
      components.hpp
  8. 2
      easings.hpp
  9. 2
      levelmanager.cpp

@ -1,12 +1,28 @@
{ {
"RAT_KING": { "RAT_KING": {
"background": "boss_fight_background",
"weapon_sound": "Sword_Hit_2",
"components": [ "components": [
{"_type": "BossFight", "background": "boss_fight_background", "weapon_sound": "Sword_Hit_2"},
{"_type": "Combat", "hp": 20, "max_hp": 20, "damage": 20, "dead": false}, {"_type": "Combat", "hp": 20, "max_hp": 20, "damage": 20, "dead": false},
{"_type": "Animation", "easing": 2, "ease_rate": 0.2, "scale": 0.2, "simple": false, "frames": 2, "speed": 0.02, "scale": 0.2}, {"_type": "Animation", "easing": 3, "ease_rate": 0.2, "scale": 0.2, "simple": false, "frames": 2, "speed": 0.02, "scale": 0.2},
{"_type": "Sprite", "name": "rat_king_boss", "width": 720, "height": 720, "scale": 0.8}, {"_type": "Sprite", "name": "rat_king_boss", "width": 720, "height": 720, "scale": 0.8},
{"_type": "Sound", "attack": "Marmot_Scream_1", "death": "Creature_Death_1"} {"_type": "Sound", "attack": "Marmot_Scream_1", "death": "Creature_Death_1"}
] ]
},
"DEVILS_FINGERS": {
"components": [
{"_type": "BossFight",
"background": "devils_fingers_background",
"weapon_sound": "Sword_Hit_2"
},
{"_type": "Combat", "hp": 20, "max_hp": 20, "damage": 20, "dead": false},
{"_type": "Animation", "easing": 0, "ease_rate": 0.1, "scale": 0.2, "simple": true, "frames": 2, "speed": 0.02, "scale": 0.2},
{"_type": "Sprite",
"name": "devils_fingers_sprite",
"width": 720,
"height": 720,
"scale": 1.0
},
{"_type": "Sound", "attack": "Spider_1", "death": "Spider_2"}
]
} }
} }

@ -46,7 +46,9 @@
"axe_ranger": "assets/axe_ranger-256.png", "axe_ranger": "assets/axe_ranger-256.png",
"hairy_spider": "assets/hairy_spider-256.png", "hairy_spider": "assets/hairy_spider-256.png",
"down_the_well": "assets/down_the_well.jpg", "down_the_well": "assets/down_the_well.jpg",
"boss_fight_background": "assets/rat_king_boss_fight_background.jpg" "boss_fight_background": "assets/rat_king_boss_fight_background.jpg",
"devils_fingers_background": "assets/devils_fingers_background.jpg",
"devils_fingers_sprite": "assets/devils_fingers_sprite.png"
}, },
"worldgen": { "worldgen": {
"enemy_probability": 80, "enemy_probability": 80,

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

@ -47,10 +47,8 @@ namespace gui {
} }
void BossFightUI::configure_background() { void BossFightUI::configure_background() {
// FIX ME auto& boss = $world->get<components::BossFight>($boss_id);
// auto& config = $world->get_the<components::GameConfig>(); $boss_background = textures::get(boss.background);
std::string boss_bg = "boss_fight_background";
$boss_background = textures::get(boss_bg);
$boss_background.sprite->setPosition({BOSS_VIEW_X, BOSS_VIEW_Y}); $boss_background.sprite->setPosition({BOSS_VIEW_X, BOSS_VIEW_Y});
$status.world().set_the<Background>({$status.$parser}); $status.world().set_the<Background>({$status.$parser});
} }

@ -12,6 +12,7 @@ namespace components {
} }
void configure(ComponentMap& component_map) { void configure(ComponentMap& component_map) {
components::enroll<BossFight>(component_map);
components::enroll<Combat>(component_map); components::enroll<Combat>(component_map);
components::enroll<Loot>(component_map); components::enroll<Loot>(component_map);
components::enroll<Position>(component_map); components::enroll<Position>(component_map);
@ -36,6 +37,8 @@ namespace components {
float Animation::twitching() { float Animation::twitching() {
switch(easing) { switch(easing) {
case ease::NONE:
return 0.0;
case ease::SINE: case ease::SINE:
return ease::sine(float(frames) / subframe * ease_rate); return ease::sine(float(frames) / subframe * ease_rate);
case ease::OUT_CIRC: case ease::OUT_CIRC:

@ -67,6 +67,11 @@ namespace components {
int hp = 10; int hp = 10;
}; };
struct BossFight {
std::string background;
std::string weapon_sound;
};
struct Combat { struct Combat {
int hp; int hp;
int max_hp; int max_hp;
@ -122,6 +127,7 @@ namespace components {
template <typename T> struct NameOf; template <typename T> struct NameOf;
ENROLL_COMPONENT(Tile, display, foreground, background); ENROLL_COMPONENT(Tile, display, foreground, background);
ENROLL_COMPONENT(BossFight, background, weapon_sound);
ENROLL_COMPONENT(Sprite, name, width, height, scale); ENROLL_COMPONENT(Sprite, name, width, height, scale);
ENROLL_COMPONENT(Curative, hp); ENROLL_COMPONENT(Curative, hp);
ENROLL_COMPONENT(LightSource, strength, radius); ENROLL_COMPONENT(LightSource, strength, radius);

@ -4,7 +4,7 @@
namespace ease { namespace ease {
enum Style { enum Style {
SINE, OUT_CIRC, OUT_BOUNCE, IN_OUT_BACK, NONE NONE, SINE, OUT_CIRC, OUT_BOUNCE, IN_OUT_BACK
}; };
inline double sine(double x) { inline double sine(double x) {

@ -39,7 +39,7 @@ shared_ptr<gui::BossFightUI> LevelManager::create_bossfight(shared_ptr<DinkyECS:
dbc::check(prev_world != nullptr, "Starter world for boss fights can't be null."); dbc::check(prev_world != nullptr, "Starter world for boss fights can't be null.");
auto world = clone_load_world(prev_world); auto world = clone_load_world(prev_world);
auto& config = prev_world->get_the<GameConfig>(); auto& config = prev_world->get_the<GameConfig>();
auto& boss_data = config.bosses["RAT_KING"]; auto& boss_data = config.bosses["DEVILS_FINGERS"];
auto boss_id = world->entity(); auto boss_id = world->entity();
components::configure_entity($components, *world, boss_id, boss_data["components"]); components::configure_entity($components, *world, boss_id, boss_data["components"]);

Loading…
Cancel
Save