//绘制战斗格子 void DrawBattleBlock(Vector3 pos, Color c, int x, int y) { //Debug.DrawRay(pos, Vector3.up, c, 1f); var parent = GameObject.Find("decal parent"); if (parent == null) { parent = new GameObject("decal parent"); } var obj = EasyDecal.Project(m_DecalPrefab, pos, Quaternion.identity); obj.transform.SetParent(parent.transform); obj.LateBake(); var bPos = new BattleBlockVector(x, y); var bbd = new BattleBlockData(); bbd.BattlePos = bPos; bbd.WorldPos = pos; bbd.gameObject = obj.gameObject; battleBlocks.Add(bbd); }
/// <summary> /// 添加角色到战场里面 /// </summary> /// <param name="role"></param> /// <param name="team"></param> public void AddBattleRole(RoleInstance role, int team) { //计算NPC应该站的点 BattleBlockData npcStandBlock = FindNearestBattleBlock(/*team == 0 ? _player.View.transform.position :*/ role.View.transform.position); if (npcStandBlock == null) { Debug.LogError($"错误,{role.Key}找不到有效格子"); return; } //加入战场 BattleModel.AddBattleRole(role, npcStandBlock.BattlePos, team, (team != 0)); //待命 role.View.Idle(); var enemy = AIManager.Instance.GetNearestEnemy(role); if (enemy != null) { //面向最近的敌人 role.View.LookAtWorldPosInBattle(enemy.View.transform.position); } //死亡的关键角色默认晕眩 if (role.View.m_IsKeyRole && role.IsDead()) { role.Stun(-1); } }
void OnSelectPos(BattleBlockData data) { //朝向 role.View.LookAtBattleBlock(data); //绑定技能释放位置 BattleStateMechine.Instance.BindSkillPos(data.BattlePos); //切换到技能预展示状态 //BattleStateMechine.Instance.SwitchState(BattleManager.BattleViewStates.PreshowSkillCoverRange); BattleStateMechine.Instance.SwitchState(BattleManager.BattleViewStates.PlayingAction);//释放技能 }
void OnEndSelect(BattleBlockData data) { if (data == null) { return; } //隐藏所有格子 BattleboxHelper.Instance.HideAllBlocks(); BattleStateMechine.Instance.CurrentToPos = data.BattlePos; BattleStateMechine.Instance.SwitchState(BattleManager.BattleViewStates.Move); Debug.Log("moved"); Jyx2_UIManager.Instance.HideUI("BattleActionUIPanel"); }
private void DrawBattleBlock(Vector3 pos, Color c, int x, int y) { var parent = FindOrCreateBlocksParent(); var obj = EasyDecal.Project(m_DecalPrefab, pos, Quaternion.identity); obj.transform.SetParent(parent.transform); //obj.LateBake(); //StartCoroutine(SetDecalsHidenFrames(obj)); var bPos = new BattleBlockVector(x, y); var bbd = new BattleBlockData(); bbd.BattlePos = bPos; bbd.WorldPos = pos; bbd.gameObject = obj.gameObject; battleBlocks.Add(bbd); }
//绘制战斗格子,默认不显示 void DrawBattleBlock(Vector3 pos, Color c, int x, int y, Vector3 normal, BattleboxBlock boxBlock) { var parent = FindOrCreateBlocksParent(); var block = Resources.Load <GameObject>("BattleboxBlock"); var obj = EasyDecal.Project(block, pos, Quaternion.identity); obj.Quality = 2; obj.Distance = 0.05f; obj.transform.SetParent(parent.transform, false); var bPos = new BattleBlockVector(x, y); var bbd = new BattleBlockData(); bbd.BattlePos = bPos; bbd.WorldPos = pos; bbd.gameObject = obj.gameObject; bbd.BoxBlock = boxBlock; battleBlocks.Add(bbd); }
List <GameObject> hitGoList = new List <GameObject>();//当前技能可以打到的角色 public override void OnEnterState() { role = BattleStateMechine.Instance.CurrentRole; zhaoshi = BattleStateMechine.Instance.CurrentZhaoshi; skillPos = BattleStateMechine.Instance.CurrentSkillPos; if (role == null || zhaoshi == null || skillPos == null) { GameUtil.LogError("进入技能展示范围状态失败"); return; } var blockList = BattleManager.Instance.GetSkillCoverBlocks(zhaoshi, skillPos, role.Pos); BattleboxHelper.Instance.ShowBlocks(blockList);//显示技能范围 FillBeHitEnemeyGameObject(blockList); // 将要受到攻击的敌人描边 ShowEnemyOutLine(); BattleBlockData blockData = BattleboxHelper.Instance.GetBlockData(skillPos.X, skillPos.Y); //面板需要根据世界坐标算出ui坐标 显示在格子上方 方便点击 Jyx2_UIManager.Instance.ShowUI("BattleOKPanel", blockData.WorldPos, new Action(OnConfirm), new Action(OnCancel)); }
/// <summary> /// 找到最近的战斗格子 /// </summary> /// <param name="pos"></param> /// <param name="ignoreRole"></param> /// <returns></returns> BattleBlockData FindNearestBattleBlock(Vector3 pos, bool ignoreRole = false) { BattleBlockData rst = null; var list = BattleboxHelper.Instance.GetBattleBlocks(); var minDist = float.MaxValue; foreach (var data in list) { //有人占了这一格了 if (!ignoreRole && BattleModel.BlockHasRole(data.BattlePos.X, data.BattlePos.Y)) { continue; } var dist = (data.WorldPos - pos).sqrMagnitude; if (minDist > dist) { minDist = dist; rst = data; } } return(rst); }
//朝向一个方向 public void LookAtBattleBlock(BattleBlockData pos) { //平视,所以y轴和自身一致 transform.LookAt(new Vector3(pos.WorldPos.x, transform.position.y, pos.WorldPos.z)); }