Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/items
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-08-18 18:06:00 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-08-18 18:06:00 +1000
commit0c2015118be46e2670171fc64dc02d22d56789b7 (patch)
tree1ce63c9968406a8c9dc16d1ccd04eeaad986be66 /source/game/items
parentaa0ef06ac64542183a6f66bbfcad7d4cb45e9fd9 (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.cpp38
-rw-r--r--source/game/items/StarArmors.hpp11
-rw-r--r--source/game/items/StarTools.cpp13
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)) {