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; }
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); }
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); } }
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; } }
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); }