コード例 #1
0
ファイル: TWalkToTarget.cs プロジェクト: zkm00323/NanoSteam
    public override bool UpdateDo(ref Entity.CtrlInput input) {
        //if (Self.Target == null || Self.Target.GetState() == GlobalVar.State.Dead) return false;
        
        if(Self.Target==
        int selfFloor = GlobalVar.Mask.GetFloor(Self.gameObject.layer);
        int targetFloor = GlobalVar.Mask.GetFloor(Self.Target.gameObject.layer);

        Vector2 selfPos = Self.transform.position;
        Vector2? targetPos = Self.Target.transform.position;
        GameCtrl.Ladder? TargetLadder = null;

        if (Self.Target.GetState() == GlobalVar.State.Climb) return false;
        if (selfFloor == targetFloor) {
            if ((selfPos - (Vector2)targetPos).magnitude < SafeDis) targetPos = null;
        } else {
            bool upDown = selfFloor < targetFloor;
            if (Self.OnLadder) {
                GameCtrl.Ladder ladder = Self.Ladder;
                targetPos = upDown ? ladder.UpPos.position : ladder.DownPos.position;
            } else if (Self.Target.GetType() == typeof(Walker)) {
                Walker target = Self.Target.GetComponent<Walker>();
                if (target.OnLadder && Mathf.Abs(selfFloor - targetFloor) == 1) {
                    if ((selfPos - (Vector2)targetPos).magnitude < SafeDis)
                        targetPos = null;
                    else
                        TargetLadder = target.Ladder;
                } else {
                    foreach (GameCtrl.Ladder ladder in GameCtrl.LadderList) {
                        if (upDown ? ladder.DownFloor == selfFloor : ladder.UpFloor == selfFloor && ladder.AngleType != 0) {
                            if (TargetLadder == null ||
                                Mathf.Abs(selfPos.x - (upDown ? ladder.DownPos.position.x : ladder.UpPos.position.x)) <
                                Mathf.Abs(selfPos.x - (upDown
                                                  ? ((GameCtrl.Ladder)TargetLadder).DownPos.position.x
                                                  : ((GameCtrl.Ladder)TargetLadder).UpPos.position.x))) {
                                TargetLadder = ladder;
                            }
                        }
                    }
                }
                if (TargetLadder != null) {
                    targetPos = upDown
                            ? ((GameCtrl.Ladder)TargetLadder).DownPos.position
                            : ((GameCtrl.Ladder)TargetLadder).UpPos.position;
                    if (((Vector2)targetPos - selfPos).magnitude < 0.1f) input.UpDnAxis = upDown ? 1 : -1;
                }
            }
        }

        if (targetPos != null) {
            input.MoveAxis = selfPos.x < ((Vector2)targetPos).x ? 1 : -1;
            return true;
        }
        return false;
    }
コード例 #2
0
    protected override void Awake()
    {
        base.Awake();
        if (Pos0.position.y > Pos1.position.y)
        {
            Transform save = Pos0;
            Pos0 = Pos1;
            Pos1 = save;
        }
        Transform[] pos = { Pos0, Pos1 };

        int AngleType = pos[0].position.x == pos[1].position.x ? 0:pos[0].position.x < pos[1].position.x ? 1:-1;

        Ladder = new GameCtrl.Ladder(MyFloor, pos[1], pos[0], AngleType);

        EdgeCollider2D edge = gameObject.AddComponent <EdgeCollider2D>();

        edge.points = new Vector2[] { pos[0].position, pos[1].position };

        if (AngleType == 0)
        {
            edge.isTrigger = true;
        }

        for (int i = 0; i < 2; i++)
        {
            GameObject Trigger = Instantiate(Resources.Load(AngleType == 0?GlobalVar.Prefeb.LadderTrigger:GlobalVar.Prefeb.SlopeTrigger) as GameObject);
            Trigger.transform.parent   = transform;
            Trigger.transform.position = pos[i].position;
            Destroy(pos[i].gameObject);
            pos[i] = Trigger.transform;
        }

        Ladder.DownPos = pos[0].transform;
        Ladder.UpPos   = pos[1].transform;

        for (int i = 0; i < 2; i++)
        {
            FloorCtrl floor = pos[i].GetComponent <FloorCtrl>();
            floor.UpDown = i == 0;
            floor.Ladder = Ladder;
        }

        GameCtrl.AddLadder(Ladder);
    }
コード例 #3
0
 public virtual void LadderMove(GameCtrl.Ladder ladder, bool upDown)
 {
     Ladder = ladder;
     UpDown = upDown;
     if (State == GlobalVar.State.Climb && upDown == NowInput.UpDnAxis < 0)
     {
         Anime.SetBool(GlobalVar.AnimeValue.ClimbOut, true);
         return;
     }
     else
     {
         Anime.SetBool(GlobalVar.AnimeValue.ClimbOut, false);
     }
     if (State != GlobalVar.State.Climb && upDown == NowInput.UpDnAxis > 0 && Rb.velocity.magnitude < 1)
     {
         Anime.SetBool(GlobalVar.AnimeValue.ClimbIn, true);
     }
     else
     {
         Anime.SetBool(GlobalVar.AnimeValue.ClimbIn, false);
     }
 }
コード例 #4
0
    public virtual void SlapeMove(GameCtrl.Ladder ladder, bool upDown)
    {
        Ladder = ladder;
        UpDown = upDown;
        int myFloor = GlobalVar.Mask.GetFloor(gameObject.layer);

        if (Rb.velocity.x == 0)
        {
            return;
        }
        if (ladder.GetFloor(upDown) - myFloor == 1 && Rb.velocity.x < 0 == ladder.GetLoR(upDown))
        {
            ChangeLayer(ladder.GetFloor(upDown));
            OnLadder = false;
        }
        else
        if (myFloor == ladder.GetFloor(upDown) && Rb.velocity.x > 0 == ladder.GetLoR(upDown) && NowInput.UpDnAxis != 0 && upDown == NowInput.UpDnAxis > 0)
        {
            ChangeLayer(myFloor + (upDown ? 1 : -1));
            OnLadder = true;
        }
    }
コード例 #5
0
ファイル: AI.cs プロジェクト: zkm00323/NanoSteam
    public static bool ClimbToTarget(ref Entity.CtrlInput input, Climber self, Walker target, float safeDis)
    {
        int selfFloor   = GlobalVar.Mask.GetFloor(self.gameObject.layer);
        int targetFloor = GlobalVar.Mask.GetFloor(target.gameObject.layer);

        Vector2 selfPos   = self.transform.position;
        Vector2?targetPos = target.transform.position;

        GameCtrl.Ladder?TargetLadder = null;

        if (target.GetState() == GlobalVar.State.Climb)
        {
            return(false);
        }
        if (selfFloor == targetFloor)
        {
            if ((selfPos - (Vector2)targetPos).magnitude < safeDis)
            {
                targetPos = null;
            }
        }
        else
        {
            bool upDown = selfFloor < targetFloor;
            if (self.OnLadder)
            {
                GameCtrl.Ladder ladder = self.Ladder;
                if (self.GetState() == GlobalVar.State.Climb)
                {
                    input.UpDnAxis = selfPos.y < (upDown ? ladder.UpPos.position.y : ladder.DownPos.position.y) ? 1 : -1;
                }
                else
                {
                    targetPos = upDown ? ladder.UpPos.position : ladder.DownPos.position;
                }
            }
            else
            {
                if (target.OnLadder && Mathf.Abs(selfFloor - targetFloor) == 1)
                {
                    if ((selfPos - (Vector2)targetPos).magnitude < safeDis)
                    {
                        targetPos = null;
                    }
                    else
                    {
                        TargetLadder = target.Ladder;
                    }
                }
                else
                {
                    foreach (GameCtrl.Ladder ladder in GameCtrl.LadderList)
                    {
                        if (upDown ? ladder.DownFloor == selfFloor : ladder.UpFloor == selfFloor)
                        {
                            if (TargetLadder == null ||
                                Mathf.Abs(selfPos.x - (upDown ? ladder.DownPos.position.x : ladder.UpPos.position.x)) <
                                Mathf.Abs(selfPos.x - (upDown
                                                 ? ((GameCtrl.Ladder)TargetLadder).DownPos.position.x
                                                 : ((GameCtrl.Ladder)TargetLadder).UpPos.position.x)))
                            {
                                TargetLadder = ladder;
                            }
                        }
                    }
                }

                if (TargetLadder != null)
                {
                    targetPos = upDown
                    ? ((GameCtrl.Ladder)TargetLadder).DownPos.position
                    : ((GameCtrl.Ladder)TargetLadder).UpPos.position;
                    if (((Vector2)targetPos - selfPos).magnitude < 0.1f)
                    {
                        input.UpDnAxis = upDown ? 1 : -1;
                    }
                }
            }
        }

        if (targetPos != null)
        {
            input.MoveAxis = (TargetLadder != null && ((GameCtrl.Ladder)TargetLadder).AngleType == 0?Mathf.Clamp(Mathf.Abs(selfPos.x - ((Vector2)targetPos).x) * 0.3f, 0.25f, 1):1) * (selfPos.x < ((Vector2)targetPos).x ? 1 : -1);
            return(true);
        }
        return(false);
    }