示例#1
0
    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);
    }
示例#2
0
 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));
     });
 }
示例#3
0
 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));
 }
示例#4
0
    private void Awake()
    {
        GetComponent <CircleCollider2D>().radius = visionSize;

        seeker        = GetComponent <Seeker>();
        rb            = GetComponent <Rigidbody2D>();
        targetChooser = GetComponent <TargetChooser>();
        lastPos       = transform.position;
    }
示例#5
0
    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);
    }
示例#6
0
 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);
 }
示例#7
0
    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;
        }
    }
示例#8
0
 /// <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));
                 }
             });
         });
     }
 }
示例#9
0
 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));
 }