diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-08-18 18:06:00 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-08-18 18:06:00 +1000 |
commit | 0c2015118be46e2670171fc64dc02d22d56789b7 (patch) | |
tree | 1ce63c9968406a8c9dc16d1ccd04eeaad986be66 /source/game/items | |
parent | aa0ef06ac64542183a6f66bbfcad7d4cb45e9fd9 (diff) |
Armor Item improvements (& other misc)
TODO: Make option to return to previewing with dummy
Diffstat (limited to 'source/game/items')
-rw-r--r-- | source/game/items/StarArmors.cpp | 38 | ||||
-rw-r--r-- | source/game/items/StarArmors.hpp | 11 | ||||
-rw-r--r-- | source/game/items/StarTools.cpp | 13 |
3 files changed, 47 insertions, 15 deletions
diff --git a/source/game/items/StarArmors.cpp b/source/game/items/StarArmors.cpp index 354113d..0f8ceb4 100644 --- a/source/game/items/StarArmors.cpp +++ b/source/game/items/StarArmors.cpp @@ -10,7 +10,7 @@ namespace Star { -ArmorItem::ArmorItem(Json const& config, String const& directory, Json const& data) : Item(config, directory, data) { +ArmorItem::ArmorItem(Json const& config, String const& directory, Json const& data) : Item(config, directory, data), SwingableItem(config) { refreshStatusEffects(); m_effectSources = jsonToStringSet(instanceValue("effectSources", JsonArray())); m_techModule = instanceValue("techModule", "").toString(); @@ -36,6 +36,20 @@ StringSet ArmorItem::effectSources() const { return m_effectSources; } +List<Drawable> ArmorItem::drawables() const { + auto drawables = iconDrawables(); + Drawable::scaleAll(drawables, 1.0f / TilePixels); + Drawable::translateAll(drawables, -handPosition() / TilePixels); + return drawables; +} + +float ArmorItem::getAngle(float aimAngle) { + return -25.0f * Constants::deg2rad; +} + +void ArmorItem::fire(FireMode mode, bool shifting, bool edgeTriggered) {} +void ArmorItem::fireTriggered() {} + List<String> const& ArmorItem::colorOptions() { return m_colorOptions; } @@ -113,9 +127,9 @@ Directives const& HeadArmor::maskDirectives() const { List<Drawable> HeadArmor::preview(PlayerPtr const& viewer) const { Gender gender = viewer ? viewer->gender() : Gender::Male; - Humanoid humanoid = Humanoid::makeDummy(gender); - //Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); - return humanoid.renderDummy(gender, this); + //Humanoid humanoid = Humanoid::makeDummy(gender); + Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); + return humanoid.renderDummy(gender, this, nullptr, nullptr, nullptr); } ChestArmor::ChestArmor(Json const& config, String const& directory, Json const& data) @@ -158,9 +172,9 @@ String const& ChestArmor::backSleeveFrameset(Gender gender) const { List<Drawable> ChestArmor::preview(PlayerPtr const& viewer) const { Gender gender = viewer ? viewer->gender() : Gender::Male; - Humanoid humanoid = Humanoid::makeDummy(gender); - //Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); - return humanoid.renderDummy(gender, nullptr, this); + //Humanoid humanoid = Humanoid::makeDummy(gender); + Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); + return humanoid.renderDummy(gender, nullptr, this, nullptr, nullptr); } LegsArmor::LegsArmor(Json const& config, String const& directory, Json const& data) @@ -182,9 +196,9 @@ String const& LegsArmor::frameset(Gender gender) const { List<Drawable> LegsArmor::preview(PlayerPtr const& viewer) const { Gender gender = viewer ? viewer->gender() : Gender::Male; - Humanoid humanoid = Humanoid::makeDummy(gender); - //Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); - return humanoid.renderDummy(gender, nullptr, nullptr, this); + //Humanoid humanoid = Humanoid::makeDummy(gender); + Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); + return humanoid.renderDummy(gender, nullptr, nullptr, this, nullptr); } BackArmor::BackArmor(Json const& config, String const& directory, Json const& data) @@ -206,8 +220,8 @@ String const& BackArmor::frameset(Gender gender) const { List<Drawable> BackArmor::preview(PlayerPtr const& viewer) const { Gender gender = viewer ? viewer->gender() : Gender::Male; - Humanoid humanoid = Humanoid::makeDummy(gender); - //Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); + //Humanoid humanoid = Humanoid::makeDummy(gender); + Humanoid humanoid = viewer ? *viewer->humanoid() : Humanoid::makeDummy(gender); return humanoid.renderDummy(gender, nullptr, nullptr, nullptr, this); } diff --git a/source/game/items/StarArmors.hpp b/source/game/items/StarArmors.hpp index 70bca6f..0cee553 100644 --- a/source/game/items/StarArmors.hpp +++ b/source/game/items/StarArmors.hpp @@ -6,7 +6,7 @@ #include "StarStatusEffectItem.hpp" #include "StarEffectSourceItem.hpp" #include "StarPreviewableItem.hpp" - +#include "StarSwingableItem.hpp" namespace Star { STAR_CLASS(ArmorItem); @@ -15,7 +15,7 @@ STAR_CLASS(ChestArmor); STAR_CLASS(LegsArmor); STAR_CLASS(BackArmor); -class ArmorItem : public Item, public StatusEffectItem, public EffectSourceItem { +class ArmorItem : public Item, public EffectSourceItem, public SwingableItem { public: ArmorItem(Json const& config, String const& directory, Json const& data); virtual ~ArmorItem() {} @@ -23,6 +23,13 @@ public: virtual List<PersistentStatusEffect> statusEffects() const override; virtual StringSet effectSources() const override; + virtual List<Drawable> drawables() const override; + + virtual float getAngle(float aimAngle) override; + + virtual void fire(FireMode mode, bool shifting, bool edgeTriggered) override; + virtual void fireTriggered() override; + List<String> const& colorOptions(); Directives const& directives() const; diff --git a/source/game/items/StarTools.cpp b/source/game/items/StarTools.cpp index 2e0d994..602e554 100644 --- a/source/game/items/StarTools.cpp +++ b/source/game/items/StarTools.cpp @@ -337,6 +337,14 @@ BeamMiningTool::BeamMiningTool(Json const& config, String const& directory, Json m_blockVolume = assets->json("/sfx.config:miningBlockVolume").toFloat(); m_endType = EndType::Object; + if (auto jRate = instanceValue("scaleRate")) { + if (jRate.canConvert(Json::Type::Float)) { + float rate = jRate.toFloat(); + m_tileDamage /= rate; + m_cooldownTime /= rate; + } + } + m_inhandStatusEffects = instanceValue("inhandStatusEffects", JsonArray()).toArray().transformed(jsonToPersistentStatusEffect); } @@ -359,7 +367,10 @@ List<PreviewTile> BeamMiningTool::preview(bool shifting) const { if (ownerp && worldp) { if (ownerp->isAdmin() || ownerp->inToolRange()) { - Vec3B light = Color::rgba(ownerp->favoriteColor()).toRgb(); + Color lightColor = Color::rgba(ownerp->favoriteColor()); + if (!ready()) + lightColor *= Color::rgbaf(0.75f, 0.75f, 0.75f, 1.0f); + Vec3B light = lightColor.toRgb(); int radius = !shifting ? m_blockRadius : m_altBlockRadius; for (auto pos : tileAreaBrush(radius, ownerp->aimPosition(), true)) { if (worldp->tileIsOccupied(pos, TileLayer::Foreground, true)) { |