Created
November 20, 2019 20:02
-
-
Save Langerz82/901e0b977caec1e4080819f4f7be08ad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/gamefilesd/level/afterLevelLoad.json b/gamefilesd/level/afterLevelLoad.json | |
index 1b694b6..4ea1661 100755 | |
--- a/gamefilesd/level/afterLevelLoad.json | |
+++ b/gamefilesd/level/afterLevelLoad.json | |
@@ -30,5 +30,12 @@ | |
"then": { "name": "audio.stop", "id": "main" }, | |
"else": { "name": "audio.play", "id": "main" } | |
} | |
- ] | |
+ ], | |
+ "event": { | |
+ "id": "updateAllPlayerStatsTime", | |
+ "action": [ | |
+ "updateAllPlayerStats" | |
+ ], | |
+ "time": 0.05 | |
+ } | |
} | |
\ No newline at end of file | |
diff --git a/gamefilesd/level/map/town/level.json b/gamefilesd/level/map/town/level.json | |
index 13cc623..b97db10 100755 | |
--- a/gamefilesd/level/map/town/level.json | |
+++ b/gamefilesd/level/map/town/level.json | |
@@ -6,6 +6,7 @@ | |
"load": "level/default/town.json", | |
"load": "res/towners/actions.json", | |
"load": "level/map/town/levelObjects.json", | |
+ "load": "level/map/town/monsters.json", | |
"load": "level/map/town/players.json", | |
"load": "level/map/town/level2.json", | |
"load": "level/map/town/levelPassages.json", | |
diff --git a/gamefilesd/level/map/town/level2.json b/gamefilesd/level/map/town/level2.json | |
index 9ac3508..d3a9782 100755 | |
--- a/gamefilesd/level/map/town/level2.json | |
+++ b/gamefilesd/level/map/town/level2.json | |
@@ -3,6 +3,7 @@ | |
"load": ["level/player/%charClass%/defaults.json", "%charName%"], | |
"load": "level/map/town/levelObjects2.json", | |
"load": "level/map/town/items.json", | |
+ "load": "level/map/town/monsters2.json", | |
"load": "level/map/town/players2.json", | |
"load": "level/map/town/quests.json", | |
"action": { | |
diff --git a/src/Game/GameProperties.h b/src/Game/GameProperties.h | |
index 604049b..c53f3eb 100755 | |
--- a/src/Game/GameProperties.h | |
+++ b/src/Game/GameProperties.h | |
@@ -10,9 +10,10 @@ struct AnimationSpeed | |
{ | |
sf::Time animation; | |
sf::Time walk; | |
+ sf::Time attack; | |
- AnimationSpeed() noexcept : animation(sf::microseconds(200000)), walk(sf::microseconds(40000)) {} | |
- AnimationSpeed(sf::Time animation_, sf::Time walk_) noexcept : animation(animation_), walk(walk_) {} | |
+ AnimationSpeed() noexcept : animation(sf::microseconds(200000)), walk(sf::microseconds(40000)), attack(sf::microseconds(1000000)) {} | |
+ AnimationSpeed(sf::Time animation_, sf::Time walk_, sf::Time attack_) noexcept : animation(animation_), walk(walk_), attack(attack_) {} | |
}; | |
enum class InventoryPosition : uint32_t | |
diff --git a/src/Game/Player.cpp b/src/Game/Player.cpp | |
index 8309cdc..742efc1 100755 | |
--- a/src/Game/Player.cpp | |
+++ b/src/Game/Player.cpp | |
@@ -13,6 +13,7 @@ Player::Player(const PlayerClass* class__, const Level& level) : LevelObject(cla | |
sprite.setOutline(class__->Outline(), class__->OutlineIgnore()); | |
calculateRange(); | |
applyDefaults(level); | |
+ lastAttackTime = sf::Time::Zero; | |
} | |
void Player::calculateRange() | |
@@ -315,10 +316,17 @@ void Player::updateAI(Level& level) | |
default: | |
break; | |
} | |
+ | |
auto plr = level.getCurrentPlayer(); | |
if (plr != nullptr) | |
{ | |
+ setTarget(plr); | |
setWalkPath(level.Map().getPath(mapPosition, plr->MapPosition()), false); | |
+ float dist = abs(mapPosition.x - plr->MapPosition().x) + abs(mapPosition.y - plr->MapPosition().y); | |
+ if (dist <= 1.0f) { | |
+ setStatus(PlayerStatus::Attack); | |
+ } | |
+ | |
} | |
} | |
@@ -331,6 +339,47 @@ void Player::updateWalk(Game& game, Level& level) | |
void Player::updateAttack(Game& game, Level& level) | |
{ | |
updateAnimation(game); | |
+ | |
+ sf::Time elapsedTime = game.getTotalElapsedTime(); | |
+ | |
+ if ((elapsedTime - lastAttackTime) < speed.attack) | |
+ return; | |
+ | |
+ lastAttackTime = elapsedTime; | |
+ | |
+ if (isAI()) | |
+ { | |
+ auto plr = getTarget(); | |
+ if (plr != nullptr) | |
+ { | |
+ auto toHit = Class()->getActualToHit(*this, 0); | |
+ bool hasHit = (rand() % 100) <= toHit; | |
+ if (hasHit) | |
+ { | |
+ auto damage = Class()->getActualDamage(*this, 0); | |
+ plr->LifeDamage(plr->lifeDamage + damage); | |
+ | |
+ setAnimation(PlayerAnimation::Attack1); | |
+ } | |
+ } | |
+ } | |
+ else | |
+ { | |
+ auto plr = level.getPlayerOrCurrent(level.getClickedObject()->getId()); | |
+ if (plr != nullptr) | |
+ { | |
+ auto toHit = Class()->getActualToHit(*this, 0); | |
+ bool hasHit = (rand() % 100) <= toHit; | |
+ if (hasHit) | |
+ { | |
+ auto damage = Class()->getActualDamage(*this, 0); | |
+ plr->LifeDamage(plr->lifeDamage + damage); | |
+ | |
+ setAnimation(PlayerAnimation::Attack1); | |
+ } | |
+ } | |
+ } | |
+ | |
} | |
void Player::updateDead(Game& game, Level& level) | |
diff --git a/src/Game/Player.h b/src/Game/Player.h | |
index 5c0b82c..6a51b7c 100755 | |
--- a/src/Game/Player.h | |
+++ b/src/Game/Player.h | |
@@ -34,13 +34,16 @@ private: | |
size_t textureIdx{ 0 }; | |
AnimationSpeed speed; | |
- AnimationSpeed defaultSpeed{ sf::Time::Zero, sf::Time::Zero }; | |
+ AnimationSpeed defaultSpeed{ sf::Time::Zero, sf::Time::Zero, sf::Time::Zero }; | |
sf::Time currentWalkTime; | |
+ sf::Time lastAttackTime; | |
+ | |
bool useAI{ false }; | |
std::shared_ptr<Item> selectedItem; | |
const SpellInstance* selectedSpell{ nullptr }; | |
+ Player* targetPlayer; | |
Inventories<(size_t)PlayerInventory::Size> inventories; | |
size_t bodyInventoryIdx{ (size_t)PlayerInventory::Size }; | |
@@ -225,6 +228,9 @@ public: | |
void SelectedSpell(const std::string& id) noexcept; | |
+ Player* getTarget() { return targetPlayer; } | |
+ void setTarget(Player* player) { targetPlayer = player; } | |
+ | |
Inventory& getInventory(PlayerInventory inv) noexcept { return inventories[(size_t)inv]; } | |
const Inventory& getInventory(PlayerInventory inv) const noexcept { return inventories[(size_t)inv]; } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment