public bool FindTarget() { List <GameObject> allobj = TargetChooser.FindTargetInSector(transform.position, m_SectorRadius, transform.forward, transform.position, m_SectorDegree); List <GameObject> unendure_objs = FiltUnEndureObj(allobj); if (m_TargetChoosePriority == TargetChoosePriority.kChooseMostForward) { m_Target = TargetChooser.GetMostForwardObj(transform.position, transform.forward, m_ColliderManager.FiltEnimy(unendure_objs)); } else { m_Target = TargetChooser.GetNearestObj(transform.position, m_ColliderManager.FiltEnimy(unendure_objs)); } if (m_Target == null) { return(false); } else { m_SkillMovement.SetFacePos(m_Target.transform.position); ControlTarget(m_Target); if (!SkillManager.AttatchNodeToNode(gameObject, m_ToggleNodeName, m_Target, m_TargetNodeName)) { m_Target = null; return(false); } Vector3 pos = m_Target.transform.position; DashFire.LogicSystem.NotifyGfxUpdatePosition(m_Target, pos.x, pos.y, pos.z); } return(true); }
protected static Action <PGame> MakeNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, TargetChooser PlayerTargetChooser, EffectFunc Effect, Action <PGame, PPlayer, List <PPlayer> > StartAction = null, Action <PGame, PPlayer, List <PPlayer> > EndAction = null) { return((PGame Game) => { List <PPlayer> Targets = Player.IsAI ? AITargetChooser(Game, Player) : PlayerTargetChooser(Game, Player); Targets.RemoveAll((PPlayer _Player) => _Player == null); if (Targets.Count == 0) { return; } Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets)); if (Card.Point > 0) { Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.SettlingArea); } Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets)); Targets = ArrangeTargets(Game, Targets, Player); Game.TagManager.CreateTag(new PUseCardTag(Card, Player, Targets)); StartAction?.Invoke(Game, Player, Targets); Targets.ForEach((PPlayer Target) => { if (Target != null && Target.IsAlive) { Effect(Game, Player, Target); } }); EndAction?.Invoke(Game, Player, Targets); Game.TagManager.PopTag <PUseCardTag>(PUseCardTag.TagName); if (Card.Point > 0) { Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Game.CardManager.ThrownCardHeap); } Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets)); }); }
protected static Action <PGame> MakeNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, PTrigger.PlayerCondition TargetCondition, EffectFunc Effect) { return(MakeNormalEffect(Player, Card, AITargetChooser, (PGame Game, PPlayer _Player) => { return new List <PPlayer> { PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(_Player, TargetCondition, Card.Name) }; }, Effect)); }
private void Awake() { GetComponent <CircleCollider2D>().radius = visionSize; seeker = GetComponent <Seeker>(); rb = GetComponent <Rigidbody2D>(); targetChooser = GetComponent <TargetChooser>(); lastPos = transform.position; }
public List <GameObject> GetEnimyInSector(Vector3 center, float radius, Vector3 direction, Vector3 degreeCenter, float degree) { List <GameObject> all_target = TargetChooser.FindTargetInSector(center, radius, direction, degreeCenter, degree); List <GameObject> targets = m_ColliderManager.FiltEnimy(all_target); return(targets); }
public override bool StartSkill() { if (!CanStart()) { m_CurTime = m_RepeatTimes; return(false); } m_CurTime += 1; if (m_CurTime > m_RepeatTimes) { m_CurTime = m_CurTime % m_RepeatTimes; } if (m_CurTime == 1) { List <GameObject> allobj = TargetChooser.FindTargetInSector(transform.position, m_SectorRadius, transform.forward, transform.position, m_SectorDegree); if (m_TargetChoosePriority == TargetChoosePriority.kChooseMostForward) { m_Target = TargetChooser.GetMostForwardObj(transform.position, transform.forward, FiltEnimy(allobj)); } else { m_Target = TargetChooser.GetNearestObj(transform.position, FiltEnimy(allobj)); } } if (m_Target == null) { m_CurTime = m_RepeatTimes; ForceStopSkill(); return(false); } else { m_SkillMovement.SetFacePos(m_Target.transform.position); } if (!base.StartSkill()) { m_CurTime = m_RepeatTimes; return(false); } m_ObjAnimation[m_SkillAnim.name].normalizedTime = 0; m_ObjAnimation[m_SkillAnim.name].speed = m_AnimSpeed; m_ObjAnimation[m_SkillAnim.name].wrapMode = WrapMode.ClampForever; if (m_CrossFadeTime == 0) { m_ObjAnimation.Play(m_SkillAnim.name); } else { m_ObjAnimation[m_SkillAnim.name].weight = m_StartWeight; m_ObjAnimation.CrossFade(m_SkillAnim.name, m_CrossFadeTime); } return(true); }
public void FindMoveTarget(string param_str) { string[] params_list = param_str.Split(' '); if (params_list.Length < 8) { return; } int index = 0; Vector3 center = new Vector3(); center.x = (float)System.Convert.ToDouble(params_list[index++]); center.y = (float)System.Convert.ToDouble(params_list[index++]); center.z = (float)System.Convert.ToDouble(params_list[index++]); float radius = (float)System.Convert.ToDouble(params_list[index++]); float degree = (float)System.Convert.ToDouble(params_list[index++]); bool isChooseClosest = System.Convert.ToBoolean(params_list[index++]); float toTargetDistanceRatio = (float)System.Convert.ToDouble(params_list[index++]); float toTargetConstDistance = (float)System.Convert.ToDouble(params_list[index++]); Vector3 world_center = transform.TransformPoint(center); List <GameObject> allobj = TargetChooser.FindTargetInSector(world_center, radius, transform.forward, world_center, degree); GameObject target = null; if (isChooseClosest) { target = TargetChooser.GetNearestObj(transform.position, FiltEnimy(allobj)); } else { target = TargetChooser.GetMostForwardObj(transform.position, transform.forward, FiltEnimy(allobj)); } SkillScript ss = m_SkillManager.GetCurPlaySkill(); if (ss != null) { ss.MoveTarget = target; ss.ToTargetDistanceRatio = toTargetDistanceRatio; ss.ToTargetConstDistance = toTargetConstDistance; } }
/// <summary> /// 往手牌触发器列表中加入使用伏兵的函数 /// </summary> /// <param name="AITargetChooser">AI指定目标的函数</param> /// <param name="SelfOnly">是否只能指定自己为目标,false表示不能指定自己</param> /// <param name="AIPriority">AI优先级</param> protected void BuildAmbush(TargetChooser AITargetChooser, bool SelfOnly, int AIPriority) { foreach (PTime Time in new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger("使用伏兵") { IsLocked = false, Player = Player, Time = Time, AIPriority = AIPriority, Condition = (PGame Game) => { bool Existed = false; if (SelfOnly) { Existed = Player.Area.AmbushCardArea.CardList.Exists((PCard _Card) => _Card.Model.Name.Equals(Card.Name)); } else { Existed = Game.PlayerList.FindAll((PPlayer _Player) => _Player.IsAlive && !_Player.Equals(Player)).TrueForAll((PPlayer _Player) => _Player.Area.AmbushCardArea.CardList.Exists((PCard _Card) => _Card.Model.Name.Equals(Card.Name))); } return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && !Existed; }, AICondition = (PGame Game) => { return AITargetChooser(Game, Player)[0] != null; }, Effect = (PGame Game) => { List <PPlayer> Targets = new List <PPlayer> { null }; if (Player.IsAI) { Targets = AITargetChooser(Game, Player); } else { if (SelfOnly) { Targets = new List <PPlayer> { Player }; } else { Targets = new List <PPlayer> { PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, (PGame _Game, PPlayer _Player) => { return _Player.IsAlive && !_Player.Equals(Player) && !_Player.Area.AmbushCardArea.CardList.Exists((PCard _Card) => _Card.Model.Name.Equals(Card.Name)); }, Card.Name) }; } } Targets.RemoveAll((PPlayer _Player) => _Player == null); if (Targets.Count == 0) { return; } Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets)); Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets)); if (Targets.Count > 0) { Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Targets[0].Area.AmbushCardArea); } else { Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.ThrownCardHeap); } Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets)); } }); }); } }
protected static Action <PGame> MakeMultiTargetNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, PTrigger.PlayerCondition TargetCondition, EffectFunc Effect, int MaxNumber = -1) { return(MakeNormalEffect(Player, Card, AITargetChooser, (PGame Game, PPlayer _Player) => { return PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayers(_Player, TargetCondition, Card.Name, MaxNumber); }, Effect)); }