#pragma once
#include "Entity.h"
#include "CS_Boss_MonsterXEye.h"
#include "CS_AmFishMissileBase.h"
#include "CS_AmPawcore.h"
#include "CS_AmLaser.h"
#include "CS_AmSoundWaveBase.h"
#include "CS_AmFishMissileBig.h"
#define CS_BOSS_MONSTERX_CREATENAME L"CS_boss_monsterx"

enum MonsterXAttackMode
{
    //【第一阶段】
    MonsterXAttackMode_PAW,//【1】爪子左右拍击 【2】下拍
    MonsterXAttackMode_MISSILE,//【1】导弹和高第抛射物 【2】屏幕内随机下落放电圆环
    MonsterXAttackMode_LASER,//【1】8道激光旋转扫射几圈 【2】电磁脉冲 圆形激光从中心向外扩散
    //【第二阶段】
    MonsterXAttackMode_ANGRY,//【1】爪子疯狂砸 【2】屏幕疯狂点
    MonsterXAttackMode_BOMB,//【1】声波攻击（猫叫）【2】鱼导弹 
};

//Boss：monsterX 总血条
class CS_Boss_MonsterX :
    public ActionEntity
{
public:
    CS_Boss_MonsterX();
    void Init(std::weak_ptr<Entity> self) override;
    void Step() override;
    void SetState(int stateID, int lr) override;
    void SetState(std::wstring stateName, int lr) override;
    void Destroy() override;
    bool Hurt(std::weak_ptr<Entity> src, int getDamage, float angle, bool bTakedown, int elemType, float shockForce, float heavy, int* outRealDamage) override;
    int stateID = 0;
    int level = 0;//阶段
    int zoneL = 0, zoneR = 0, zoneU = 0, zoneD = 0;
    std::vector<int> argbuff;
    std::vector<int> xPosArr;
    std::weak_ptr<CS_Boss_MonsterXEye> eyeL, eyeR;
    std::list<MonsterXAttackMode> attackModeList;//攻击模式表
    std::list<std::weak_ptr<CS_AmFishMissileBase>> fishMissileList;
    std::list<std::weak_ptr<CS_AmPawcore>> pawCoreList;
    std::list<std::weak_ptr<CS_AmLaser>> laserList;
    std::list<std::weak_ptr<CS_AmSoundWaveBase>> soundwaveList;
    std::list<std::weak_ptr<CS_AmFishMissileBig>> fishMissileBigList;
    int pawAttackCount = 0;
    int empAttackCount = 0;
    std::wstring screenShatteredEvent;
    std::wstring secondFormEvent;
    bool bNormalMode = false;
};

std::shared_ptr<Entity> CreateCS_Boss_MonsterX();