diff --git a/src/game/cow.cpp b/src/game/cow.cpp index ecc6def..b71bf02 100644 --- a/src/game/cow.cpp +++ b/src/game/cow.cpp @@ -1,4 +1,5 @@ #include "cow.hpp" +#include "utils/random.hpp" static game::CharacterTuning GetCowTuning() { @@ -10,11 +11,61 @@ static game::CharacterTuning GetCowTuning() game::Cow::Cow(World& world, const glm::vec3& position, float yaw) : Animal(world, GetCowTuning(), position, yaw) { + walk_speed_ = 3.0f; + turn_speed_ = 3.0f; + SetUseMessage("vlízt na krávu"); - AddAnimalSeat(glm::vec3(0.0f, -0.098926f, 0.447576f)); - AddAnimalSeat(glm::vec3(0.0f, 0.394027f, 0.458536f)); + AddAnimalSeat(glm::vec3(0.0f, 0.098926f, 0.447576f)); + AddAnimalSeat(glm::vec3(0.0f, -0.394027f, 0.458536f)); SetIdleAnim("idle"); SetWalkAnim("walk"); + + ScheduleRandomMoo(); +} + +void game::Cow::OnPassengerChanged(size_t seat_idx, HumanCharacter* passenger) +{ + Super::OnPassengerChanged(seat_idx, passenger); + + if (passenger) + { + PlayUseSound(); + } +} + +void game::Cow::ScheduleRandomMoo() +{ + Schedule(rand() % 15000 + 5000, [this]() { + PlayRandomMoo(); + ScheduleRandomMoo(); + }); +} + +void game::Cow::PlayRandomMoo() +{ + float volume = RandomFloat(0.9f, 1.1f); + float pitch = RandomFloat(0.9f, 1.0f); + + switch (rand() % 4) + { + case 0: + PlaySound("cow-01", volume, pitch); + break; + case 1: + PlaySound("cow-02", volume, pitch); + break; + case 2: + PlaySound("cow-04", volume, pitch); + break; + case 3: + PlaySound("cow-05", volume, pitch); + break; + } +} + +void game::Cow::PlayUseSound() +{ + PlaySound("cow-06", 1.0f, RandomFloat(0.9f, 1.1f)); } diff --git a/src/game/cow.hpp b/src/game/cow.hpp index acc89c8..3d6f1d1 100644 --- a/src/game/cow.hpp +++ b/src/game/cow.hpp @@ -8,10 +8,17 @@ namespace game class Cow : public Animal { public: + using Super = Animal; + Cow(World& world, const glm::vec3& position, float yaw); -private: +protected: + virtual void OnPassengerChanged(size_t seat_idx, HumanCharacter* passenger) override; +private: + void ScheduleRandomMoo(); + void PlayRandomMoo(); + void PlayUseSound(); };