From 0dc77aacb4d0cdd3debf7efa6a4d357b2a19dc8d Mon Sep 17 00:00:00 2001 From: Tiberiu Chibici Date: Sat, 3 Dec 2016 19:43:28 +0200 Subject: [PATCH] Implemented some tools. Also, implemented inventory. --- assets/items/Tools.items | 14 + assets/levels/Farm.back | 6 +- assets/levels/Farm_Background.csv | 426 +++++++++--------- assets/levels/Farm_Soil.csv | 213 +++++++++ assets/scenes/Game.scene | 7 +- assets/sprites/Player.sprite | 2 +- assets/sprites/items/RustyWateringCan.sprite | 10 + assets/sprites/items/wateringCan.png | Bin 0 -> 289 bytes assets/tilesets/Ground.png | Bin 30733 -> 30374 bytes src/assets/Ground.h | 31 +- src/components/items/Axe.cpp | 43 ++ src/components/items/Axe.h | 34 ++ src/components/items/Giftable.cpp | 9 +- src/components/items/Giftable.h | 7 +- src/components/items/Hoe.cpp | 36 +- src/components/items/Hoe.h | 11 +- src/components/items/ITool.h | 28 ++ src/components/items/Pickaxe.cpp | 43 ++ src/components/items/Pickaxe.h | 34 ++ src/components/items/Scythe.cpp | 43 ++ src/components/items/Scythe.h | 34 ++ src/components/items/WateringCan.cpp | 95 ++++ src/components/items/WateringCan.h | 45 ++ src/components/items/Weapon.cpp | 4 +- src/components/items/Weapon.h | 6 +- src/components/player/PlayerController.cpp | 235 ---------- src/components/player/PlayerInventory.cpp | 173 +++++++ src/components/player/PlayerInventory.h | 59 +++ src/components/player/PlayerMovement.cpp | 160 +++++++ .../{PlayerController.h => PlayerMovement.h} | 26 +- src/math/GameMath.cpp | 29 ++ src/math/GameMath.h | 27 +- src/model/GameObject.cpp | 38 +- src/model/GameObject.h | 71 ++- src/resources/ResourceManager.cpp | 10 + src/resources/Resources.g.h | 54 ++- src/storage/Parsers.cpp | 278 +++++++----- src/storage/Parsers.h | 26 +- 38 files changed, 1713 insertions(+), 654 deletions(-) create mode 100755 assets/levels/Farm_Soil.csv create mode 100644 assets/sprites/items/RustyWateringCan.sprite create mode 100644 assets/sprites/items/wateringCan.png create mode 100644 src/components/items/Axe.cpp create mode 100644 src/components/items/Axe.h create mode 100644 src/components/items/ITool.h create mode 100644 src/components/items/Pickaxe.cpp create mode 100644 src/components/items/Pickaxe.h create mode 100644 src/components/items/Scythe.cpp create mode 100644 src/components/items/Scythe.h create mode 100644 src/components/items/WateringCan.cpp create mode 100644 src/components/items/WateringCan.h delete mode 100644 src/components/player/PlayerController.cpp create mode 100644 src/components/player/PlayerInventory.cpp create mode 100644 src/components/player/PlayerInventory.h create mode 100644 src/components/player/PlayerMovement.cpp rename src/components/player/{PlayerController.h => PlayerMovement.h} (69%) diff --git a/assets/items/Tools.items b/assets/items/Tools.items index bed8e7a..3e6a0f3 100644 --- a/assets/items/Tools.items +++ b/assets/items/Tools.items @@ -15,6 +15,20 @@ + + + + + + + + + diff --git a/assets/sprites/Player.sprite b/assets/sprites/Player.sprite index 6b17c8a..0d0ee29 100644 --- a/assets/sprites/Player.sprite +++ b/assets/sprites/Player.sprite @@ -1,6 +1,6 @@ + anchorX="0.5" anchorY="0.95"> diff --git a/assets/sprites/items/RustyWateringCan.sprite b/assets/sprites/items/RustyWateringCan.sprite new file mode 100644 index 0000000..4a576cd --- /dev/null +++ b/assets/sprites/items/RustyWateringCan.sprite @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/assets/sprites/items/wateringCan.png b/assets/sprites/items/wateringCan.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ab965f9fb7d188bf6a7d9f5ff342ea6d891eb8 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYe6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_z{AYPqxgJ!<5ZxKWQl7;iF1B#Zfaf$gL6@8Vo7R> zLV0FMhJw4NZ$Nk>pEyuar>Bc!h{y4_!3PBoC~$DcU4Jo)=U|@f674U^@%IYD9CK?! zz{TVKOv`8amSJcAD?CumR}DS%$)iR8sgCF)(e1rqvzeni z*Oc*UFJO$0is_pqP?FYO=4txBc@}Fq~vxRF*#xt>q=G%*7%sKOw czx-tr*YSD&W6IA5Ku0lny85}Sb4q9e00&)SQvd(} literal 0 HcmV?d00001 diff --git a/assets/tilesets/Ground.png b/assets/tilesets/Ground.png index 0dac8fd198a996730b4a8dff388953823b47db13..8d0b7b1334b9b7a2ff6596a40bdaa56151760278 100644 GIT binary patch delta 27898 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 QLBKylz4N*S+D= Ground::Dirt && cell <= Ground::DirtVariation8; } - inline bool groundIsDrySoil(int cell) { return cell == Ground::SoilCenter; } + inline bool groundIsDrySoil(int cell) { return cell == Ground::SoilDry; } inline bool groundIsWetSoil(int cell) { return cell == Ground::SoilWet; } } diff --git a/src/components/items/Axe.cpp b/src/components/items/Axe.cpp new file mode 100644 index 0000000..c333375 --- /dev/null +++ b/src/components/items/Axe.cpp @@ -0,0 +1,43 @@ +/* + * Axe.cpp + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#include +#include +#include + +namespace farmlands { +namespace components { +namespace items { + +Axe::Axe() +{ +} + +Axe::~Axe() +{ +} + +model::Component* Axe::clone() +{ + return new Axe(); +} + +void Axe::dump(unsigned level) +{ + for (unsigned i = 0; i < level; i++) + std::cout<<" "; + + std::cout << " .Component: Axe\n"; +} + +void Axe::performAction(float x, float y, model::Direction d) +{ +} + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ diff --git a/src/components/items/Axe.h b/src/components/items/Axe.h new file mode 100644 index 0000000..a8c0f9b --- /dev/null +++ b/src/components/items/Axe.h @@ -0,0 +1,34 @@ +/* + * Axe.h + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#ifndef COMPONENTS_ITEMS_AXE_H_ +#define COMPONENTS_ITEMS_AXE_H_ + +#include +#include + +namespace farmlands { +namespace components { +namespace items { + + class Axe: public model::Component, public ITool + { + public: + Axe(); + virtual ~Axe(); + + virtual model::Component* clone() override; + virtual void dump(unsigned level) override; + + virtual void performAction(float x, float y, model::Direction d) override; + }; + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ + +#endif /* COMPONENTS_ITEMS_AXE_H_ */ diff --git a/src/components/items/Giftable.cpp b/src/components/items/Giftable.cpp index 4fdefaf..e876356 100644 --- a/src/components/items/Giftable.cpp +++ b/src/components/items/Giftable.cpp @@ -26,15 +26,8 @@ model::Component* Giftable::clone() return new Giftable(); } -bool Giftable::canGift(float x, float y, model::Direction d) +void Giftable::performAction(float x, float y, model::Direction d) { - // TODO: implement Giftable::canGift - return false; -} - -void Giftable::offerGift(float x, float y, model::Direction d) -{ - // TODO: implement Giftable::offerGift } void Giftable::dump(unsigned level) diff --git a/src/components/items/Giftable.h b/src/components/items/Giftable.h index 7da2f90..ae101b7 100644 --- a/src/components/items/Giftable.h +++ b/src/components/items/Giftable.h @@ -8,14 +8,14 @@ #ifndef CONTROLLER_ITEMS_GIFTABLE_H_ #define CONTROLLER_ITEMS_GIFTABLE_H_ +#include #include -#include namespace farmlands { namespace components { namespace items { - class Giftable: public model::Component + class Giftable: public model::Component, public ITool { public: Giftable(); @@ -24,8 +24,7 @@ namespace items { virtual model::Component* clone() override; virtual void dump(unsigned level) override; - bool canGift(float x, float y, model::Direction d); - void offerGift(float x, float y, model::Direction d); + virtual void performAction(float x, float y, model::Direction d) override; }; } /* namespace items */ diff --git a/src/components/items/Hoe.cpp b/src/components/items/Hoe.cpp index d524fe3..e76b699 100644 --- a/src/components/items/Hoe.cpp +++ b/src/components/items/Hoe.cpp @@ -5,15 +5,23 @@ * Author: tibi */ +#include +#include #include +#include +#include +#include #include +using namespace farmlands::assets; + namespace farmlands { namespace components { namespace items { Hoe::Hoe() + : m_back(nullptr) { } @@ -34,8 +42,34 @@ void Hoe::dump(unsigned level) std::cout << " .Component: Hoe\n"; } -void Hoe::performAttack(float x, float y, model::Direction d) +void Hoe::onInitialize() { + model::GameObject* root = &GameState::current().scene->root; + + // Find background object + auto it = root->findByComponent(); + Assert(it != root->childrenEnd(), "Can't find background game object."); + + m_back = (*it)->component(); +} + +void Hoe::performAction(float x, float y, model::Direction d) +{ + Assert(m_back, "No background object!!!"); + + // Compute watering position + float digX, digY; + translate(x, y, d, 0.5f, &digX, &digY); + + size_t col = floorf(digX); + size_t row = floorf(digY); + + // See what the cell contains + Cell backCell = m_back->cell(0, row, col); + Cell soilCell = m_back->cell(1, row, col); + + if (groundIsDirt(backCell) && soilCell == Ground::None) + m_back->setCell(1, row, col, Ground::SoilDry); } } /* namespace items */ diff --git a/src/components/items/Hoe.h b/src/components/items/Hoe.h index fc4e3e7..0054766 100644 --- a/src/components/items/Hoe.h +++ b/src/components/items/Hoe.h @@ -8,6 +8,8 @@ #ifndef COMPONENTS_ITEMS_HOE_H_ #define COMPONENTS_ITEMS_HOE_H_ +#include +#include #include #include @@ -15,7 +17,7 @@ namespace farmlands { namespace components { namespace items { - class Hoe: public model::Component + class Hoe: public model::Component, public ITool { public: Hoe(); @@ -24,7 +26,12 @@ namespace items { virtual model::Component* clone() override; virtual void dump(unsigned level) override; - void performAttack(float x, float y, model::Direction d); + virtual void onInitialize() override; + + virtual void performAction(float x, float y, model::Direction d) override; + + private: + Background* m_back; }; } /* namespace items */ diff --git a/src/components/items/ITool.h b/src/components/items/ITool.h new file mode 100644 index 0000000..1510963 --- /dev/null +++ b/src/components/items/ITool.h @@ -0,0 +1,28 @@ +/* + * ITool.h + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#ifndef COMPONENTS_ITEMS_ITOOL_H_ +#define COMPONENTS_ITEMS_ITOOL_H_ + +#include + +namespace farmlands { +namespace components { +namespace items { + + class ITool + { + public: + virtual ~ITool() { } + virtual void performAction(float playerX, float playerY, model::Direction) = 0; + }; + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ + +#endif /* COMPONENTS_ITEMS_ITOOL_H_ */ diff --git a/src/components/items/Pickaxe.cpp b/src/components/items/Pickaxe.cpp new file mode 100644 index 0000000..fec5e25 --- /dev/null +++ b/src/components/items/Pickaxe.cpp @@ -0,0 +1,43 @@ +/* + * Pickaxe.cpp + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#include + +#include + +namespace farmlands { +namespace components { +namespace items { + +Pickaxe::Pickaxe() +{ +} + +Pickaxe::~Pickaxe() +{ +} + +model::Component* Pickaxe::clone() +{ + return new Pickaxe(); +} + +void Pickaxe::dump(unsigned level) +{ + for (unsigned i = 0; i < level; i++) + std::cout<<" "; + + std::cout << " .Component: Pickaxe\n"; +} + +void Pickaxe::performAction(float x, float y, model::Direction d) +{ +} + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ diff --git a/src/components/items/Pickaxe.h b/src/components/items/Pickaxe.h new file mode 100644 index 0000000..aead1fa --- /dev/null +++ b/src/components/items/Pickaxe.h @@ -0,0 +1,34 @@ +/* + * Pickaxe.h + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#ifndef COMPONENTS_ITEMS_PICKAXE_H_ +#define COMPONENTS_ITEMS_PICKAXE_H_ + +#include +#include + +namespace farmlands { +namespace components { +namespace items { + + class Pickaxe: public model::Component, public ITool + { + public: + Pickaxe(); + virtual ~Pickaxe(); + + virtual model::Component* clone() override; + virtual void dump(unsigned level) override; + + virtual void performAction(float x, float y, model::Direction d) override; + }; + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ + +#endif /* COMPONENTS_ITEMS_PICKAXE_H_ */ diff --git a/src/components/items/Scythe.cpp b/src/components/items/Scythe.cpp new file mode 100644 index 0000000..1255591 --- /dev/null +++ b/src/components/items/Scythe.cpp @@ -0,0 +1,43 @@ +/* + * Scythe.cpp + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#include +#include +#include + +namespace farmlands { +namespace components { +namespace items { + +Scythe::Scythe() +{ +} + +Scythe::~Scythe() +{ +} + +model::Component* Scythe::clone() +{ + return new Scythe(); +} + +void Scythe::dump(unsigned level) +{ + for (unsigned i = 0; i < level; i++) + std::cout<<" "; + + std::cout << " .Component: Scythe\n"; +} + +void Scythe::performAction(float x, float y, model::Direction d) +{ +} + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ diff --git a/src/components/items/Scythe.h b/src/components/items/Scythe.h new file mode 100644 index 0000000..c2b1a55 --- /dev/null +++ b/src/components/items/Scythe.h @@ -0,0 +1,34 @@ +/* + * Scythe.h + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#ifndef COMPONENTS_ITEMS_SCYTHE_H_ +#define COMPONENTS_ITEMS_SCYTHE_H_ + +#include +#include + +namespace farmlands { +namespace components { +namespace items { + + class Scythe: public model::Component, public ITool + { + public: + Scythe(); + virtual ~Scythe(); + + virtual model::Component* clone() override; + virtual void dump(unsigned level) override; + + virtual void performAction(float x, float y, model::Direction d) override; + }; + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ + +#endif /* COMPONENTS_ITEMS_SCYTHE_H_ */ diff --git a/src/components/items/WateringCan.cpp b/src/components/items/WateringCan.cpp new file mode 100644 index 0000000..8067974 --- /dev/null +++ b/src/components/items/WateringCan.cpp @@ -0,0 +1,95 @@ +/* + * WateringCan.cpp + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#include +#include +#include +#include +#include + +#include + +using namespace farmlands::assets; + +namespace farmlands { +namespace components { +namespace items { + +WateringCan::WateringCan() + : capacity(10), + amountLeft(10), + m_back(nullptr) +{ +} + +WateringCan::~WateringCan() +{ +} + +model::Component* WateringCan::clone() +{ + WateringCan* clone = new WateringCan(); + clone->capacity = capacity; + clone->amountLeft = amountLeft; + + return clone; +} + +void WateringCan::dump(unsigned level) +{ + for (unsigned i = 0; i < level; i++) + std::cout<<" "; + + std::cout << " .Component: Hoe\n"; +} + +void WateringCan::onInitialize() +{ + model::GameObject* root = &GameState::current().scene->root; + + // Find background object + auto it = root->findByComponent(); + Assert(it != root->childrenEnd(), "Can't find background game object."); + + m_back = (*it)->component(); +} + +void WateringCan::performAction(float x, float y, model::Direction d) +{ + Assert(m_back, "No background object!!!"); + + // Compute watering position + float digX, digY; + translate(x, y, d, 0.5f, &digX, &digY); + + size_t col = floorf(digX); + size_t row = floorf(digY); + + // See what the cell contains + Cell backCell = m_back->cell(0, row, col); + Cell soilCell = m_back->cell(1, row, col); + + // If there is water, fill can + if (backCell == Ground::Water) + { + amountLeft = capacity; + std::cout << "Filled can: " << amountLeft << "\n"; + } + + // If there is dry soil, wet it + if (groundIsDrySoil(soilCell) && amountLeft > 0) + { + m_back->setCell(1, row, col, Ground::SoilWet); + --amountLeft; + + std::cout << "Watering can: " << amountLeft << "\n"; + } +} + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ diff --git a/src/components/items/WateringCan.h b/src/components/items/WateringCan.h new file mode 100644 index 0000000..5c920da --- /dev/null +++ b/src/components/items/WateringCan.h @@ -0,0 +1,45 @@ +/* + * WateringCan.h + * + * Created on: Dec 3, 2016 + * Author: tibi + */ + +#ifndef COMPONENTS_ITEMS_WATERINGCAN_H_ +#define COMPONENTS_ITEMS_WATERINGCAN_H_ + +#include +#include +#include +#include + +namespace farmlands { +namespace components { +namespace items { + + class WateringCan: public model::Component, public ITool + { + public: + WateringCan(); + virtual ~WateringCan(); + + virtual model::Component* clone() override; + virtual void dump(unsigned level) override; + + virtual void onInitialize() override; + + virtual void performAction(float x, float y, model::Direction d) override; + + public: + uint32_t capacity; + uint32_t amountLeft; + + private: + Background* m_back; + }; + +} /* namespace items */ +} /* namespace components */ +} /* namespace farmlands */ + +#endif /* COMPONENTS_ITEMS_WATERINGCAN_H_ */ diff --git a/src/components/items/Weapon.cpp b/src/components/items/Weapon.cpp index 8170d78..de4f76a 100644 --- a/src/components/items/Weapon.cpp +++ b/src/components/items/Weapon.cpp @@ -57,7 +57,7 @@ void Weapon::onUpdateLogic() } } -void Weapon::performAttack(float x, float y, model::Direction d) +void Weapon::performAction(float x, float y, model::Direction d) { if (attackTimeLeft <= 0) { @@ -70,7 +70,7 @@ void Weapon::dump(unsigned level) for (unsigned i = 0; i < level; i++) std::cout<<" "; - std::cout << " .Component: Transform "; + std::cout << " .Component: Weapon "; std::cout << "damage="< +#include #include #include -#include namespace farmlands { namespace components { namespace items { - class Weapon: public model::Component + class Weapon: public model::Component, public ITool { public: Weapon(); @@ -33,7 +33,7 @@ namespace items { /** * Performs everything required to attacking an enemy with a weapon. To be called from player controller. */ - void performAttack(float x, float y, model::Direction d); + virtual void performAction(float x, float y, model::Direction d); // Properties float damage; diff --git a/src/components/player/PlayerController.cpp b/src/components/player/PlayerController.cpp deleted file mode 100644 index 6fac3f0..0000000 --- a/src/components/player/PlayerController.cpp +++ /dev/null @@ -1,235 +0,0 @@ -/* - * PlayerController.cpp - * - * Created on: Nov 27, 2016 - * Author: tibi - */ - -#include -#include -#include -#include -#include -#include -#include -#include