diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 4d9f156..675aef8 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -3,6 +3,108 @@ #include "android.ai.h" void AndroidAI::Update(int delta_time) +{ + state_elapsed_time += delta_time; + switch (state) { + case AS_thinking: + { + if (state_elapsed_time < 1000) { + UpdateThink(); + } else { + int rnd = rand(); + if (rnd % 100 < 30) { + DoMove(); + } else if (rnd % 100 < 50) { + DoAttack(); + } + } + } + break; + case AS_moving: + { + if (state_elapsed_time < 1000) { + UpdateMove(); + } else { + int rnd = rand(); + if (rnd % 100 < 30) { + DoThink(); + } else if (rnd % 100 < 50) { + DoAttack(); + } + } + } + break; + case AS_attack: + { + if (state_elapsed_time < 1000) { + UpdateAttack(); + } else { + int rnd = rand(); + if (rnd % 100 < 30) { + DoMove(); + } else if (rnd % 100 < 50) { + DoThink(); + } + } + } + break; + case AS_moving_and_attack: + { + if (state_elapsed_time < 1000) { + UpdateMoveAndAttack(); + } else { + int rnd = rand(); + if (rnd % 100 < 30) { + DoMove(); + } else if (rnd % 100 < 50) { + DoAttack(); + } + } + } + break; + } +} + +void AndroidAI::UpdateThink() { } + +void AndroidAI::UpdateMove() +{ + +} + +void AndroidAI::UpdateAttack() +{ + +} + +void AndroidAI::UpdateMoveAndAttack() +{ + +} + +void AndroidAI::DoThink() +{ + state = AS_thinking; + state_elapsed_time = 0; +} + +void AndroidAI::DoMove() +{ + state = AS_moving; + state_elapsed_time = 0; +} + +void AndroidAI::DoAttack() +{ + state = AS_attack; + state_elapsed_time = 0; +} + +void AndroidAI::DoMoveAndAttack() +{ + state = AS_moving_and_attack; + state_elapsed_time = 0; +} diff --git a/server/gameserver/android.ai.h b/server/gameserver/android.ai.h index 1c400c1..9b66a54 100644 --- a/server/gameserver/android.ai.h +++ b/server/gameserver/android.ai.h @@ -2,9 +2,34 @@ #include "aicomponent.h" +enum AndroidState_e +{ + AS_thinking, + AS_moving, + AS_attack, + AS_moving_and_attack, +}; + +class Human; class AndroidAI : public AIComponent { public: + AndroidState_e state = AS_thinking; + int state_elapsed_time = 0; + Human* last_hiter = nullptr; + + virtual void Update(int delta_time) override; + +private: + + void UpdateThink(); + void UpdateMove(); + void UpdateAttack(); + void UpdateMoveAndAttack(); + + void DoThink(); + void DoMove(); + void DoAttack(); + void DoMoveAndAttack(); - virtual void Update(int delta_time); }; diff --git a/server/gameserver/android.h b/server/gameserver/android.h index d92f715..d510b31 100644 --- a/server/gameserver/android.h +++ b/server/gameserver/android.h @@ -9,7 +9,7 @@ class Android : public Human AndroidAI* ai = nullptr; Android(); - ~Android(); + virtual ~Android() override; virtual void Initialize() override; virtual void Update(int delta_time) override; }; diff --git a/server/gameserver/collider.cc b/server/gameserver/collider.cc new file mode 100644 index 0000000..a660a84 --- /dev/null +++ b/server/gameserver/collider.cc @@ -0,0 +1,5 @@ +#include "precompile.h" + +#include "entity.h" +#include "collider.h" + diff --git a/server/gameserver/collider.h b/server/gameserver/collider.h new file mode 100644 index 0000000..c968d8c --- /dev/null +++ b/server/gameserver/collider.h @@ -0,0 +1,30 @@ +#pragma once + +enum ColliderType_e +{ + CT_None, + CT_Aabb, + CT_Circle +}; + +class Entity; +class ColliderComponent +{ + public: + Entity* owner = nullptr; + ColliderType_e type = CT_None; +}; + +class AabbCollider : public ColliderComponent +{ +public: + Vector2D center; + Vector2D size; +}; + +class CircleCollider : public ColliderComponent +{ +public: + Vector2D pos; + float rad = 0.0f; +}; diff --git a/server/gameserver/entity.cc b/server/gameserver/entity.cc index 5cb60f6..7c5fb2a 100644 --- a/server/gameserver/entity.cc +++ b/server/gameserver/entity.cc @@ -1,3 +1,12 @@ #include "precompile.h" #include "entity.h" + +Entity::~Entity() +{ + for (auto& itr : colliders) { + ColliderComponent* collider = itr; + delete collider; + } + colliders.clear(); +} diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index 9a5be18..bf5a9fd 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -28,6 +28,7 @@ enum EntitySubType_e }; class Room; +class ColliderComponent; class MovementComponent; class Entity { @@ -40,9 +41,10 @@ class Entity Vector2D dir; int updated_times = 0; MovementComponent* movement_component = nullptr; + std::list colliders; Entity() {}; - virtual ~Entity() {}; + virtual ~Entity(); virtual void Initialize() {}; virtual void Update(int delta_time) {}; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) {};