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); }
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); //} } }
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); } }
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; } } }
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); }
/// <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); }
/// <summary> /// 处理其他状态向移动状态迁移的函数,在这里 /// 简单的为移动地点添加一个移动特效 /// </summary> public override void OnTransition() { GameObject.Instantiate(BlackBorad.GetGameObject("MoveEffect"), BlackBorad.GetVector3("ClickPosition"), Quaternion.identity); }
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); }
public void Init() { position = BlackBorad.GetVector3("ClickPosition"); characterMono = BlackBorad.CharacterMono; }