public Vector2 Interpolate(float t) { if (character == null) { return(Vector2.zero); } switch (moveType) { case MoveType.Cross: character.transform.position = MoveTypeMath.EvaluateLine(fromMark.transform.position, toMark.transform.position, t); break; case MoveType.DoSiDo: character.transform.position = MoveTypeMath.EvaluateCircle(fromMark.transform.position, toMark.transform.position, circleCenter.position, t, true); break; case MoveType.Shift: character.transform.position = MoveTypeMath.EvaluateCircle(fromMark.transform.position, toMark.transform.position, circleCenter.position, t, false); break; } return(character.transform.position); }
private void UpdateMoveState() { HandleRound(); MoveType type = MoveType.None; Direction direction = Direction.Clockwise; var startIndex = GetIndexOfCharacter(mainCharacter); var endIndex = highlightedIndex; var a = startIndex >= 0 && startIndex < characterMarks.Count ? characterMarks[startIndex] : null; var b = endIndex >= 0 && endIndex < characterMarks.Count ? characterMarks[endIndex] : null; if (a != null && b != null) { var difference = GetIndexDifference(startIndex, endIndex); var absDiff = Mathf.Abs(difference); Debug.Log(string.Format("Difference: {0}, {1} = {2}", startIndex, endIndex, difference)); if (absDiff == 1) { type = MoveType.Shift; direction = difference > 0 ? Direction.Clockwise : Direction.CounterClockwise; if (a != null && b != null) { SetIncantationPreview(t => MoveTypeMath.EvaluateCircle(a.transform.position, b.transform.position, circleCenter.position, t, false)); } } else if (absDiff == characterMarks.Count / 2) { type = MoveType.Cross; if (a != null && b != null) { SetIncantationPreview(t => MoveTypeMath.EvaluateLine(a.transform.position, b.transform.position, t)); } } else if (absDiff > 1) { type = MoveType.DoSiDo; if (a != null && b != null) { SetIncantationPreview(t => MoveTypeMath.EvaluateCircle(a.transform.position, b.transform.position, circleCenter.position, t, true)); } } else { ClearIncantationPreview(); } } else { ClearIncantationPreview(); } if (Input.GetButton("Cross")) { switch (type) { case MoveType.Shift: RunEvent(DoRotate(direction)); break; case MoveType.DoSiDo: RunEvent(DoSwap(a, b, true)); break; case MoveType.Cross: RunEvent(DoSwap(a, b, false)); break; } if (type != MoveType.None) { roundTurns--; } } else if (Input.GetButton("Incant")) { RunEvent(DoIncant(endIndex)); } }