Parabola tuning

This commit is contained in:
Ian Gulliver
2021-05-11 15:55:29 +00:00
parent 49e6a73c13
commit 00f0456fb8
6 changed files with 27 additions and 15 deletions

View File

@@ -9,10 +9,11 @@ export class ProjectileTileFactory extends TileFactory {
target_relative_y: number;
spin: number;
speed: number;
loft: number;
tile_factory: TileFactory;
constructor(tile_factory: AnimatableTileFactory, target_relative_x: number, target_relative_y: number, spin: number, speed: number) {
constructor(tile_factory: AnimatableTileFactory, target_relative_x: number, target_relative_y: number, spin: number, speed: number, loft: number) {
super(tile_factory.layer_name, tile_factory.width, tile_factory.height);
this.source_tile_factory = tile_factory;
@@ -20,6 +21,7 @@ export class ProjectileTileFactory extends TileFactory {
this.target_relative_y = target_relative_y;
this.spin = spin;
this.speed = speed;
this.loft = loft;
const copy = tile_factory.copy();
const distance = Math.sqrt(target_relative_x ** 2 + target_relative_y ** 2);
@@ -40,7 +42,7 @@ export class ProjectileTileFactory extends TileFactory {
},
],
{
'duration': distance * (1 / speed) * 100,
'duration': distance / speed * 100,
'iterations': 1,
},
);
@@ -54,9 +56,9 @@ export class ProjectileTileFactory extends TileFactory {
'top': '0',
},
{
'offset': 0.50,
'offset': 0.50 - Math.abs(target_relative_y / distance * 0.50),
'easing': 'cubic-bezier(0.33, 0.00, 0.66, 0.33)',
'top': `-500%`,
'top': `${((-1 * loft / tile_factory.height) + ((target_relative_y / distance) * (loft / tile_factory.height))) * 100}%`,
},
{
'offset': 1.0,
@@ -64,7 +66,7 @@ export class ProjectileTileFactory extends TileFactory {
},
],
{
'duration': distance * (1 / speed) * 100,
'duration': distance / speed * 100,
'iterations': 1,
},
);
@@ -86,6 +88,7 @@ export class ProjectileTileFactory extends TileFactory {
this.target_relative_y,
this.spin,
this.speed,
this.loft,
);
}
}

View File

@@ -82,10 +82,14 @@ export function main() {
grid.add_tile(tiles.BRIDGE_LR, 46, 18);
grid.add_tile(tiles.BRIDGE_LR, 46, 10);
function rand(min: number, max: number): number {
return Math.random() * (max - min) + min;
}
const tower = grid.add_tile(tiles.TOWER_FIREBALL1, 30, 18);
setInterval(() => {
tower.play('fire');
grid.add_tile(new ProjectileTileFactory(tiles.FIREBALL, -20, 5, 5, 1.5), 31, 17);
grid.add_tile(new ProjectileTileFactory(tiles.FIREBALL, rand(-20, 20), rand(-10, 20), 5, 1.5, 10), 31, 17);
}, 3250);
};