WIP
This commit is contained in:
parent
458e439bcd
commit
d0025b3de6
2
TODO.md
2
TODO.md
|
@ -5,7 +5,7 @@ Phaser 3 migration
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
* Restore fullscreen mode (and add a fullscreen incentive before the menu)
|
* Restore fullscreen mode (and add a fullscreen incentive before the menu)
|
||||||
* Fix valuebar requiring to be in root display list
|
* Fix valuebar requiring to be in root display list (use tile sprite ?)
|
||||||
* Restore unit tests about boundaries (in UITools)
|
* Restore unit tests about boundaries (in UITools)
|
||||||
|
|
||||||
Menu/settings/saves
|
Menu/settings/saves
|
||||||
|
|
BIN
data/stage2/image/battle/hud/grid-invalid.png
Normal file
BIN
data/stage2/image/battle/hud/grid-invalid.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
data/stage2/image/battle/hud/grid-ok.png
Normal file
BIN
data/stage2/image/battle/hud/grid-ok.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2 KiB |
BIN
data/stage2/image/battle/hud/grid-power.png
Normal file
BIN
data/stage2/image/battle/hud/grid-power.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
|
@ -27,6 +27,11 @@ module TK.SpaceTac.UI {
|
||||||
impact_area: UIGraphics
|
impact_area: UIGraphics
|
||||||
impact_indicators: UIContainer
|
impact_indicators: UIContainer
|
||||||
|
|
||||||
|
// Grid indicators
|
||||||
|
grid_ok: UIBatch
|
||||||
|
grid_power: UIBatch
|
||||||
|
grid_invalid: UIBatch
|
||||||
|
|
||||||
// Diffs display
|
// Diffs display
|
||||||
diffs_move: UIGraphics
|
diffs_move: UIGraphics
|
||||||
|
|
||||||
|
@ -57,6 +62,9 @@ module TK.SpaceTac.UI {
|
||||||
this.fire_arrow.setOrigin(1, 0.5);
|
this.fire_arrow.setOrigin(1, 0.5);
|
||||||
this.fire_arrow.setVisible(false);
|
this.fire_arrow.setVisible(false);
|
||||||
this.impact_indicators = builder.container("impact-indicators", 0, 0, false);
|
this.impact_indicators = builder.container("impact-indicators", 0, 0, false);
|
||||||
|
this.grid_ok = builder.batch({ image: "battle-hud-grid-ok", x: -24, y: -20 });
|
||||||
|
this.grid_power = builder.batch({ image: "battle-hud-grid-power", x: -24, y: -20 });
|
||||||
|
this.grid_invalid = builder.batch({ image: "battle-hud-grid-invalid", x: -24, y: -20 });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -221,6 +229,35 @@ module TK.SpaceTac.UI {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the grid indicators
|
||||||
|
*/
|
||||||
|
updateGridIndicators(): void {
|
||||||
|
this.grid_ok.clear();
|
||||||
|
this.grid_power.clear();
|
||||||
|
this.grid_invalid.clear();
|
||||||
|
|
||||||
|
if (this.ship && this.action) {
|
||||||
|
let grid = this.ship.grid;
|
||||||
|
let action = this.action;
|
||||||
|
let simulator = new MoveFireSimulator(this.ship, grid);
|
||||||
|
|
||||||
|
range(35).forEach(x => {
|
||||||
|
range(20).forEach(y => {
|
||||||
|
let target = Target.newFromLocation(x * 50, y * 50).snap(grid);
|
||||||
|
let result = simulator.simulateAction(action, target);
|
||||||
|
if (result.status == MoveFireStatus.OK) {
|
||||||
|
this.grid_ok.add(target.x, target.y);
|
||||||
|
} else if (result.status == MoveFireStatus.NOT_ENOUGH_POWER) {
|
||||||
|
this.grid_power.add(target.x, target.y);
|
||||||
|
} else {
|
||||||
|
this.grid_invalid.add(target.x, target.y);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update visual effects to show the simulation of current action/target
|
* Update visual effects to show the simulation of current action/target
|
||||||
*/
|
*/
|
||||||
|
@ -329,6 +366,8 @@ module TK.SpaceTac.UI {
|
||||||
|
|
||||||
this.setTarget(null);
|
this.setTarget(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.updateGridIndicators();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
50
src/ui/common/UIBatch.ts
Normal file
50
src/ui/common/UIBatch.ts
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
module TK.SpaceTac.UI {
|
||||||
|
export interface UIBatchOptions {
|
||||||
|
// Image key
|
||||||
|
image: string
|
||||||
|
|
||||||
|
// Initial location
|
||||||
|
x?: number
|
||||||
|
y?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UI component to display a batch of the same image repeated a great number of times
|
||||||
|
*/
|
||||||
|
export class UIBatch {
|
||||||
|
private internal: Phaser.GameObjects.Blitter
|
||||||
|
|
||||||
|
constructor(view: BaseView, options: UIBatchOptions) {
|
||||||
|
let info = view.getImageInfo(options.image);
|
||||||
|
this.internal = view.add.blitter(options.x || 0, options.y || 0, info.key, info.frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add to a container
|
||||||
|
*/
|
||||||
|
addToContainer(container: UIContainer): void {
|
||||||
|
container.add(this.internal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the location of the whole batch
|
||||||
|
*/
|
||||||
|
setPosition(x: number, y: number): void {
|
||||||
|
this.internal.setPosition(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear the batch of all items
|
||||||
|
*/
|
||||||
|
clear(): void {
|
||||||
|
this.internal.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an item to the batch
|
||||||
|
*/
|
||||||
|
add(x: number, y: number): void {
|
||||||
|
this.internal.create(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -180,6 +180,19 @@ module TK.SpaceTac.UI {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a batch of images
|
||||||
|
*/
|
||||||
|
batch(options: UIBatchOptions): UIBatch {
|
||||||
|
let result = new UIBatch(this.view, options);
|
||||||
|
if (this.parent instanceof UIContainer) {
|
||||||
|
result.addToContainer(this.parent);
|
||||||
|
} else {
|
||||||
|
console.error("Cannot add a batch to an image parent");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a hoverable and/or clickable button
|
* Add a hoverable and/or clickable button
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue