mr-crocs-adventures/js/Level.js

114 lines
2.2 KiB
JavaScript

import FileLoader from "./FileLoader.js";
import Terrain from "../tilorswift/js/Terrain.js";
import {FullscreenEffectFactory} from "./effects/FullscreenEffectFactory.js";
export default class Level
{
static FACTOR_GRAVITY = 4.903;
constructor(terrain)
{
this.terrain = terrain;
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);
const level = new Level(Terrain.createFromJson(json));
level.setGravity(json.gravity / Level.FACTOR_GRAVITY);
callback(level);
}
loader.loadContent();
}
static createFromJson(json)
{
const data = JSON.parse(json);
const terrain = Terrain.createFromJson(data);
const level = new Level(terrain);
level.setGravity(data.gravity / Level.FACTOR_GRAVITY);
if (data.hasOwnProperty('effects')) {
const effectFactory = new FullscreenEffectFactory();
for (const effect of data.effects) {
level.fullscreenEffects.push(
effectFactory.getEffect(effect)
);
}
}
return level;
}
}