public override IEnumerator TryAIUse(AIController ai, Effector effect) { if (Vector2Int.Distance(actor.location, ai.pc.location) < 1.5) { battle.Log(actor + " used " + skill.skillName); EightDir dir = EightDirExtensions.DirectionOf(ai.pc.location - actor.location); return(effect.ExecuteDirectionRoutine(dir)); } else { return(null); } }
public List <Vector2Int> PointsAlongPath(Vector2Int a, Vector2Int b) { List <Vector2Int> results = new List <Vector2Int>(); Vector2Int at = a; int i = 0; do { i += 1; at += EightDirExtensions.DirectionOf(b - at).XY(); results.Add(at); } while (at != b && i < 1000); if (i > 1000) { Debug.Assert(false, "major fuckup"); } return(results); }
public EightDir DirectionTo(MapEvent other) { return(EightDirExtensions.DirectionOf(other.location - location)); }
public IEnumerator StepRoutine(Vector2Int at, Vector2Int to, bool faceTo = true) { footOffset = !footOffset; if (faceTo) { facing = EightDirExtensions.DirectionOf(to - at); } else { locked = true; } Vector3 startPx = parent.TileToWorldCoords(at); targetPx = parent.TileToWorldCoords(to); if (targetPx.y == startPx.y || GetComponent <MapEvent3D>() == null) { yield return(parent.LinearStepRoutine(at, to)); } else if (targetPx.y > startPx.y) { // jump up routine routine startPx = parent.transform.position; parent.tracking = true; float duration = (targetPx - startPx).magnitude / parent.CalcTilesPerSecond() * JumpHeightUpMult; yield return(JumpRoutine(startPx, targetPx, duration)); overrideBodySprite = FrameBySlot(0, DirectionRelativeToCamera().Ordinal()); // "prone" frame yield return(CoUtils.Wait(1.0f / parent.CalcTilesPerSecond() / 2.0f)); overrideBodySprite = null; } else { // jump down routine parent.tracking = true; float elapsed = 0.0f; float walkRatio = 0.65f; float walkDuration = walkRatio / parent.CalcTilesPerSecond(); while (true) { float t = elapsed / walkDuration; elapsed += Time.deltaTime; parent.transform.position = new Vector3( startPx.x + t * (targetPx.x - startPx.x) * walkRatio, startPx.y, startPx.z + t * (targetPx.z - startPx.z) * walkRatio); parent.SetCameraTrackerLocation(parent.transform.position); if (elapsed >= walkDuration) { break; } yield return(null); } float dy = targetPx.y - startPx.y; float jumpDuration = Mathf.Sqrt(dy / Gravity) * JumpHeightDownMult; bool isBigDrop = dy <= -1.0f; yield return(JumpRoutine(parent.transform.position, targetPx, jumpDuration, isBigDrop)); if (isBigDrop) { overrideBodySprite = FrameBySlot(2, DirectionRelativeToCamera().Ordinal()); // "prone" frame yield return(CoUtils.Wait(JumpHeightDownMult / parent.CalcTilesPerSecond() / 2.0f)); overrideBodySprite = null; } } parent.tracking = false; locked = false; }
public EightDir DirectionTo(Vector2Int location) { return(EightDirExtensions.DirectionOf(location - this.location)); }