#pragma once
#include "Entity.h"
#include "Ai_global.h"
#include "CS_MyCharAi_Icon.h"
#define CS_MYCHARAI_CREATENAME L"CS_mychar_ai"
#define MAX_DISTANCE 10000000
//玩家角色AI
class CS_MyCharAi:
	public Entity
{
public:
	CS_MyCharAi();
	void Init(std::weak_ptr<Entity> self) override;
	void Step() override;
	void Destroy() override;
	std::weak_ptr<CS_MyCharAi_Icon> icon;//浮在AI控制的玩家头顶上
	void IconFollow();
protected:
	void Control();
	void InitControlTarget();
	void Move(std::weak_ptr<AiStation> targetStation, bool lr);
	void Up(std::weak_ptr<AiStation> targetStation, bool lr);
	void Down(std::weak_ptr<AiStation> targetStation, bool lr);
	bool Key();//强制控制
	bool IsTargetStation(std::weak_ptr<AiStation> targetStation, std::weak_ptr<Entity> e, const wchar_t* stationType);
	virtual bool AttackAround();
	std::weak_ptr<Entity> PickUpExp(float x,float y);//寻找周围的经验
	std::weak_ptr<Entity> PickUpHeart(float x, float y);//寻找周围的生命
	std::weak_ptr<AiStation> GetEntityStationPos(float x, float y);//查找这个坐标所属的车站
	std::weak_ptr<AiStation> GoNextStation(std::weak_ptr<AiStation> srcStation, std::weak_ptr<AiStation> dstStation);//计算去目标站的下一站
	std::weak_ptr<AiStation> IDGetStation(std::vector<int>* stationID);
	std::list<GameInput> moveOpList;
	EntityLayer* aiLayer = nullptr;//ai层
	std::weak_ptr<Entity> adjustUpTarget;//调整向上目标
	int adjust_counter = 0;//调整时间
	int adjust_counter_max = 120;//调整时间
	bool bAutoPickUp = true;//启用经验拾取功能
};

std::shared_ptr<Entity> CreateCS_MyCharAi();