Ejemplo n.º 1
0
    public override void Execute(List <BasicEntity> entities)
    {
        for (int i = 0; i < entities.Count; i++)
        {
            BasicEntity       e            = entities [i];
            DeadComponent     dead         = e.GetComponent <DeadComponent> ();
            PropertyComponent propertyComp = (PropertyComponent)e.GetSpecicalComponent(ComponentType.Property);

            if (dead.hp <= 0)
            {
                if (propertyComp.m_characterType == PropertyComponent.CharacterType.Heretic ||
                    propertyComp.m_characterType == PropertyComponent.CharacterType.Deepone)
                {
                    AIComponent aiComp = (AIComponent)e.GetSpecicalComponent(ComponentType.AI);
                    //todo
                    //aiComp.m_enemy.Dead ();
                }
                //播放死亡动画
                RemoveDead(dead);
                dead.m_entity.RemoveAllComponent();
                continue;
            }
            if (dead.san == 0)
            {
            }
        }
    }
Ejemplo n.º 2
0
    public override void Execte(T enemyEntity)
    {
        Debug.Log("exec survey!");
        MonitorComponent  monitorComp  = (MonitorComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Monitor);
        PropertyComponent propertyComp = (PropertyComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Property);
        DeadComponent     deadComp     = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        //发现敌人
        if (monitorComp.m_enemy.Count != 0)
        {
            //倾向攻击攻击
            if (deadComp.hp / propertyComp.HP > 0.2f)
            {
                enemyEntity.ChangeDecision(AIComponent.Decision.Attack);
                return;
            }
            else
            {
                //如果有同伴在旁边,那么就进行攻击
                if (AiToInput.ExistEnemy())
                {
                    enemyEntity.ChangeDecision(AIComponent.Decision.CallSupport);
                    return;
                }
            }
        }
        //如果还是听到声音
        if (monitorComp.m_voice.Count == 0)
        {
            //if (deadComp.hp / propertyComp.HP > 0.2f) {
            //float j = Random.value;
            //float surveyDemage = enemyEntity.m_events.DecisionExpectDemage (AIComponent.Decision.Survey);
            //float patrolDemage = enemyEntity.m_events.DecisionExpectDemage (AIComponent.Decision.Patrol);
            //Debug.Log ("surveyDemage" + surveyDemage + "patrolDemage" + patrolDemage);
            //if (j > surveyDemage / (surveyDemage + patrolDemage)) {
            //如果听到声音,生命充足,且根据历史,直接前去调查可以造成更多的伤害

            enemyEntity.ChangeDecision(AIComponent.Decision.Patrol);
            //		return;
            //	}
            //} else {
            //	float j = Random.value;
            //	float surveyInjure = enemyEntity.m_events.DecisionExpectInjure (AIComponent.Decision.Survey);
            //	float patrolInjeure = enemyEntity.m_events.DecisionExpectInjure (AIComponent.Decision.Patrol);
            //	if (j > patrolInjeure / (surveyInjure + patrolInjeure)) {
            //		//听到声音。生命不足,但是前去调查可以保存更多的生命
            //		enemyEntity.ChangeDecision (AIComponent.Decision.Patrol);
            //		return;
            //	}
            //}
        }

        Debug.Log("run survey!");
        //计算受伤
        enemyEntity.m_events.AddInjure(tmpHp - deadComp.hp);
        tmpHp = deadComp.hp;

        Survey(enemyEntity.m_entity);
        return;
    }
Ejemplo n.º 3
0
    //每帧都会调用对应的实体
    public override void Execute(List <BasicEntity> entities)
    {
        foreach (BasicEntity e in entities)
        {
            AttackComponent  attack = e.GetComponent <AttackComponent> ();
            VoxelBlocks      map    = GameObject.Find("Voxel Map").transform.GetComponent <VoxelBlocks> ();
            AbilityComponent ab     = e.GetComponent <AbilityComponent> ();
            InputComponent   input  = e.GetComponent <InputComponent> ();
            StateComponent   ap     = e.GetComponent <StateComponent> ();

            int i = AiToInput.GetAbilityCount(e, M_LinkedType);
            //检测是否按下攻击键

            if (i >= ab.m_temporaryAbility.Count || i != input.currentKey)
            {
                continue;
            }

            //若无攻击对象则获取周围可攻击对象
            if (attack.enemy == null)
            {
                attack.enemy = GetEnemyAround(e);
                if (attack.enemy == null)
                {
                    return;
                }
            }
            List <Vector3> el = new List <Vector3> ();
            foreach (var enemy in attack.enemy)
            {
                el.Add(enemy.GetComponent <BlockInfoComponent> ().m_logicPosition);
            }
            UISimple ui = GameObject.Find("UI").GetComponent <UISimple> ();
            ui.ShowUI(el, 2);

            //左键攻击
            if (input.leftButtonDown)
            {
                BasicEntity enemy = map.GetBlockByLogicPos(input.currentPos).entity;

                //检测当前选中敌人是否处于攻击范围内
                List <BasicEntity> list = GetEnemyAround(e);
                if (list != null && !list.Contains(enemy))
                {
                    attack.enemy = list;
                    return;
                }
                //扣除敌人HP值
                DeadComponent  dead  = enemy.GetComponent <DeadComponent> ();
                StateComponent state = e.GetComponent <StateComponent> ();
                dead.hp             -= attack.STR;
                state.m_actionPoint -= 1;
                state.Invoke("AnimationEnd", 1);
                state.AnimationStart();
                //播放攻击动画
                //播放敌人受击动画
                //减少AP
            }
        }
    }
Ejemplo n.º 4
0
    public override void Exit(T enemyEntity)
    {
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        enemyEntity.m_events.AddDemage(tmpHp - deadComp.hp);
        tmpHp = deadComp.hp;
    }
Ejemplo n.º 5
0
    public override void Execte(T enemyEntity)
    {
        MonitorComponent  monitorComp  = (MonitorComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Monitor);
        PropertyComponent propertyComp = (PropertyComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Property);
        DeadComponent     deadComp     = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        //如果没有敌人
        if (monitorComp.m_enemy.Count == 0)
        {
            enemyEntity.ChangeDecision(AIComponent.Decision.Patrol);
            return;
        }
        else
        {
            ////如果遇到了敌人,且敌人的距离足够近
            //double threat = FuzzyLogic.DistanceThreat (CalculateDistance (enemyEntity.m_entity), propertyComp.HP);

            //if (threat > 0.4f) {
            enemyEntity.ChangeDecision(AIComponent.Decision.Attack);
            return;
            //	return;
            //} else {
            //	enemyEntity.ChangeDecision (AIComponent.Decision.Escape);
            //	return;
            //}
        }

        //计算受伤
        enemyEntity.m_events.AddInjure(tmpHp - deadComp.hp);
        tmpHp = deadComp.hp;

        CallSupport(enemyEntity);
        return;
    }
Ejemplo n.º 6
0
    void RemoveDead(DeadComponent dead)
    {
        GameObject.Destroy(dead.gameObject, 1);
        //播放死亡动画
        VoxelBlocks map = GameObject.Find("Voxel Map").transform.GetComponent <VoxelBlocks> ();

        map.RemoveBlock(dead.GetComponent <BlockInfoComponent> ().m_logicPosition);
    }
Ejemplo n.º 7
0
    public override void Exit(T enemyEntity)
    {
        Debug.Log("exit patrol!");
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        //记录生命值
        enemyEntity.m_events.AddInjure(m_tmpHp - deadComp.hp);
        m_tmpHp = deadComp.hp;
    }
Ejemplo n.º 8
0
    public override void Enter(T enemyEntity)
    {
        //enemyEntity.m_events.AddEvent (AIComponent.Decision.Escape);
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        tmpHp = deadComp.hp;
        Escape(enemyEntity);
        return;
    }
Ejemplo n.º 9
0
    public override void Exit(T enemyEntity)
    {
        Debug.Log("exit survey!");
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        enemyEntity.m_entity.GetComponent <MonitorComponent> ().m_voice.Clear();

        //计算受伤
        enemyEntity.m_events.AddInjure(tmpHp - deadComp.hp);
        tmpHp = deadComp.hp;
    }
Ejemplo n.º 10
0
    public override void Enter(T enemyEntity)
    {
        enemyEntity.m_entity.GetComponent <AIComponent> ().m_currentDecision = AIComponent.Decision.CallSupport;

        enemyEntity.m_events.AddEvent(AIComponent.Decision.CallSupport);
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        tmpHp = deadComp.hp;
        CallSupport(enemyEntity);
        return;
    }
Ejemplo n.º 11
0
    public override void Enter(T enemyEntity)
    {
        enemyEntity.m_entity.GetComponent <AIComponent> ().m_currentDecision = AIComponent.Decision.Survey;

        Debug.Log("enter survey!");
        enemyEntity.m_events.AddEvent(AIComponent.Decision.Survey);
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        tmpHp = deadComp.hp;
        Survey(enemyEntity.m_entity);
        return;
    }
Ejemplo n.º 12
0
    public override void Enter(T enemyEntity)
    {
        enemyEntity.m_entity.GetComponent <AIComponent> ().m_currentDecision = AIComponent.Decision.Patrol;

        enemyEntity.m_events.AddEvent(AIComponent.Decision.Patrol);
        //记录回合开始时的生命值
        DeadComponent deadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        m_tmpHp = deadComp.hp;
        Debug.Log("enter patrol!");
        Patrol(enemyEntity.m_entity);
        return;
    }
Ejemplo n.º 13
0
    public void LoadInfo()
    {
        if (currentRole == null)
        {
            return;
        }
        PropertyComponent c_Pro   = currentRole.GetComponent <PropertyComponent>();
        DeadComponent     c_Dead  = currentRole.GetComponent <DeadComponent>();
        StateComponent    c_State = currentRole.GetComponent <StateComponent>();

        transform.Find("HP").GetComponent <Text>().text   = "HP: " + c_Dead.hp.ToString() + "/" + c_Pro.HP.ToString();
        transform.Find("AP").GetComponent <Text>().text   = "AP: " + c_State.m_actionPoint.ToString() + "/" + c_Pro.AP.ToString();
        transform.Find("Name").GetComponent <Text>().text = "Name: " + c_Pro.name;
        transform.Find("ATK").GetComponent <Text>().text  = "ATK: " + c_Pro.STR.ToString();
        transform.Find("SPD").GetComponent <Text>().text  = "SPD: " + c_Pro.SPD.ToString();
    }
Ejemplo n.º 14
0
    public override void Enter(T enemyEntity)
    {
        enemyEntity.m_entity.GetComponent <AIComponent> ().m_currentDecision = AIComponent.Decision.Attack;
        Debug.Log("enter attack!");
        MonitorComponent monitorComp = (MonitorComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Monitor);

        target = monitorComp.m_enemy [0];
        DeadComponent selfDeadComp   = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);
        DeadComponent targetDeadComp = (DeadComponent)target.GetSpecicalComponent(ComponentType.Dead);

        tmpHp       = selfDeadComp.hp;
        tmpTargetHp = targetDeadComp.hp;
        //enemyEntity.m_events.AddEvent (AIComponent.Decision.Attack);
        Attack(enemyEntity.m_entity);

        return;
    }
Ejemplo n.º 15
0
    private void InitPlayerActionList(List <BasicEntity> entities)
    {
        playerActionList.Clear();
        //获取实体
        foreach (BasicEntity e in entities)
        {
            DeadComponent  deadComp       = (DeadComponent)e.GetSpecicalComponent(ComponentType.Dead);
            StateComponent stateComponent = (StateComponent)e.GetSpecicalComponent(ComponentType.State);
            if (deadComp != null && deadComp.hp <= 0)
            {
                continue;
            }
            PropertyComponent PropertyComponent = (PropertyComponent)e.GetSpecicalComponent(ComponentType.Property);

            if (PropertyComponent.m_characterType == PropertyComponent.CharacterType.Veteran ||
                PropertyComponent.m_characterType == PropertyComponent.CharacterType.Hacker ||
                PropertyComponent.m_characterType == PropertyComponent.CharacterType.Drone)
            {
                //将实体入列
                playerActionList.Add(e);
            }
        }
        if (playerActionList.Count == 0)
        {
            Skyunion.UIManager.Instance().ShowPanel <UIGameFailPanel>();
        }
        //TODO:后续修改
        playerActionList.Sort(delegate(BasicEntity x, BasicEntity y) {
            PropertyComponent stateX = (PropertyComponent)x.GetSpecicalComponent(ComponentType.Property);
            PropertyComponent stateY = (PropertyComponent)y.GetSpecicalComponent(ComponentType.Property);
            Debug.Log("stateX.m_agility : " + stateX.m_agility + "stateY.m_agility" + stateY.m_agility);
            return(-stateX.m_agility.CompareTo(stateY.m_agility));
        });

        foreach (BasicEntity e in playerActionList)
        {
            Debug.Log(e.gameObject.name + "->");
        }
        StateStaticComponent.playerActionList = playerActionList;
        //确定现在在行动的角色1.是否又有角色在行动。2,角色的行动点是否已经耗尽
    }
Ejemplo n.º 16
0
    public override void Execte(T enemyEntity)
    {
        Debug.Log("check patrol!");
        MonitorComponent  monitorComp  = (MonitorComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Monitor);
        PropertyComponent propertyComp = (PropertyComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Property);
        DeadComponent     deadComp     = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);


        if (monitorComp.m_enemy.Count != 0)
        {
            //if (deadComp.hp / propertyComp.HP > 0.2f) {

            //发现敌人,且生命值充足
            enemyEntity.ChangeDecision(AIComponent.Decision.Attack);
            return;

            //} else {

            //	if (AiToInput.ExistEnemy () == true) {
            //		enemyEntity.ChangeDecision (AIComponent.Decision.CallSupport);
            //		return;
            //	}

            //}
        }
        if (monitorComp.m_voice.Count != 0)
        {
            //if (deadComp.hp / propertyComp.HP > 0.2f) {

            enemyEntity.ChangeDecision(AIComponent.Decision.Survey);
            return;
            //}
        }
        Debug.Log("run patrol!");
        //计算在上一回合中受到的伤害
        enemyEntity.m_events.AddInjure(m_tmpHp - deadComp.hp);
        m_tmpHp = deadComp.hp;

        Patrol(enemyEntity.m_entity);
        return;
    }
Ejemplo n.º 17
0
    private void updateInfo()
    {
        if (current == null)
        {
            return;
        }
        PropertyComponent c_Pro   = currentRole.GetComponent <PropertyComponent>();
        DeadComponent     c_Dead  = currentRole.GetComponent <DeadComponent>();
        StateComponent    c_State = currentRole.GetComponent <StateComponent>();

        if (c_Pro == null || c_Dead == null || c_State == null)
        {
            return;
        }
        current.Find("HP").GetComponent <Text>().text             = "HP:" + c_Dead.hp.ToString();
        current.Find("AP").GetComponent <Text>().text             = "AP:" + c_State.m_actionPoint.ToString();
        current.Find("Name").GetComponent <Text>().text           = c_Pro.name;
        current.Find("HPSlider").GetComponent <Slider>().maxValue = c_Pro.HP;
        current.Find("HPSlider").GetComponent <Slider>().value    = c_Dead.hp;
        current.Find("APSlider").GetComponent <Slider>().maxValue = c_Pro.AP;
        current.Find("APSlider").GetComponent <Slider>().value    = c_State.m_actionPoint;

        foreach (BasicEntity role in StateStaticComponent.playerActionList)
        {
            if (role == currentRole)
            {
                continue;
            }
            PropertyComponent f_Pro  = role.GetComponent <PropertyComponent>();
            DeadComponent     f_Dead = role.GetComponent <DeadComponent>();
            if (f_Pro == null || f_Dead == null)
            {
                continue;
            }
            others.Find("HP").GetComponent <Text>().text             = "HP:" + f_Dead.hp.ToString();
            others.Find("Name").GetComponent <Text>().text           = f_Pro.name;
            others.Find("HPSlider").GetComponent <Slider>().maxValue = f_Pro.HP;
            others.Find("HPSlider").GetComponent <Slider>().value    = f_Dead.hp;
        }
    }
Ejemplo n.º 18
0
    public override void Exit(T enemyEntity)
    {
        Debug.Log("quit attack!");
        DeadComponent selfDeadComp = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        if (target == null || target.m_components.Count == 0)
        {
            //如果敌人死亡了,那么把最后记录的敌人生命全部加上

            enemyEntity.m_events.AddDemage(tmpTargetHp);
            tmpTargetHp = 0;
        }
        else
        {
            //如果敌人没有死亡,那么获取当前的生命加入事件伤害中
            DeadComponent targetDeadComp = (DeadComponent)target.GetSpecicalComponent(ComponentType.Dead);
            enemyEntity.m_events.AddDemage(tmpTargetHp - targetDeadComp.hp);
            tmpTargetHp = targetDeadComp.hp;
        }
        //唯一一个会记录攻击的区域
        enemyEntity.m_events.AddInjure(tmpHp - selfDeadComp.hp);
        tmpHp = selfDeadComp.hp;
    }
Ejemplo n.º 19
0
    //添加某一类型的组件
    public BasicComponent AddComponent(ComponentType type)
    {
        if (ExistSpecialComponent(type))
        {
            //Debug.Log("Exist same component Type" + type);
            return(GetSpecicalComponent(type));
        }
        //Debug.Log ("Add component" + type + " in " + gameObject);

        PropertyComponent property = GetComponent <PropertyComponent> ();

        switch (type)
        {
        case ComponentType.Property:
            PropertyComponent propertyComp = gameObject.AddComponent <PropertyComponent> ();
            propertyComp.Init(ComponentType.Property, this);
            m_components.Add(propertyComp);
            return(propertyComp);

        case ComponentType.Dead:
            DeadComponent deadComp = gameObject.AddComponent <DeadComponent> ();
            deadComp.Init(ComponentType.Dead, this);
            deadComp.hp = property.HP;
            m_components.Add(deadComp);

            return(deadComp);

        case ComponentType.State:
            StateComponent stateComp = gameObject.AddComponent <StateComponent> ();
            stateComp.Init(ComponentType.State, this);
            m_components.Add(stateComp);
            stateComp.m_actionPoint = property.AP;
            return(stateComp);

        case ComponentType.Ability:
            AbilityComponent abilityComp = gameObject.AddComponent <AbilityComponent> ();
            abilityComp.Init(ComponentType.Ability, this);
            m_components.Add(abilityComp);
            return(abilityComp);

        case ComponentType.Hide:
            HideComponent hideComp = gameObject.AddComponent <HideComponent> ();
            hideComp.Init(ComponentType.Hide, this);
            m_components.Add(hideComp);
            return(hideComp);

        case ComponentType.Move:
            MoveComponent moveComp = gameObject.AddComponent <MoveComponent> ();
            moveComp.Init(ComponentType.Move, this);
            m_components.Add(moveComp);
            moveComp.moveSpeed = property.moveSpd;
            moveComp.SPD       = property.SPD;
            return(moveComp);

        case ComponentType.Attack:
            AttackComponent attackComp = gameObject.AddComponent <AttackComponent> ();
            attackComp.Init(ComponentType.Attack, this);
            m_components.Add(attackComp);
            attackComp.STR = property.STR;
            return(attackComp);

        case ComponentType.Input:
            InputComponent inputComp = gameObject.AddComponent <InputComponent> ();
            inputComp.Init(ComponentType.Input, this);
            m_components.Add(inputComp);
            return(inputComp);

        case ComponentType.CheerUp:
            CheerUpComponent cheerUpComp = gameObject.AddComponent <CheerUpComponent> ();
            cheerUpComp.Init(ComponentType.CheerUp, this);
            m_components.Add(cheerUpComp);
            return(cheerUpComp);

        case ComponentType.Monitor:
            MonitorComponent monitorComp = gameObject.AddComponent <MonitorComponent> ();
            monitorComp.Init(ComponentType.Monitor, this);
            m_components.Add(monitorComp);
            monitorComp.m_SightArea = property.HRZ;
            return(monitorComp);

        case ComponentType.Knock:
            KnockComponent knockComp = gameObject.AddComponent <KnockComponent> ();
            knockComp.Init(ComponentType.Knock, this);
            m_components.Add(knockComp);
            knockComp.m_ridus = property.HRZ;
            return(knockComp);

        case ComponentType.Item:
            ItemComponent itemComp = gameObject.AddComponent <ItemComponent> ();
            itemComp.Init(ComponentType.Item, this);
            itemComp.item     = property.item;
            itemComp.numLimit = property.itemLimit;
            m_components.Add(itemComp);
            return(itemComp);

        case ComponentType.AI:
            AIComponent aiComp = gameObject.AddComponent <AIComponent> ();
            aiComp.Init(ComponentType.AI, this);
            m_components.Add(aiComp);
            return(aiComp);

        case ComponentType.UI:
            UIComponent uiComp = gameObject.AddComponent <UIComponent>();
            uiComp.Init(ComponentType.UI, this);
            m_components.Add(uiComp);
            return(uiComp);

        default:
            return(null);
        }
    }
Ejemplo n.º 20
0
    public override void Execte(T enemyEntity)
    {
        Debug.Log("exec attack!");
        MonitorComponent  monitorComp  = (MonitorComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Monitor);
        PropertyComponent propertyComp = (PropertyComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Property);
        DeadComponent     deadComp     = (DeadComponent)enemyEntity.m_entity.GetSpecicalComponent(ComponentType.Dead);

        //生命值不足,且上一个动作不是呼叫朋友
        if (deadComp.hp < 0.1f * propertyComp.HP && enemyEntity.m_events.CurrentDecision() != AIComponent.Decision.CallSupport)
        {
            //同时有朋友存在
            if (AiToInput.ExistEnemy())
            {
                enemyEntity.ChangeDecision(AIComponent.Decision.CallSupport);
                return;
            }
        }

        //如果敌人已经死亡
        if (target == null || target.m_components.Count == 0)
        {
            //如果附近还有敌人
            if (monitorComp.m_enemy.Count != 0)
            {
                target = monitorComp.m_enemy [0];
            }

            if (monitorComp.m_enemy.Count != 0)
            {
                if (deadComp.hp / propertyComp.HP > 0.3f)
                {
                    // 如果有玩家,且敌人的生命值较高的话,切换对象攻击,切换对象会在enter时进行
                    enemyEntity.ChangeDecision(AIComponent.Decision.Attack);
                    return;
                }
                else
                {
                    //有玩家,但是生命值不高,可以逃跑

                    if (AiToInput.ExistEnemy() && enemyEntity.m_events.CurrentDecision() != AIComponent.Decision.CallSupport)
                    {
                        enemyEntity.ChangeDecision(AIComponent.Decision.CallSupport);
                        return;
                    }
                }
            }

            if (monitorComp.m_voice.Count != 0)
            {
                //float i = Random.value;

                //double degreeAttack = FuzzyLogic.AttackBelong (deadComp.hp, propertyComp.HP);
                //double degreeProtect = FuzzyLogic.ProtectBelong (deadComp.hp, propertyComp.HP);

                if (deadComp.hp / propertyComp.HP > 0.2f)
                {
                    //听到声音,生命充足
                    //float j = Random.value;
                    //float surveyDemage = enemyEntity.m_events.DecisionExpectDemage (AIComponent.Decision.Survey);
                    //float patrolDemage = enemyEntity.m_events.DecisionExpectDemage (AIComponent.Decision.Patrol);
                    //Debug.Log ("surveyDemage" + surveyDemage + "patrolDemage" + patrolDemage);
                    //根据历史计算哪种行动造成的伤害更多
                    //if (j >0.3f) {
                    enemyEntity.ChangeDecision(AIComponent.Decision.Survey);
                    return;
                    //} else {
                    //enemyEntity.ChangeDecision (AIComponent.Decision.Patrol);
                    //return;
                    //}
                }
                else
                {
                    //float j = Random.value;
                    //float surveyInjure = enemyEntity.m_events.DecisionExpectInjure (AIComponent.Decision.Survey);
                    //float patrolInjeure = enemyEntity.m_events.DecisionExpectInjure (AIComponent.Decision.Patrol);
                    //if (j > 0.3f) {
                    if (AiToInput.ExistEnemy() && enemyEntity.m_events.CurrentDecision() != AIComponent.Decision.CallSupport)
                    {
                        enemyEntity.ChangeDecision(AIComponent.Decision.CallSupport);
                        return;
                    }

                    //} else {
                    //enemyEntity.ChangeDecision (AIComponent.Decision.Patrol);
                    //return;
                    //}
                }
            }

            //敌人死亡且旁边没有敌人,返回巡逻
            enemyEntity.ChangeDecision(AIComponent.Decision.Patrol);
            return;
        }
        Debug.Log("run attack!");
        //计算受伤
        DeadComponent targetDeadComp = (DeadComponent)target.GetSpecicalComponent(ComponentType.Dead);

        enemyEntity.m_events.AddInjure(tmpHp - deadComp.hp);
        enemyEntity.m_events.AddDemage(tmpTargetHp - targetDeadComp.hp);
        tmpHp       = deadComp.hp;
        tmpTargetHp = targetDeadComp.hp;
        Attack(enemyEntity.m_entity);
        return;
    }