THUAI8/CAPI/cpp/API/include/utils.hpp

579 lines
33 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#ifndef UTILS_HPP
#define UTILS_HPP
#include <cstdint>
#include <cmath>
#include <map>
#include <vector>
#include "Message2Clients.pb.h"
#include "Message2Server.pb.h"
#include "MessageType.pb.h"
#include "structures.h"
#undef GetMessage
#undef SendMessage
#undef PeekMessage
// 用于将THUAI8的类转换为Protobuf的类
namespace AssistFunction
{
constexpr int32_t numOfGridPerCell = 1000;
[[nodiscard]] constexpr inline int32_t GridToCell(int32_t grid) noexcept
{
return grid / numOfGridPerCell;
}
[[nodiscard]] constexpr inline int32_t GridToCell(double grid) noexcept
{
return int32_t(grid) / numOfGridPerCell;
}
inline bool HaveView(int32_t x, int32_t y, int32_t newX, int32_t newY, int32_t viewRange, std::vector<std::vector<THUAI8::PlaceType>>& map)
{
double deltaX = newX - x;
double deltaY = newY - y;
double distance = std::pow(deltaX, 2) + std::pow(deltaY, 2);
THUAI8::PlaceType myPlace = map[GridToCell(x)][GridToCell(y)];
THUAI8::PlaceType newPlace = map[GridToCell(newX)][GridToCell(newY)];
if (newPlace == THUAI8::PlaceType::Bush && myPlace != THUAI8::PlaceType::Bush)
return false;
if (distance > std::pow(viewRange, 2))
return false;
int32_t divide = int32_t(std::max(std::abs(deltaX), std::abs(deltaY)) / 100);
if (divide == 0)
return true;
double dx = deltaX / divide;
double dy = deltaY / divide;
double myX = double(x);
double myY = double(y);
if (newPlace == THUAI8::PlaceType::Bush && myPlace == THUAI8::PlaceType::Bush)
for (int32_t i = 0; i < divide; i++)
{
myX += dx;
myY += dy;
if (map[GridToCell(myX)][GridToCell(myY)] != THUAI8::PlaceType::Bush)
return false;
}
else
for (int32_t i = 0; i < divide; i++)
{
myX += dx;
myY += dy;
if (map[GridToCell(myX)][GridToCell(myY)] == THUAI8::PlaceType::Barrier)
return false;
}
return true;
}
} // namespace AssistFunction
namespace Proto2THUAI8
{
// 用于将Protobuf中的枚举转换为THUAI8的枚举
inline std::map<protobuf::GameState, THUAI8::GameState> gameStateDict{
{protobuf::GameState::NULL_GAME_STATE, THUAI8::GameState::NullGameState},
{protobuf::GameState::GAME_START, THUAI8::GameState::GameStart},
{protobuf::GameState::GAME_RUNNING, THUAI8::GameState::GameRunning},
{protobuf::GameState::GAME_END, THUAI8::GameState::GameEnd},
};
inline std::map<protobuf::PlaceType, THUAI8::PlaceType> placeTypeDict{
{protobuf::PlaceType::NULL_PLACE_TYPE, THUAI8::PlaceType::NullPlaceType},
{protobuf::PlaceType::HOME, THUAI8::PlaceType::Home},
{protobuf::PlaceType::SPACE, THUAI8::PlaceType::Space},
{protobuf::PlaceType::BARRIER, THUAI8::PlaceType::Barrier},
{protobuf::PlaceType::BUSH, THUAI8::PlaceType::Bush},
{protobuf::PlaceType::ECONOMY_RESOURCE, THUAI8::PlaceType::EconomyResource},
{protobuf::PlaceType::ADDITION_RESOURCE, THUAI8::PlaceType::AdditionResource},
{protobuf::PlaceType::CONSTRUCTION, THUAI8::PlaceType::Construction},
{protobuf::PlaceType::TRAP, THUAI8::PlaceType::Trap},
};
inline std::map<protobuf::ShapeType, THUAI8::ShapeType> shapeTypeDict{
{protobuf::ShapeType::NULL_SHAPE_TYPE, THUAI8::ShapeType::NullShapeType},
{protobuf::ShapeType::CIRCLE, THUAI8::ShapeType::Circle},
{protobuf::ShapeType::SQUARE, THUAI8::ShapeType::Square},
};
inline std::map<protobuf::PlayerType, THUAI8::PlayerType> playerTypeDict{
{protobuf::PlayerType::NULL_PLAYER_TYPE, THUAI8::PlayerType::NullPlayerType},
{protobuf::PlayerType::Buddhists, THUAI8::PlayerType::Buddhists},
{protobuf::PlayerType::Monsters, THUAI8::PlayerType::Monsters},
};
inline std::map<protobuf::CharacterType, THUAI8::CharacterType> characterTypeDict{
{protobuf::CharacterType::NULL_CHARACTER_TYPE, THUAI8::CharacterType::NullCharacterType},
{protobuf::CharacterType::CAMP1_CHARACTER1, THUAI8::CharacterType::Camp1Character1},
{protobuf::CharacterType::CAMP1_CHARACTER2, THUAI8::CharacterType::Camp1Character2},
{protobuf::CharacterType::CAMP1_CHARACTER3, THUAI8::CharacterType::Camp1Character3},
{protobuf::CharacterType::CAMP1_CHARACTER4, THUAI8::CharacterType::Camp1Character4},
{protobuf::CharacterType::CAMP1_CHARACTER5, THUAI8::CharacterType::Camp1Character5},
{protobuf::CharacterType::CAMP1_CHARACTER6, THUAI8::CharacterType::Camp1Character6},
{protobuf::CharacterType::CAMP2_CHARACTER1, THUAI8::CharacterType::Camp2Character1},
{protobuf::CharacterType::CAMP2_CHARACTER2, THUAI8::CharacterType::Camp2Character2},
{protobuf::CharacterType::CAMP2_CHARACTER3, THUAI8::CharacterType::Camp2Character3},
{protobuf::CharacterType::CAMP2_CHARACTER4, THUAI8::CharacterType::Camp2Character4},
{protobuf::CharacterType::CAMP2_CHARACTER5, THUAI8::CharacterType::Camp2Character5},
{protobuf::CharacterType::CAMP2_CHARACTER6, THUAI8::CharacterType::Camp2Character6},
};
inline std::map<protobuf::CharacterState, THUAI8::CharacterState> characterStateDict{
{protobuf::CharacterState::NULL_CHARACTER_STATE, THUAI8::CharacterState::NullCharacterState},
{protobuf::CharacterState::IDLE, THUAI8::CharacterState::Idle},
{protobuf::CharacterState::HARVESTING, THUAI8::CharacterState::Harvesting},
{protobuf::CharacterState::ATTACKING, THUAI8::CharacterState::Attacking},
{protobuf::CharacterState::SKILL_CASTING, THUAI8::CharacterState::SkillCasting},
{protobuf::CharacterState::CONSTRUCTING, THUAI8::CharacterState::Constructing},
{protobuf::CharacterState::MOVING, THUAI8::CharacterState::Moving},
{protobuf::CharacterState::BLIND, THUAI8::CharacterState::Blind},
{protobuf::CharacterState::KNOCKED_BACK, THUAI8::CharacterState::KnockedBack},
{protobuf::CharacterState::STUNNED, THUAI8::CharacterState::Stunned},
{protobuf::CharacterState::INVISIBLE, THUAI8::CharacterState::Invisible},
{protobuf::CharacterState::HEALING, THUAI8::CharacterState::Healing},
{protobuf::CharacterState::BERSERK, THUAI8::CharacterState::Berserk},
{protobuf::CharacterState::BURNED, THUAI8::CharacterState::Burned},
};
inline std::map<protobuf::EconomyResourceType, THUAI8::EconomyResourceType> economyResourceTypeDict{
{protobuf::EconomyResourceType::NULL_ECONOMY_RESOURCE_TYPE, THUAI8::EconomyResourceType::NullEconomyResourceType},
{protobuf::EconomyResourceType::ECONOMY_RESOURCE_TYPE, THUAI8::EconomyResourceType::EconomyResource},
};
inline std::map<protobuf::AdditionResourceType, THUAI8::AdditionResourceType> additionResourceTypeDict{
{protobuf::AdditionResourceType::NULL_ADDITION_RESOURCE_TYPE, THUAI8::AdditionResourceType::NullAdditionResourceType},
{protobuf::AdditionResourceType::SMALL_ADDITION_RESOURCE1, THUAI8::AdditionResourceType::SmallAdditionResource1},
{protobuf::AdditionResourceType::MEDIUM_ADDITION_RESOURCE1, THUAI8::AdditionResourceType::MediumAdditionResource1},
{protobuf::AdditionResourceType::LARGE_ADDITION_RESOURCE1, THUAI8::AdditionResourceType::LargeAdditionResource1},
{protobuf::AdditionResourceType::SMALL_ADDITION_RESOURCE2, THUAI8::AdditionResourceType::SmallAdditionResource2},
{protobuf::AdditionResourceType::MEDIUM_ADDITION_RESOURCE2, THUAI8::AdditionResourceType::MediumAdditionResource2},
{protobuf::AdditionResourceType::LARGE_ADDITION_RESOURCE2, THUAI8::AdditionResourceType::LargeAdditionResource2},
{protobuf::AdditionResourceType::ADDITION_RESOURCE3, THUAI8::AdditionResourceType::AdditionResource3},
{protobuf::AdditionResourceType::ADDITION_RESOURCE4, THUAI8::AdditionResourceType::AdditionResource4},
};
inline std::map<protobuf::EconomyResourceState, THUAI8::EconomyResourceState> economyResourceStateDict{
{protobuf::EconomyResourceState::NULL_ECONOMY_RESOURCE_STATE, THUAI8::EconomyResourceState::NullEconomyResourceState},
{protobuf::EconomyResourceState::HARVESTABLE, THUAI8::EconomyResourceState::Harvestable},
{protobuf::EconomyResourceState::BEING_HARVESTED, THUAI8::EconomyResourceState::BeingHarvested},
{protobuf::EconomyResourceState::HARVESTED, THUAI8::EconomyResourceState::Harvested},
};
inline std::map<protobuf::AdditionResourceState, THUAI8::AdditionResourceState> additionResourceStateDict{
{protobuf::AdditionResourceState::NULL_ADDITION_RESOURCE_STATE, THUAI8::AdditionResourceState::NullAdditionResourceState},
{protobuf::AdditionResourceState::BEATABLE, THUAI8::AdditionResourceState::Beatable},
{protobuf::AdditionResourceState::BEING_BEATEN, THUAI8::AdditionResourceState::BeingBeaten},
{protobuf::AdditionResourceState::BEATEN, THUAI8::AdditionResourceState::Beaten},
};
inline std::map<protobuf::EquipmentType, THUAI8::EquipmentType> equipmentTypeDict{
{protobuf::EquipmentType::NULL_EQUIPMENT_TYPE, THUAI8::EquipmentType::NullEquipmentType},
{protobuf::EquipmentType::SMALL_HEALTH_POTION, THUAI8::EquipmentType::SmallHealthPotion},
{protobuf::EquipmentType::MEDIUM_HEALTH_POTION, THUAI8::EquipmentType::MediumHealthPotion},
{protobuf::EquipmentType::LARGE_HEALTH_POTION, THUAI8::EquipmentType::LargeHealthPotion},
{protobuf::EquipmentType::SMALL_SHIELD, THUAI8::EquipmentType::SmallShield},
{protobuf::EquipmentType::MEDIUM_SHIELD, THUAI8::EquipmentType::MediumShield},
{protobuf::EquipmentType::LARGE_SHIELD, THUAI8::EquipmentType::LargeShield},
{protobuf::EquipmentType::SPEEDBOOTS, THUAI8::EquipmentType::Speedboots},
{protobuf::EquipmentType::PURIFICATION_POTION, THUAI8::EquipmentType::PurificationPotion},
{protobuf::EquipmentType::INVISIBILITY_POTION, THUAI8::EquipmentType::InvisibilityPotion},
{protobuf::EquipmentType::BERSERK_POTION, THUAI8::EquipmentType::BerserkPotion},
};
inline std::map<protobuf::ConstructionType, THUAI8::ConstructionType> constructionTypeDict{
{protobuf::ConstructionType::NULL_CONSTRUCTION_TYPE, THUAI8::ConstructionType::NullConstructionType},
{protobuf::ConstructionType::BARRACKS, THUAI8::ConstructionType::Barracks},
{protobuf::ConstructionType::SPRING, THUAI8::ConstructionType::Spring},
{protobuf::ConstructionType::FARM, THUAI8::ConstructionType::Farm},
};
inline std::map<protobuf::TrapType, THUAI8::TrapType> trapTypeDict{
{protobuf::TrapType::NULL_TRAP_TYPE, THUAI8::TrapType::NullTrapType},
{protobuf::TrapType::HOLE, THUAI8::TrapType::Hole},
{protobuf::TrapType::CAGE, THUAI8::TrapType::Cage},
};
inline std::map<protobuf::NewsType, THUAI8::NewsType> newsTypeDict{
{protobuf::NewsType::NULL_NEWS_TYPE, THUAI8::NewsType::NullNewsType},
{protobuf::NewsType::TEXT, THUAI8::NewsType::Text},
{protobuf::NewsType::BINARY, THUAI8::NewsType::Binary},
};
inline std::map<protobuf::PlayerTeam, THUAI8::PlayerTeam> playerTeam{
{protobuf::PlayerTeam::NULL_PLAYER_TEAM, THUAI8::PlayerTeam::NullPlayerTeam},
{protobuf::PlayerTeam::BUDDHISTS_TEAM, THUAI8::PlayerTeam::BuddhistsTeam},
{protobuf::PlayerTeam::MONSTERS_TEAM, THUAI8::PlayerTeam::MonstersTeam},
};
// 用于将Protobuf中的类转换为THUAI8的类
inline std::shared_ptr<THUAI8::Character> Protobuf2THUAI8Character(const protobuf::MessageOfCharacter& CharacterMsg)
{
auto character = std::make_shared<THUAI8::Character>();
character->guid = CharacterMsg.character().guid();
character->teamID = CharacterMsg.character().teamid();
character->playerID = CharacterMsg.character().playerid();
character->characterType = characterTypeDict.at(CharacterMsg.character().charactertype());
character->characterActiveState = characterStateDict.at(CharacterMsg.character().characteractivestate());
character->isBlind = CharacterMsg.character().isblind();
character->blindTime = CharacterMsg.character().blindtime();
character->isStunned = CharacterMsg.character().isstunned();
character->stunnedTime = CharacterMsg.character().stunnedtime();
character->isInvisible = CharacterMsg.character().isinvisible();
character->invisibleTime = CharacterMsg.character().invisibletime();
character->isBurned = CharacterMsg.character().isburned();
character->burnedTime = CharacterMsg.character().burnedtime();
character->harmCut = CharacterMsg.character().harmcut();
character->harmCutTime = CharacterMsg.character().harmcuttime();
character->characterPassiveState = characterStateDict.at(CharacterMsg.character().characterpassivestate());
character->x = CharacterMsg.character().x();
character->y = CharacterMsg.character().y();
character->facingDirection = CharacterMsg.character().facingdirection();
character->speed = CharacterMsg.character().speed();
character->viewRange = CharacterMsg.character().viewrange();
character->commonAttack = CharacterMsg.character().commonattack();
character->commonAttackCD = CharacterMsg.character().commonattackcd();
character->commonAttackRange = CharacterMsg.character().commonattackrange();
character->skillAttackCD = CharacterMsg.character().skillattackcd();
character->economyDepletion = CharacterMsg.character().economydepletion();
character->killScore = CharacterMsg.character().killscore();
character->hp = CharacterMsg.character().hp();
character->shieldEquipment = CharacterMsg.character().shieldequipment();
character->shoesEquipment = CharacterMsg.character().shoesequipment();
character->shoesTime = CharacterMsg.character().shoestime();
character->isPurified = CharacterMsg.character().ispurified();
character->purifiedTime = CharacterMsg.character().purifiedtime();
character->isBerserk = CharacterMsg.character().isberserk();
character->berserkTime = CharacterMsg.character().berserktime();
character->attackBuffNum = CharacterMsg.character().attackbuffnum();
character->attackBuffTime = CharacterMsg.character().attackbufftime();
character->speedBuffTime = CharacterMsg.character().speedbufftime();
character->visionBuffTime = CharacterMsg.character().visionbufftime();
}
inline std::shared_ptr<THUAI8::Team> Protobuf2THUAI8Team(const protobuf::MessageOfTeam& TeamMsg)
{
auto team = std::make_shared<THUAI8::Team>();
team->teamID = TeamMsg.team().teamid();
team->playerID = TeamMsg.team().playerid();
team->score = TeamMsg.team().score();
team->energy = TeamMsg.team().energy();
return team;
}
inline std::shared_ptr<THUAI8::GameInfo> Protobuf2THUAI8GameInfo(const protobuf::MessageOfGameInfo& GameInfoMsg)
{
auto gameInfo = std::make_shared<THUAI8::GameInfo>();
gameInfo->gameState = gameStateDict.at(GameInfoMsg.gameinfo().gamestate());
gameInfo->time = GameInfoMsg.gameinfo().time();
gameInfo->placeType = placeTypeDict.at(GameInfoMsg.gameinfo().placetype());
return gameInfo;
}
inline std::shared_ptr<THUAI8::Trap> Protobuf2THUAI8Trap(const protobuf::MessageOfTrap& TrapMsg)
{
auto trap = std::make_shared<THUAI8::Trap>();
trap->trapType = trapTypeDict.at(TrapMsg.trap().traptype());
trap->x = TrapMsg.trap().x();
trap->y = TrapMsg.trap().y();
trap->teamID = TrapMsg.trap().teamid();
trap->id = TrapMsg.trap().id();
return trap;
}
inline std::shared_ptr<THUAI8::EconomyResource> Protobuf2THUAI8EconomyResource(const protobuf::MessageOfEconomyResource& EconomyResourceMsg)
{
auto economyResource = std::make_shared<THUAI8::EconomyResource>();
economyResource->economyResourceType = economyResourceTypeDict.at(EconomyResourceMsg.economyresource().economyresourcetype());
economyResource->economyResourceState = economyResourceStateDict.at(EconomyResourceMsg.economyresource().economyresourcestate());
economyResource->x = EconomyResourceMsg.economyresource().x();
economyResource->y = EconomyResourceMsg.economyresource().y();
return economyResource;
}
inline std::shared_ptr<THUAI8::AdditionResource> Protobuf2THUAI8AdditionResource(const protobuf::MessageOfAdditionResource& AdditionResourceMsg)
{
auto additionResource = std::make_shared<THUAI8::AdditionResource>();
additionResource->additionResourceType = additionResourceTypeDict.at(AdditionResourceMsg.additionresource().additionresourcetype());
additionResource->additionResourceState = additionResourceStateDict.at(AdditionResourceMsg.additionresource().additionresourcestate());
additionResource->x = AdditionResourceMsg.additionresource().x();
additionResource->y = AdditionResourceMsg.additionresource().y();
return additionResource;
}
inline std::shared_ptr<THUAI8::ConstructionState> Protobuf2THUAI8ConstructionState(const protobuf::MessageOfConstructionState& ConstructionStateMsg)
{
auto constructionState = std::make_shared<THUAI8::ConstructionState>();
constructionState->teamID = ConstructionStateMsg.constructionstate().teamid();
constructionState->hp = ConstructionStateMsg.constructionstate().hp();
constructionState->constructionType = constructionTypeDict.at(ConstructionStateMsg.constructionstate().constructiontype());
return constructionState;
}
// ?
// inline std::shared_ptr<THUAI8::GameMap> Protobuf2THUAI8GameMap(const protobuf::MessageOfGameMap& GameMapMsg)
// {
// auto gameMap = std::make_shared<THUAI8::GameMap>();
// for (const auto& barracks : GameMapMsg.gamemap().barracksstate())
// {
// gameMap->barracksState[{barracks.first.x(), barracks.first.y()}] = {barracks.second.teamid(), barracks.second.hp()};
// }
// for (const auto& spring : GameMapMsg.gamemap().springstate())
// {
// gameMap->springState[{spring.first.x(), spring.first.y()}] = {spring.second.teamid(), spring.second.hp()};
// }
// for (const auto& farm : GameMapMsg.gamemap().farmstate())
// {
// gameMap->farmState[{farm.first.x(), farm.first.y()}] = {farm.second.teamid(), farm.second.hp()};
// }
// for (const auto& trap : GameMapMsg.gamemap().trapstate())
// {
// gameMap->trapState[{trap.first.x(), trap.first.y()}] = {trap.second.teamid(), trap.second.hp()};
// }
// for (const auto& economyResource : GameMapMsg.gamemap().economyresource())
// {
// gameMap->economyResource[{economyResource.first.x(), economyResource.first.y()}] = economyResource.second;
// }
// for (const auto& additionResource : GameMapMsg.gamemap().additionresource())
// {
// gameMap->additionResource[{additionResource.first.x(), additionResource.first.y()}] = additionResource.second;
// }
// return gameMap;
// }
} // namespace Proto2THUAI8
// 辅助函数用于将proto信息转换为THUAI8的信息
namespace THUAI8Proto
{
// 用于将THUAI8的枚举转换为Protobuf的枚举
inline std::map<THUAI8::GameState, protobuf::GameState> gameStateDict{
{THUAI8::GameState::NullGameState, protobuf::GameState::NULL_GAME_STATE},
{THUAI8::GameState::GameStart, protobuf::GameState::GAME_START},
{THUAI8::GameState::GameRunning, protobuf::GameState::GAME_RUNNING},
{THUAI8::GameState::GameEnd, protobuf::GameState::GAME_END},
};
inline std::map<THUAI8::PlaceType, protobuf::PlaceType> placeTypeDict{
{THUAI8::PlaceType::NullPlaceType, protobuf::PlaceType::NULL_PLACE_TYPE},
{THUAI8::PlaceType::Home, protobuf::PlaceType::HOME},
{THUAI8::PlaceType::Space, protobuf::PlaceType::SPACE},
{THUAI8::PlaceType::Barrier, protobuf::PlaceType::BARRIER},
{THUAI8::PlaceType::Bush, protobuf::PlaceType::BUSH},
{THUAI8::PlaceType::EconomyResource, protobuf::PlaceType::ECONOMY_RESOURCE},
{THUAI8::PlaceType::AdditionResource, protobuf::PlaceType::ADDITION_RESOURCE},
{THUAI8::PlaceType::Construction, protobuf::PlaceType::CONSTRUCTION},
{THUAI8::PlaceType::Trap, protobuf::PlaceType::TRAP},
};
inline std::map<THUAI8::ShapeType, protobuf::ShapeType> shapeTypeDict{
{THUAI8::ShapeType::NullShapeType, protobuf::ShapeType::NULL_SHAPE_TYPE},
{THUAI8::ShapeType::Circle, protobuf::ShapeType::CIRCLE},
{THUAI8::ShapeType::Square, protobuf::ShapeType::SQUARE},
};
inline std::map<THUAI8::PlayerTeam, protobuf::PlayerTeam> playerTeamDict{
{THUAI8::PlayerTeam::NullTeam, protobuf::PlayerTeam::NULL_PLAYER_TEAM},
{THUAI8::PlayerTeam::BuddhistsTeam, protobuf::PlayerTeam::BUDDHISTS_TEAM},
{THUAI8::PlayerTeam::MonstersTeam, protobuf::PlayerTeam::MONSTERS_TEAM},
};
inline std::map<THUAI8::CharacterType, protobuf::CharacterType> characterTypeDict{
{THUAI8::CharacterType::NullCharacterType, protobuf::CharacterType::NULL_CHARACTER_TYPE},
{THUAI8::CharacterType::Camp1Character1, protobuf::CharacterType::CAMP1_CHARACTER1},
{THUAI8::CharacterType::Camp1Character2, protobuf::CharacterType::CAMP1_CHARACTER2},
{THUAI8::CharacterType::Camp1Character3, protobuf::CharacterType::CAMP1_CHARACTER3},
{THUAI8::CharacterType::Camp1Character4, protobuf::CharacterType::CAMP1_CHARACTER4},
{THUAI8::CharacterType::Camp1Character5, protobuf::CharacterType::CAMP1_CHARACTER5},
{THUAI8::CharacterType::Camp1Character6, protobuf::CharacterType::CAMP1_CHARACTER6},
{THUAI8::CharacterType::Camp2Character1, protobuf::CharacterType::CAMP2_CHARACTER1},
{THUAI8::CharacterType::Camp2Character2, protobuf::CharacterType::CAMP2_CHARACTER2},
{THUAI8::CharacterType::Camp2Character3, protobuf::CharacterType::CAMP2_CHARACTER3},
{THUAI8::CharacterType::Camp2Character4, protobuf::CharacterType::CAMP2_CHARACTER4},
{THUAI8::CharacterType::Camp2Character5, protobuf::CharacterType::CAMP2_CHARACTER5},
{THUAI8::CharacterType::Camp2Character6, protobuf::CharacterType::CAMP2_CHARACTER6},
};
inline std::map<THUAI8::EquipmentType, protobuf::EquipmentType> equipmentTypeDict{
{THUAI8::EquipmentType::NullEquipmentType, protobuf::EquipmentType::NULL_EQUIPMENT_TYPE},
{THUAI8::EquipmentType::SmallHealthPotion, protobuf::EquipmentType::SMALL_HEALTH_POTION},
{THUAI8::EquipmentType::MediumHealthPotion, protobuf::EquipmentType::MEDIUM_HEALTH_POTION},
{THUAI8::EquipmentType::LargeHealthPotion, protobuf::EquipmentType::LARGE_HEALTH_POTION},
{THUAI8::EquipmentType::SmallShield, protobuf::EquipmentType::SMALL_SHIELD},
{THUAI8::EquipmentType::MediumShield, protobuf::EquipmentType::MEDIUM_SHIELD},
{THUAI8::EquipmentType::LargeShield, protobuf::EquipmentType::LARGE_SHIELD},
{THUAI8::EquipmentType::Speedboots, protobuf::EquipmentType::SPEEDBOOTS},
{THUAI8::EquipmentType::PurificationPotion, protobuf::EquipmentType::PURIFICATION_POTION},
{THUAI8::EquipmentType::InvisibilityPotion, protobuf::EquipmentType::INVISIBILITY_POTION},
{THUAI8::EquipmentType::BerserkPotion, protobuf::EquipmentType::BERSERK_POTION},
};
inline std::mao<THUAI8::CharacterState, protobuf::CharacterState> characterStateDict{
{THUAI8::CharacterState::NullCharacterState, protobuf::CharacterState::NULL_CHARACTER_STATE},
{THUAI8::CharacterState::Idle, protobuf::CharacterState::IDLE},
{THUAI8::CharacterState::Harvesting, protobuf::CharacterState::HARVESTING},
{THUAI8::CharacterState::Attacking, protobuf::CharacterState::ATTACKING},
{THUAI8::CharacterState::SkillCasting, protobuf::CharacterState::SKILL_CASTING},
{THUAI8::CharacterState::Constructing, protobuf::CharacterState::CONSTRUCTING},
{THUAI8::CharacterState::Moving, protobuf::CharacterState::MOVING},
{THUAI8::CharacterState::Blind, protobuf::CharacterState::BLIND},
{THUAI8::CharacterState::KnockedBack, protobuf::CharacterState::KNOCKED_BACK},
{THUAI8::CharacterState::Stunned, protobuf::CharacterState::STUNNED},
{THUAI8::CharacterState::Invisible, protobuf::CharacterState::INVISIBLE},
{THUAI8::CharacterState::Healing, protobuf::CharacterState::HEALING},
{THUAI8::CharacterState::Berserk, protobuf::CharacterState::BERSERK},
{THUAI8::CharacterState::Burned, protobuf::CharacterState::BURNED},
};
inline std::map<THUAI8::EconomyResourceType, protobuf::EconomyResourceType> economyResourceTypeDict{
{THUAI8::EconomyResourceType::NullEconomyResourceType, protobuf::EconomyResourceType::NULL_ECONOMY_RESOURCE_TYPE},
{THUAI8::EconomyResourceType::SmallEconomyResource, protobuf::EconomyResourceType::SMALL_ECONOMY_RESOURCE},
{THUAI8::EconomyResourceType::MediumEconomyResource, protobuf::EconomyResourceType::MEDIUM_ECONOMY_RESOURCE},
{THUAI8::EconomyResourceType::LargeEconomyResource, protobuf::EconomyResourceType::LARGE_ECONOMY_RESOURCE},
};
inline std::map<THUAI8::AdditionResourceType, protobuf::AdditionResourceType> additionResourceTypeDict{
{THUAI8::AdditionResourceType::NullAdditionResourceType, protobuf::AdditionResourceType::NULL_ADDITION_RESOURCE_TYPE},
{THUAI8::AdditionResourceType::SmallAdditionResource1, protobuf::AdditionResourceType::SMALL_ADDITION_RESOURCE1},
{THUAI8::AdditionResourceType::MediumAdditionResource1, protobuf::AdditionResourceType::MEDIUM_ADDITION_RESOURCE1},
{THUAI8::AdditionResourceType::LargeAdditionResource1, protobuf::AdditionResourceType::LARGE_ADDITION_RESOURCE1},
{THUAI8::AdditionResourceType::SmallAdditionResource2, protobuf::AdditionResourceType::SMALL_ADDITION_RESOURCE2},
{THUAI8::AdditionResourceType::MediumAdditionResource2, protobuf::AdditionResourceType::MEDIUM_ADDITION_RESOURCE2},
{THUAI8::AdditionResourceType::LargeAdditionResource2, protobuf::AdditionResourceType::LARGE_ADDITION_RESOURCE2},
{THUAI8::AdditionResourceType::AdditionResource3, protobuf::AdditionResourceType::ADDITION_RESOURCE3},
{THUAI8::AdditionResourceType::AdditionResource4, protobuf::AdditionResourceType::ADDITION_RESOURCE4},
};
inline std::map<THUAI8::EconomyResourceState, protobuf::EconomyResourceState> economyResourceStateDict{
{THUAI8::EconomyResourceState::NullEconomyResourceState, protobuf::EconomyResourceState::NULL_ECONOMY_RESOURCE_STATE},
{THUAI8::EconomyResourceState::Harvestable, protobuf::EconomyResourceState::HARVESTABLE},
{THUAI8::EconomyResourceState::BeingHarvested, protobuf::EconomyResourceState::BEING_HARVESTED},
{THUAI8::EconomyResourceState::Harvested, protobuf::EconomyResourceState::HARVESTED},
};
inline std::map<THUAI8::AdditionResourceState, protobuf::AdditionResourceState> additionResourceStateDict{
{THUAI8::AdditionResourceState::NullAdditionResourceState, protobuf::AdditionResourceState::NULL_ADDITION_RESOURCE_STATE},
{THUAI8::AdditionResourceState::Beatable, protobuf::AdditionResourceState::BEATABLE},
{THUAI8::AdditionResourceState::BeingBeaten, protobuf::AdditionResourceState::BEING_BEATEN},
{THUAI8::AdditionResourceState::Beaten, protobuf::AdditionResourceState::BEATEN},
};
inline std::map<THUAI8::ConstructionType, protobuf::ConstructionType> constructionTypeDict{
{THUAI8::ConstructionType::NullConstructionType, protobuf::ConstructionType::NULL_CONSTRUCTION_TYPE},
{THUAI8::ConstructionType::Barracks, protobuf::ConstructionType::BARRACKS},
{THUAI8::ConstructionType::Spring, protobuf::ConstructionType::SPRING},
{THUAI8::ConstructionType::Farm, protobuf::ConstructionType::FARM},
};
inline std::map<THUAI8::TrapType, protobuf::TrapType> trapTypeDict{
{THUAI8::TrapType::NullTrapType, protobuf::TrapType::NULL_TRAP_TYPE},
{THUAI8::TrapType::Hole, protobuf::TrapType::HOLE},
{THUAI8::TrapType::Cage, protobuf::TrapType::CAGE},
};
inline std::map<THUAI8::NewsType, protobuf::NewsType> newsTypeDict{
{THUAI8::NewsType::NullNewsType, protobuf::NewsType::NULL_NEWS_TYPE},
{THUAI8::NewsType::Text, protobuf::NewsType::TEXT},
{THUAI8::NewsType::Binary, protobuf::NewsType::BINARY},
};
inline std::map<THUAI8::MessageOfObj, protobuf::MessageOfObj> messageOfObjDict{
{THUAI8::MessageOfObj::NullMessageOfObj, protobuf::MessageOfObj::NULL_MESSAGE_OF_OBJ},
{THUAI8::MessageOfObj::CharacterMessage, protobuf::MessageOfObj::CHARACTER_MESSAGE},
{THUAI8::MessageOfObj::BarracksMessage, protobuf::MessageOfObj::BARRACKS_MESSAGE},
{THUAI8::MessageOfObj::SpringMessage, protobuf::MessageOfObj::SPRING_MESSAGE},
{THUAI8::MessageOfObj::FarmMessage, protobuf::MessageOfObj::FARM_MESSAGE},
{THUAI8::MessageOfObj::TrapMessage, protobuf::MessageOfObj::TRAP_MESSAGE},
{THUAI8::MessageOfObj::EconomyResourceMessage, protobuf::MessageOfObj::ECONOMY_RESOURCE_MESSAGE},
{THUAI8::MessageOfObj::AdditionResourceMessage, protobuf::MessageOfObj::ADDITION_RESOURCE_MESSAGE},
{THUAI8::MessageOfObj::MapMessage, protobuf::MessageOfObj::MAP_MESSAGE},
{THUAI8::MessageOfObj::TeamMessage, protobuf::MessageOfObj::TEAM_MESSAGE},
{THUAI8::MessageOfObj::NewsMessage, protobuf::MessageOfObj::NEWS_MESSAGE},
};
inline protobuf::MoveMsg THUAI8MoveMsg2ProtobufMoveMsg(int64_t character, double angle, int64_t time, int64_t team)
{
protobuf::MoveMsg moveMsg;
moveMsg.set_character_id(character);
moveMsg.set_angle(angle);
moveMsg.set_time_in_milliseconds(time);
moveMsg.set_team_id(team);
return moveMsg;
}
inline protobuf::IDMsg THUAI82ProtobufIDMsg(int32_t playerID, int32_t teamID)
{
protobuf::IDMsg IDMsg;
IDMsg.set_player_id(playerID);
IDMsg.set_team_id(teamID);
return IDMsg;
}
inline protobuf::EquipMsg THUAI82ProtobufEquipMsg(int64_t character_id, int64_t team_id, THUAI8::EquipmentType equipment_type)
{
protobuf::EquipMsg equipMsg;
equipMsg.set_character_id(character_id);
equipMsg.set_team_id(team_id);
equipMsg.set_equipment_type(equipment_type);
return equipMsg;
}
inline protobuf::CreatCharacterMsg THUAI82ProtobufCreatCharacterMsg(int64_t team_id, THUAI8::CharacterType character_type, int32_t birthpoint_index)
{
protobuf::CreatCharacterMsg creatCharacterMsg;
creatCharacterMsg.set_team_id(team_id);
creatCharacterMsg.set_character_type(character_type);
creatCharacterMsg.set_birthpoint_index(birthpoint_index);
return creatCharacterMsg;
}
inline protobuf::ConstructMsg THUAI82ProtobufConstructMsg(int64_t character_id, int64_t team_id, THUAI8::ConstructionType construction_type)
{
protobuf::ConstructMsg constructMsg;
constructMsg.set_character_id(character_id);
constructMsg.set_team_id(team_id);
constructMsg.set_construction_type(construction_type);
return constructMsg;
}
inline protobuf::CharacterMsg THUAI82ProtobufCharacterMsg(int64_t character_id, int64_t team_id, THUAI8::CharacterType character_type)
{
protobuf::CharacterMsg characterMsg;
characterMsg.set_character_id(character_id);
characterMsg.set_team_id(team_id);
characterMsg.set_character_type(character_type);
return characterMsg;
}
inline protobuf::CastMsg THUAI82ProtobufCastMsg(int64_t character_id, int64_t skill_id, int64_t team_id, int32_t attack_range, int32_t x, int32_t y, double angle)
{
protobuf::CastMsg castMsg;
castMsg.set_character_id(character_id);
castMsg.set_skill_id(skill_id);
castMsg.set_team_id(team_id);
castMsg.set_attack_range(attack_range);
castMsg.set_x(x);
castMsg.set_y(y);
castMsg.set_angle(angle);
return castMsg;
}
inline protobuf::AttackMsg THUAI82ProtobufAttackMsg(int64_t character_id, int64_t team_id, int64_t attacked_character_id, int32_t attack_range)
{
protobuf::AttackMsg attackMsg;
attackMsg.set_character_id(character_id);
attackMsg.set_team_id(team_id);
attackMsg.set_attacked_character_id(attacked_character_id);
attackMsg.set_attack_range(attack_range);
return attackMsg;
}
} // namespace THUAI8Proto
namespace Time
{
inline double TimeSinceStart(const std::chrono::system_clock::time_point& sp)
{
auto tp = std::chrono::system_clock::now();
auto time_span = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(tp - sp);
return time_span.count();
}
} // namespace Time
#endif