Parabola tuning
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
import { LayeredTileFactory } from './layered_tile_factory.js';
|
||||
import { TileFactory } from './tile_factory.js';
|
||||
export class ProjectileTileFactory extends TileFactory {
|
||||
constructor(tile_factory, target_relative_x, target_relative_y, spin, speed) {
|
||||
constructor(tile_factory, target_relative_x, target_relative_y, spin, speed, loft) {
|
||||
super(tile_factory.layer_name, tile_factory.width, tile_factory.height);
|
||||
this.source_tile_factory = tile_factory;
|
||||
this.target_relative_x = target_relative_x;
|
||||
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);
|
||||
console.log(distance);
|
||||
copy.add_animation('launch-x', [
|
||||
{
|
||||
'offset': 0.0,
|
||||
@@ -23,7 +25,7 @@ export class ProjectileTileFactory extends TileFactory {
|
||||
'transform': `rotate(${Math.sign(target_relative_x) * distance * spin * 10}deg)`,
|
||||
},
|
||||
], {
|
||||
'duration': distance * (1 / speed) * 100,
|
||||
'duration': distance / speed * 100,
|
||||
'iterations': 1,
|
||||
});
|
||||
copy.add_animation('launch-y', [
|
||||
@@ -33,16 +35,16 @@ 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,
|
||||
'top': `${target_relative_y / tile_factory.height * 100}%`,
|
||||
},
|
||||
], {
|
||||
'duration': distance * (1 / speed) * 100,
|
||||
'duration': distance / speed * 100,
|
||||
'iterations': 1,
|
||||
});
|
||||
this.tile_factory = new LayeredTileFactory([copy]);
|
||||
@@ -54,7 +56,7 @@ export class ProjectileTileFactory extends TileFactory {
|
||||
return tile;
|
||||
}
|
||||
copy() {
|
||||
return new ProjectileTileFactory(this.source_tile_factory, this.target_relative_x, this.target_relative_y, this.spin, this.speed);
|
||||
return new ProjectileTileFactory(this.source_tile_factory, this.target_relative_x, this.target_relative_y, this.spin, this.speed, this.loft);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=projectile_tile_factory.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"projectile_tile_factory.js","sourceRoot":"","sources":["../ts/projectile_tile_factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IASpD,YAAY,YAAmC,EAAE,iBAAyB,EAAE,iBAAyB,EAAE,IAAY,EAAE,KAAa;QAChI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,iBAAiB,IAAI,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,aAAa,CAChB,UAAU,EACV;YACE;gBACE,QAAQ,EAAE,GAAG;gBACb,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,GAAG;gBACX,WAAW,EAAE,WAAW;aACzB;YACD;gBACE,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,GAAG,iBAAiB,GAAG,YAAY,CAAC,KAAK,GAAG,GAAG,GAAG;gBAC1D,WAAW,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,EAAE,MAAM;aACjF;SACF,EACD;YACE,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG;YACxC,YAAY,EAAE,CAAC;SAChB,CACF,CAAC;QAEF,IAAI,CAAC,aAAa,CAChB,UAAU,EACV;YACE;gBACE,QAAQ,EAAE,GAAG;gBACb,QAAQ,EAAE,sCAAsC;gBAChD,KAAK,EAAE,GAAG;aACX;YACD;gBACE,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,sCAAsC;gBAChD,KAAK,EAAE,OAAO;aACf;YACD;gBACE,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,GAAG,iBAAiB,GAAG,YAAY,CAAC,MAAM,GAAG,GAAG,GAAG;aAC3D;SACF,EACD;YACE,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG;YACxC,YAAY,EAAE,CAAC;SAChB,CACF,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;CACF"}
|
||||
{"version":3,"file":"projectile_tile_factory.js","sourceRoot":"","sources":["../ts/projectile_tile_factory.ts"],"names":[],"mappings":"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"}
|
||||
@@ -74,10 +74,13 @@ export function main() {
|
||||
grid.add_tile(tiles.BRIDGE_LR, 46, 26);
|
||||
grid.add_tile(tiles.BRIDGE_LR, 46, 18);
|
||||
grid.add_tile(tiles.BRIDGE_LR, 46, 10);
|
||||
function rand(min, max) {
|
||||
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);
|
||||
}
|
||||
;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user