mr-crocs-adventures/js/Level.js

125 lines
2.5 KiB
JavaScript
Raw Normal View History

import FileLoader from "./FileLoader.js";
import Terrain from "../tilorswift/js/Terrain.js";
2024-12-08 16:53:56 +01:00
import {FullscreenEffectFactory} from "./effects/FullscreenEffectFactory.js";
export default class Level
{
2024-08-02 22:00:43 +02:00
static FACTOR_GRAVITY = 4.903;
constructor(terrain)
{
this.terrain = terrain;
2024-12-08 16:53:56 +01:00
this.fullscreenEffects = [];
this.gravity = 2.0;
}
getTilesetId()
{
return this.terrain.tileset.setId;
}
getBackgroundColor()
{
return this.terrain.backgroundColor;
}
getBackgroundImage()
{
return this.terrain.backgroundImage;
}
getRows()
{
return this.terrain.tilesY;
}
getColumns()
{
return this.terrain.tilesX;
}
getStartX()
{
return this.terrain.entranceTileX;
}
getStartY()
{
return this.terrain.entranceTileY;
}
getTargetX()
{
return this.terrain.targetTileX;
}
getTargetY()
{
return this.terrain.targetTileY;
}
getTilesetMatrix()
{
return this.terrain.fields;
}
hasEntrancePoint()
{
return this.terrain.hasEntrancePoint();
}
hasTargetPoint()
{
return this.terrain.hasTargetPoint();
}
setGravity(gravity)
{
this.gravity = gravity;
}
static createFromFile(filename, callback = () => {})
{
let loader = new FileLoader(filename);
loader.onLoad = (data) => {
const json = JSON.parse(data);
2023-09-24 01:48:01 +02:00
const level = new Level(Terrain.createFromJson(json));
2024-08-02 22:00:43 +02:00
level.setGravity(json.gravity / Level.FACTOR_GRAVITY);
2024-12-08 23:11:52 +01:00
if (json.hasOwnProperty('effects')) {
const effectFactory = new FullscreenEffectFactory();
for (const effect of json.effects) {
level.fullscreenEffects.push(
effectFactory.getEffect(effect)
);
}
}
callback(level);
}
loader.loadContent();
}
static createFromJson(json)
{
const data = JSON.parse(json);
const terrain = Terrain.createFromJson(data);
const level = new Level(terrain);
2024-08-02 22:00:43 +02:00
level.setGravity(data.gravity / Level.FACTOR_GRAVITY);
2024-12-08 16:53:56 +01:00
if (data.hasOwnProperty('effects')) {
const effectFactory = new FullscreenEffectFactory();
for (const effect of data.effects) {
level.fullscreenEffects.push(
effectFactory.getEffect(effect)
);
}
}
return level;
}
}