protected void WalkTo(GridPosition nextTile) { TruePosition = Position.Clone(); int lastDir = Faceddirection; Faceddirection = InputHandlerer.GetDirectionTo(Position, nextTile); SetAnimatorDirection(Faceddirection); if (lastDir != Faceddirection) { // Debug.Log("Turn " + Faceddirection); anim.Play("Walk"); } if (GameGrid.currentGrid.isInBounds(nextTile)) { GridPosition selectedTile; GameGrid.WalType canWalk = GameGrid.currentGrid.CanBeWalked(Position, nextTile, out selectedTile); if (canWalk == GameGrid.WalType.JumUp || Position.z != nextTile.z) { int height = nextTile.z - Position.z; if (height < 0) { height = 1; } Position = nextTile; StartJump(GameGrid.currentGrid.GetWalkPoint(nextTile) + topOffset, height - 1); } else if (canWalk == GameGrid.WalType.CanWalk) { Position = nextTile; iTween.MoveTo(body.gameObject, iTween.Hash("position", GameGrid.currentGrid.GetTile(selectedTile).CenterPoint + topOffset, "time", Options._instance.CharacterMovementSpeed, "easetype", iTween.EaseType.linear)); body.StartCoroutine(MovementMidpoint(Options._instance.CharacterMovementSpeed / 2)); body.StartCoroutine(MoveEnabler(Options._instance.CharacterMovementSpeed)); } } }
public override void WalkingUpdate() { if (!isAlive) { return; } if (walkingPath) { return; } if (isMoving) { return; } int selecteddir = 0; if (Input.GetAxisRaw("Vertical") != 0 || Input.GetAxisRaw("Horizontal") != 0) { // body.transform.position += GameGrid.BlockDirections.NE * (Input.GetAxis("Vertical") + 0.5f*Input.GetAxisRaw("Vertical") ) / 15; // body.transform.position += GameGrid.BlockDirections.SE * (Input.GetAxis("Horizontal") + 0.5f * Input.GetAxisRaw("Horizontal")) / 15; Vector2 speed = new Vector2(0, 0); int lastDir = anim.GetInteger("dir"); // Detect when control-keys are pressed or released and adjust the backside of character if (Input.GetAxisRaw("Horizontal") != 0) { speed.x = Input.GetAxisRaw("Horizontal"); } if (Input.GetAxisRaw("Vertical") != 0) { speed.y = Input.GetAxisRaw("Vertical"); } if (Mathf.Abs(speed.x) > Mathf.Abs(speed.y)) { selecteddir = speed.x > 0 ? 3 : 1; } else if (Mathf.Abs(speed.x) < Mathf.Abs(speed.y)) { selecteddir = speed.y > 0 ? 2 : 4; } if (selecteddir == 0) { selecteddir = Faceddirection; } if (lastDir != selecteddir) { Faceddirection = selecteddir; } GridPosition futurePosition = Position.Clone(); anim.SetInteger("dir", (int)Faceddirection); if (selecteddir == 3) { futurePosition.y++; } else if (selecteddir == 1) { futurePosition.y--; } else if (selecteddir == 2) { futurePosition.x++; } else if (selecteddir == 4) { futurePosition.x--; } if (GameGrid.currentGrid.isInBounds(futurePosition)) { GridPosition selectedTile; GameGrid.WalType canWalk = GameGrid.currentGrid.CanBeWalked(Position, futurePosition, out selectedTile); body.StartCoroutine(MoveTo(selectedTile)); } } else { anim.SetBool("move", false); } inputeHandlerer.UpdateInput(selecteddir); if (Input.GetButtonDown("Skill")) { // GameManager._intance.ActivateSkill(0, this); } }