import { BattleUtil } from "../data/BattleUtil";

export const TowerUUID = -1;
//战斗消息工具类
export enum BattleEventTarget{
    Update = "update",
    HeroAction = "hero_action",
    
}
export enum BattleEventType{
    //敌人出生
    EnemyBorn = "enemy_born",
    //敌人移动
    EnemyMove = "enemy_move",
    //敌人受击
    EnemyHurt = "enemy_hurt",
    //敌人死亡
    EnemyDie = "enemy_die",
    //敌人buff改变
    EnemyBuff = "enemy_buff",
    //英雄动作
    HeroAction = "hero_action",
    //英雄攻击
    HeroAttack = "hero_attack",
    //英雄打出子弹
    HeroAttackBullet = "hero_attack_bullet",
    //子弹伤害 /死亡
    BulletAttack = "bullet_hurt",
    //子弹移动
    BulletMove = "bullet_move",

    //战斗结束
    Over = "over",
}

export enum BuffEventState{
    //添加
    Add,
    //移除
    Remove,
    //刷新
    Refresh,
}
//伤害状态
export enum HurtEventState{
    //普通
    Normal,
    //暴击
    Critical,
    //毒
    Poison,
    //雪
    Snow,
}

//英雄动作
export enum HeroActionType{
    //普通
    Normal,
    //暴击
    Critical,
    //技能1
    Skill1,
    //技能2
    Skill2,
}
export enum EnemyActionType{
    //出生
    Born,
    //受击
    Hurt,
    //移动
    Move,
    //技能
    Skill,
    //死亡
    Die,
}

export interface BattleEventData{
    eventType:BattleEventType;
}

export interface BattleEventData_EnemyBorn extends BattleEventData{
    eventType:BattleEventType.EnemyBorn;
    ID:number;
    typeID:number;
    position:BattleUtil.Vector2;
    speedVector:BattleUtil.Vector2;
    life:number;
    lifeMax:number;
}
export interface BattleEventData_EnemyMove extends BattleEventData{
    eventType:BattleEventType.EnemyMove;
    ID:number;
    speedVector:BattleUtil.Vector2;
}

export interface BattleEventData_EnemyHurt extends BattleEventData{
    eventType:BattleEventType.EnemyHurt;
    //攻击者类型,仅用于统计
    typeID:number;
    //被攻击者ID
    targetID:number;
    hurt:number;
    status:HurtEventState;
}

export interface BattleEventData_EnemyDie extends BattleEventData{
    eventType:BattleEventType.EnemyDie;
    ID:number;
}
//英雄开始做动作
export interface BattleEventData_HeroAction extends BattleEventData{
    eventType:BattleEventType.HeroAction;
    //攻击者位置
    posID:number;
    targetID:number;
    action:HeroActionType;
}
//英雄直接伤害
export interface BattleEventData_HeroAttack extends BattleEventData{
    eventType:BattleEventType.HeroAttack;
    //攻击者位置
    posID:number;
    targetID:number;
    hurt:number;
    status:HurtEventState;
}

//打出子弹
export interface BattleEventData_HeroAttackBullet extends BattleEventData{
    eventType:BattleEventType.HeroAttackBullet;
    posID:number;
    targetID:number;
    bulletID:number;
}
//子弹直接伤害
export interface BattleEventData_BulletAttack extends BattleEventData{
    eventType:BattleEventType.BulletAttack;
    //攻击者类型,仅用于统计
    typeID:number;
    targetID:number;
    hurt:number;
    status:HurtEventState;
}

export interface BattleEventData_BulletMove extends BattleEventData{
    eventType:BattleEventType.BulletMove;
    ID:number;
    speedVector:BattleUtil.Vector2;
}

//buff改变
export interface BattleEventData_EnemyBuff extends BattleEventData{
    eventType:BattleEventType.EnemyBuff;
    ID:number;
    buffID:number;
    eventState:BuffEventState;
}

//战斗结束
export interface BattleEventData_Over extends BattleEventData{
    eventType:BattleEventType.Over;
    bWin:boolean;
}

//动作触发计算
export interface BattleEventHeroAction{
    action:HeroActionType;
    //攻击位置的下标
    posIndex:number;
}


export interface BossDataUpdate{
    ID:number;
    action:EnemyActionType;
    value:number;
}