From 8c1bd3c2eaf75bce0828775d4385e78489510d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Sun, 10 Sep 2017 22:20:29 +0200 Subject: [PATCH] Improved distance display for move actions --- src/core/actions/MoveAction.spec.ts | 2 +- src/core/actions/MoveAction.ts | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/core/actions/MoveAction.spec.ts b/src/core/actions/MoveAction.spec.ts index 2382cdb..259b8f7 100644 --- a/src/core/actions/MoveAction.spec.ts +++ b/src/core/actions/MoveAction.spec.ts @@ -170,7 +170,7 @@ module TS.SpaceTac { expect(action.getEffectsDescription()).toEqual("Move: 58km per power point (safety: 12km)"); action = new MoveAction(new Equipment(), 58, 12, 80); - expect(action.getEffectsDescription()).toEqual("Move: 58km per power point (safety: 12km, maneuvrability influence: 80%)"); + expect(action.getEffectsDescription()).toEqual("Move: 12-58km per power point (safety: 12km)"); }); }); } diff --git a/src/core/actions/MoveAction.ts b/src/core/actions/MoveAction.ts index b97f81d..c64fe0f 100644 --- a/src/core/actions/MoveAction.ts +++ b/src/core/actions/MoveAction.ts @@ -51,13 +51,22 @@ module TS.SpaceTac { return ship.getValue("power") * this.getDistanceByActionPoint(ship); } + /** + * Get the distance range that may be traveled with 1 action point + */ + getDistanceRangeByActionPoint(): IntegerRange { + let min_distance = Math.ceil(this.distance_per_power * (1 - this.maneuvrability_factor * 0.01)); + return new IntegerRange(min_distance, this.distance_per_power); + } + /** * Get the distance that may be traveled with 1 action point */ getDistanceByActionPoint(ship: Ship): number { let maneuvrability = Math.max(ship.getAttribute("maneuvrability"), 0); let factor = maneuvrability / (maneuvrability + 2); - return Math.ceil(this.distance_per_power * (1 - this.maneuvrability_factor * 0.01 * (1 - factor))); + let range = this.getDistanceRangeByActionPoint(); + return range.getProportional(factor); } /** @@ -98,17 +107,12 @@ module TS.SpaceTac { } getEffectsDescription(): string { - let result = `Move: ${this.distance_per_power}km per power point`; + let range = this.getDistanceRangeByActionPoint(); + let rangeinfo = (range.max == range.min) ? `${range.min}` : `${range.min}-${range.max}`; + let result = `Move: ${rangeinfo}km per power point`; - let precisions = []; if (this.safety_distance) { - precisions.push(`safety: ${this.safety_distance}km`); - } - if (this.maneuvrability_factor) { - precisions.push(`maneuvrability influence: ${this.maneuvrability_factor}%`); - } - if (precisions.length) { - result += ` (${precisions.join(", ")})`; + result += ` (safety: ${this.safety_distance}km)`; } return result;