Example #1
0
    public override bool IsValid()
    {
        CharacterMono characterMono = BlackBorad.CharacterMono;

        if (characterMono.prepareSkill.IsMustDesignation)
        {
            target = BlackBorad.GetCharacterMono("Enemry");
        }
        else
        {
            targetPosition = BlackBorad.GetVector3("EnemryPosition");
        }

        if ((characterMono.prepareSkill.IsMustDesignation && target == null) || characterMono == null)
        {
            return(false);
        }

        Vector3 position = target == null ? targetPosition : target.transform.position;

        if ((Input.GetKeyDown(KeyCode.Escape) || Input.GetMouseButtonDown(1)) &&
            Vector2.Distance(
                new Vector2(position.x, position.z),
                new Vector2(characterMono.transform.position.x, characterMono.transform.position.z)
                ) > characterMono.prepareSkill.SpellDistance
            )
        {
            Debug.Log("单位按下ESC键,并且两个单位相距距离超过技能释放距离");
            BlackBorad.GameObject.GetComponent <CharacterMono>().isPrepareUseSkill = false;
            return(true);
        }
        return(false);
    }
    public override bool IsValid()
    {
        if (Input.GetMouseButtonDown(1) && !EventSystem.current.IsPointerOverGameObject())      // 防止鼠标穿透UI
        {
            Debug.Log("用户按下鼠标对敌人进行攻击");
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.collider.CompareTag("Enermy"))
                {
                    // 为黑板设置变量
                    BlackBorad.SetTransform("EnemryTransform", hit.collider.transform);
                    BlackBorad.SetComponent("Enemry", hit.collider.gameObject.GetComponent <CharacterMono>());
                    return(true);
                }
            }
        }
        // 如果没有进行攻击,对黑板中的EnemryTransform和Enemry变量进行清空操作
        //BlackBorad.SetObject("EnemryTransform", null);
        //BlackBorad.SetObject("Enemry",null);


        return(false);
    }
Example #3
0
    public override void OnUpdate()
    {
        Debug.Log("SpellUpdate:" + spllerMono.name);

        // reuslt为施法结束状态,为true表示施法结束,其中施法成功、施法失败均表示施法结束,也就是
        bool result = false;

        // 如果施放技能状态结束,就自动回到Idle状态,为黑板设置变量
        if (spllerMono != null)
        {
            Debug.Log("进入spell状态,准备释放技能:" + spllerMono.prepareSkill.SkillName);
            if (spllerMono.prepareSkill.IsMustDesignation && enemryMono != null)
            {
                result = spllerMono.Spell(enemryMono, enermyTransform.position);
            }
            else
            {
                result = spllerMono.Spell(enermyPosition);
            }

            if (result)
            {
                BlackBorad.SetBool("IsUseSkillFinish", true);
                BlackBorad.SetBool("isPrePareUseSkill", false);
            }

            //// 如果目标单位不能被攻击,回到Idle状态
            //if (enemryMono!=null && !enemryMono.IsCanBeAttack()) {
            //    BlackBorad.SetBool("IsUseSkillFinish", true);
            //    BlackBorad.SetBool("isPrePareUseSkill", false);
            //}
        }
    }
Example #4
0
 public void Init()
 {
     characterMono   = BlackBorad.CharacterMono;
     EnemryTransform = BlackBorad.GetTransform("EnemryTransform");
     //enemryMono = BlackBorad.GetGameObject("Enemry").GetComponent<CharacterMono>();
     enemryMono = BlackBorad.GetCharacterMono("Enemry");
 }
 public override bool IsValid()
 {
     if (BlackBorad.GetBool("IsMoveOver"))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Example #6
0
 public override void OnUpdate()
 {
     // 单位进行移动
     if (!characterMono.Move(position))
     {
         // 移动结束设置黑板中的IsMoveOver变量为True
         BlackBorad.SetBool("IsMoveOver", true);
     }
     else
     {
         BlackBorad.SetBool("IsMoveOver", false);
     }
 }
    public override bool IsValid()
    {
        bool IsUseSkillFinish = BlackBorad.GetBool("IsUseSkillFinish");

        if (IsUseSkillFinish)
        {
            BlackBorad.SetBool("IsUseSkillFinish", false);
            return(true);
        }
        else
        {
            return(false);
        }
    }
    /// <summary>
    /// 如果人物按下了主动技能中的任意一个,为黑板中设置变量
    /// isPrePareUseSkill为True
    /// </summary>
    public override void OnUpdate()
    {
        if (isFirstEnter)
        {
            OnEnter();
            isFirstEnter = false;
        }

        // 判断单位是否按下它的主动技能
        foreach (ActiveSkill skill in characterModel.activeSkills)
        {
            // 是否按下按键,如果按下,则令prepareSkill=skill
            if (skill.SkillLevel != 0 && Input.GetKeyDown(skill.KeyCode) && !skill.IsCoolDown())
            {
                #region 准备释放技能事件
                // 触发准备释放技能事件,因为本状态机理论上只有玩家操作的角色才会有,所以无需担心监听方法触发到了奇奇怪怪的对象
                MessageAggregator.Instance.Broadcast <CharacterMono, ActiveSkill>(EventType.OnPlayerPrepareSell, characterMono, skill);
                #endregion

                characterMono.prepareSkill = skill;

                Debug.Log("为CharacterMono设置prepareSkill技能,技能是:" + characterMono.prepareSkill.SkillName);

                characterMono.isPrepareUseSkill = true;
                BlackBorad.SetBool("isPrePareUseSkill", true);
                return;
            }
        }

        // 判断单位是否按下它的物品技能
        foreach (ItemGrid itemGrid in characterModel.itemGrids)
        {
            if (itemGrid.item == null)
            {
                continue;
            }
            ActiveSkill activeSkill = itemGrid.item.itemActiveSkill;
            if (Input.GetKeyDown(itemGrid.hotKey) && !activeSkill.IsCoolDown())
            {
                Debug.Log("按下了物品特技:" + itemGrid.item.name);
                characterMono.prepareSkill      = activeSkill;
                characterMono.isPrepareUseSkill = true;
                BlackBorad.SetBool("isPrePareUseSkill", true);

                characterMono.isPrepareUseItemSkill    = true;
                characterMono.prepareItemSkillItemGrid = itemGrid;
                return;
            }
        }
    }
Example #9
0
    public override void OnEnter()
    {
        spllerMono = BlackBorad.CharacterMono;
        if (spllerMono.prepareSkill.IsMustDesignation)
        {
            enemryMono      = BlackBorad.GetCharacterMono("Enemry");
            enermyTransform = BlackBorad.GetTransform("EnemryTransform");
        }
        else
        {
            enermyPosition = BlackBorad.GetVector3("EnemryPosition");
        }

        // 重置攻击状态
        spllerMono.ResetAttackStateAnimator();
        Debug.Log("进入spell状态");
    }
    public override bool IsValid()
    {
        //Debug.Log("正处于IdleToAttackTransition中,周围敌人的数量是:" + BlackBorad.CharacterMono.arroundEnemies.Count);

        if (BlackBorad.CharacterMono.arroundEnemies.Count > 0)
        {
            CharacterMono target = ChooseOneEnemry();
            if (target == null)
            {
                return(false);
            }
            BlackBorad.SetTransform("EnemryTransform", target.transform);
            BlackBorad.SetComponent("Enemry", target);
            return(true);
        }
        return(false);
    }
    /// <summary>
    /// 如果人物按下了主动技能中的任意一个,为黑板中设置变量
    /// isPrePareUseSkill为True
    /// </summary>
    public override void OnUpdate()
    {
        if (isFirstEnter)
        {
            OnEnter();
            isFirstEnter = false;
        }

        // 判断单位是否按下它的主动技能
        foreach (ActiveSkill skill in characterModel.activeSkills)
        {
            // 是否按下按键,如果按下,则令prepareSkill=skill
            if (skill.SkillLevel != 0 && Input.GetKeyDown(skill.KeyCode) && !skill.IsCoolDown())
            {
                characterMono.prepareSkill = skill;

                Debug.Log("为CharacterMono设置prepareSkill技能,技能是:" + characterMono.prepareSkill.SkillName);

                characterMono.isPrepareUseSkill = true;
                BlackBorad.SetBool("isPrePareUseSkill", true);
                return;
            }
        }

        // 判断单位是否按下它的物品技能
        foreach (ItemGrid itemGrid in characterModel.itemGrids)
        {
            if (itemGrid.item == null)
            {
                return;
            }
            ActiveSkill activeSkill = itemGrid.item.itemActiveSkill;
            if (Input.GetKeyDown(itemGrid.hotKey) && !activeSkill.IsCoolDown())
            {
                Debug.Log("按下了物品特技:" + itemGrid.item.name);
                characterMono.prepareSkill      = activeSkill;
                characterMono.isPrepareUseSkill = true;
                BlackBorad.SetBool("isPrePareUseSkill", true);

                characterMono.isPrepareUseItemSkill    = true;
                characterMono.prepareItemSkillItemGrid = itemGrid;
                return;
            }
        }
    }
    public override bool IsValid()
    {
        //GameObject target = BlackBorad.GetGameObject("Enemry");

        //Debug.Log("AttackToIdleTransition:"+target.name);

        //// 如果单位已被摧毁
        //if (target == null) return true;

        CharacterMono targetMono = BlackBorad.GetCharacterMono("Enemry");

        if (targetMono.isDying || targetMono == null || !targetMono.IsCanBeAttack())
        {
            return(true);
        }

        return(false);
    }
Example #13
0
    /// <summary>
    /// 用户按下鼠标右键后,判断是否点击到了敌人,
    /// 没有点击到的情况下,进行移动
    /// </summary>
    /// <returns></returns>
    public override bool IsValid()
    {
        if (Input.GetMouseButtonDown(1))
        {
            Debug.Log("用户按下鼠标");
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                if (!hit.collider.CompareTag("Enermy"))
                {
                    // 为黑板设置变量
                    BlackBorad.SetVector3("ClickPosition", hit.point);
                    BlackBorad.SetBool("IsMoveOver", false);
                    return(true);
                }
            }
        }
        // 如果没有进行移动,对黑板中的ClickPosition变量进行清空操作
        BlackBorad.SetObject("ClickPosition", null);

        return(false);
    }
Example #14
0
 /// <summary>
 /// 处理其他状态向移动状态迁移的函数,在这里
 /// 简单的为移动地点添加一个移动特效
 /// </summary>
 public override void OnTransition()
 {
     GameObject.Instantiate(BlackBorad.GetGameObject("MoveEffect"), BlackBorad.GetVector3("ClickPosition"), Quaternion.identity);
 }
Example #15
0
    public override bool IsValid()
    {
        characterMono = BlackBorad.CharacterMono;
        if (!BlackBorad.GetBool("isPrePareUseSkill") || characterMono.prepareSkill == null)
        {
            return(false);
        }

        characterModel = characterMono.characterModel;


        // 获得当前要释放的技能
        // 判断该技能是否是原地释放技能,
        // 即判断该主动技能的施法距离是否为0,为0时,
        // 为原地释放技能
        if (characterMono.IsImmediatelySpell())
        {
            // 原地释放技能,直接进入Spell状态
            BlackBorad.SetVector3("EnemryPosition", characterMono.transform.position);
            BlackBorad.SetBool("isPrePareUseSkill", false);

            return(true);
        }
        else
        {
            // 指向型技能
            BlackBorad.SetBool("isImmediatelySpell", false);

            Debug.Log("当前准备施放的是指向型技能");

            // 当为指向型技能时,更改主角的鼠标Icon,
            // 判断主角是否点击敌人,当点击敌人时,进入Spell状态
            if (Input.GetMouseButtonDown(0))
            {
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {
                    if (characterMono.prepareSkill.IsMustDesignation && hit.collider.CompareTag("Enermy"))
                    {
                        // 为黑板设置变量
                        BlackBorad.SetTransform("EnemryTransform", hit.collider.transform);
                        BlackBorad.SetComponent("Enemry", hit.collider.gameObject.GetComponent <CharacterMono>());
                        return(true);
                    }
                    else if (!characterMono.prepareSkill.IsMustDesignation)
                    {
                        // 为黑板设置变量
                        BlackBorad.SetVector3("EnemryPosition", hit.point);
                        return(true);
                    }
                }
            }

            // 如果此时玩家按下ESC键,结束这个准备施法的Transition
            if (Input.GetKeyDown(KeyCode.Escape) || Input.GetMouseButtonDown(1))
            {
                BlackBorad.SetBool("isPrePareUseSkill", false);
                characterMono.isPrepareUseSkill = false;
                return(false);
            }
        }

        return(false);
    }
Example #16
0
 public void Init()
 {
     position      = BlackBorad.GetVector3("ClickPosition");
     characterMono = BlackBorad.CharacterMono;
 }