Rename some runtimeScene to instanceContainer.

This commit is contained in:
Davy Hélard
2022-09-27 15:36:11 +02:00
parent b79376197a
commit b2e9caebc1
26 changed files with 342 additions and 245 deletions

View File

@@ -10,7 +10,7 @@ namespace gdjs {
/**
* @param runtimeObject The object to render
* @param instanceContainer The gdjs.RuntimeScene in which the object is
* @param instanceContainer The gdjs.RuntimeInstanceContainer in which the object is
*/
constructor(
runtimeObject: gdjs.BBTextRuntimeObject,
@@ -95,7 +95,8 @@ namespace gdjs {
}
updateFontFamily(): void {
this._pixiObject.textStyles.default.fontFamily = this._object._runtimeScene
this._pixiObject.textStyles.default.fontFamily = this._object
.getInstanceContainer()
.getGame()
.getFontManager()
.getFontFamily(this._object._fontFamily);

View File

@@ -48,7 +48,7 @@ namespace gdjs {
hidden: boolean;
/**
* @param instanceContainer The scene the object belongs to.
* @param instanceContainer The container the object belongs to.
* @param objectData The object data used to initialize the object
*/
constructor(
@@ -128,8 +128,8 @@ namespace gdjs {
}
}
onDestroyFromScene(runtimeScene): void {
super.onDestroyFromScene(runtimeScene);
onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {
super.onDestroyFromScene(instanceContainer);
}
/**

View File

@@ -10,7 +10,7 @@ namespace gdjs {
/**
* @param runtimeObject The object to render
* @param instanceContainer The gdjs.RuntimeScene in which the object is
* @param instanceContainer The container in which the object is
*/
constructor(
runtimeObject: gdjs.BitmapTextRuntimeObject,
@@ -59,7 +59,8 @@ namespace gdjs {
onDestroy() {
// Mark the font from the object as not used anymore.
this._object._runtimeScene
this._object
.getInstanceContainer()
.getGame()
.getBitmapFontManager()
.releaseBitmapFont(this._pixiObject.fontName);
@@ -73,7 +74,8 @@ namespace gdjs {
updateFont(): void {
// Get the new bitmap font to use
const bitmapFont = this._object._runtimeScene
const bitmapFont = this._object
.getInstanceContainer()
.getGame()
.getBitmapFontManager()
.obtainBitmapFont(
@@ -82,7 +84,8 @@ namespace gdjs {
);
// Mark the old font as not used anymore
this._object._runtimeScene
this._object
.getInstanceContainer()
.getGame()
.getBitmapFontManager()
.releaseBitmapFont(this._pixiObject.fontName);

View File

@@ -50,7 +50,7 @@ namespace gdjs {
_renderer: gdjs.BitmapTextRuntimeObjectPixiRenderer;
/**
* @param instanceContainer The scene the object belongs to.
* @param instanceContainer The container the object belongs to.
* @param objectData The object data used to initialize the object
*/
constructor(
@@ -137,8 +137,8 @@ namespace gdjs {
}
}
onDestroyFromScene(runtimeScene: gdjs.RuntimeScene): void {
super.onDestroyFromScene(runtimeScene);
onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {
super.onDestroyFromScene(instanceContainer);
this._renderer.onDestroy();
}

View File

@@ -30,16 +30,16 @@ namespace gdjs {
/**
* Load the Dialogue Tree data from a JSON resource.
*
* @param runtimeScene The scene where the dialogue is running.
* @param instanceContainer The scene where the dialogue is running.
* @param jsonResourceName The JSON resource where to load the Dialogue Tree data from. The data is a JSON string usually created with [Yarn Dialogue Editor](https://github.com/InfiniteAmmoInc/Yarn).
* @param startDialogueNode The Dialogue Branch to start the Dialogue Tree from. If left empty, the data will only be loaded, but can later be initialized via another action
*/
gdjs.dialogueTree.loadFromJsonFile = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
jsonResourceName: string,
startDialogueNode: string
) {
runtimeScene
instanceContainer
.getGame()
.getJsonManager()
.loadJson(jsonResourceName, function (error, content) {

View File

@@ -27,7 +27,7 @@ namespace gdjs {
}
// You can also create a PIXI sprite or other PIXI object
// this._imageManager = runtimeScene.getGame().getImageManager();
// this._imageManager = instanceContainer.getGame().getImageManager();
// if ( this._sprite === undefined )
// this._sprite = new PIXI.Sprite(this._imageManager.getInvalidPIXITexture());
this._text.anchor.x = 0.5;

View File

@@ -48,13 +48,16 @@ namespace gdjs {
/**
* Get the path to 'Desktop' folder.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to the desktop folder
*/
export const getDesktopPath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('desktop') || '';
@@ -65,13 +68,16 @@ namespace gdjs {
/**
* Get the path to 'Documents' folder.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to the documents folder
*/
export const getDocumentsPath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('documents') || '';
@@ -82,13 +88,16 @@ namespace gdjs {
/**
* Get the path to 'Pictures' folder.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to the pictures folder
*/
export const getPicturesPath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('pictures') || '';
@@ -99,13 +108,16 @@ namespace gdjs {
/**
* Get the path to this application 'Executable' file.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to this applications executable file
*/
export const getExecutablePath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('exe') || '';
@@ -116,14 +128,16 @@ namespace gdjs {
/**
* Get the path to this application 'Executable' folder.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to this applications executable folder
*/
export const getExecutableFolderPath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const path = gdjs.fileSystem._getPath();
const executablePath = gdjs.fileSystem.getExecutablePath(runtimeScene);
const executablePath = gdjs.fileSystem.getExecutablePath(
instanceContainer
);
if (!path) {
return '';
}
@@ -132,13 +146,16 @@ namespace gdjs {
/**
* Get the path to 'UserData' folder.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to userdata folder
*/
export const getUserdataPath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('userData') || '';
@@ -152,9 +169,12 @@ namespace gdjs {
* @return The path to user's "home" folder
*/
export const getUserHomePath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('home') || '';
@@ -165,13 +185,16 @@ namespace gdjs {
/**
* Get the path to 'Temp' folder.
* @param runtimeScene The current scene
* @param instanceContainer The current container
* @return The path to temp folder
*/
export const getTempPath = function (
runtimeScene: gdjs.RuntimeScene
instanceContainer: gdjs.RuntimeInstanceContainer
): string {
const remote = runtimeScene.getGame().getRenderer().getElectronRemote();
const remote = instanceContainer
.getGame()
.getRenderer()
.getElectronRemote();
const app = remote ? remote.app : null;
if (app) {
return app.getPath('temp') || '';

View File

@@ -1,7 +1,13 @@
namespace gdjs {
export interface RuntimeGame {
inventories: { [name: string]: gdjs.Inventory };
}
export class InventoryManager {
static get(runtimeScene, name): gdjs.Inventory {
const game = runtimeScene.getGame();
static get(
instanceContainer: gdjs.RuntimeInstanceContainer,
name: string
): gdjs.Inventory {
const game = instanceContainer.getGame();
if (!game.inventories) {
game.inventories = {};
}
@@ -15,70 +21,106 @@ namespace gdjs {
export namespace evtTools {
export namespace inventory {
export const add = function (runtimeScene, inventoryName, name) {
return InventoryManager.get(runtimeScene, inventoryName).add(name);
export const add = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string
) {
return InventoryManager.get(instanceContainer, inventoryName).add(name);
};
export const remove = function (runtimeScene, inventoryName, name) {
return InventoryManager.get(runtimeScene, inventoryName).remove(name);
export const remove = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string
) {
return InventoryManager.get(instanceContainer, inventoryName).remove(
name
);
};
export const count = function (runtimeScene, inventoryName, name) {
return InventoryManager.get(runtimeScene, inventoryName).count(name);
export const count = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string
) {
return InventoryManager.get(instanceContainer, inventoryName).count(
name
);
};
export const has = function (runtimeScene, inventoryName, name) {
return InventoryManager.get(runtimeScene, inventoryName).has(name);
export const has = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string
) {
return InventoryManager.get(instanceContainer, inventoryName).has(name);
};
export const setMaximum = function (
runtimeScene,
inventoryName,
name,
maxCount
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string,
maxCount: number
) {
return InventoryManager.get(runtimeScene, inventoryName).setMaximum(
name,
maxCount
);
return InventoryManager.get(
instanceContainer,
inventoryName
).setMaximum(name, maxCount);
};
export const setUnlimited = function (
runtimeScene,
inventoryName,
name,
enable
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string,
enable: boolean
) {
return InventoryManager.get(runtimeScene, inventoryName).setUnlimited(
name,
enable
return InventoryManager.get(
instanceContainer,
inventoryName
).setUnlimited(name, enable);
};
export const isFull = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string
) {
return InventoryManager.get(instanceContainer, inventoryName).isFull(
name
);
};
export const isFull = function (runtimeScene, inventoryName, name) {
return InventoryManager.get(runtimeScene, inventoryName).isFull(name);
};
export const equip = function (runtimeScene, inventoryName, name, equip) {
return InventoryManager.get(runtimeScene, inventoryName).equip(
export const equip = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string,
equip: boolean
) {
return InventoryManager.get(instanceContainer, inventoryName).equip(
name,
equip
);
};
export const isEquipped = function (runtimeScene, inventoryName, name) {
return InventoryManager.get(runtimeScene, inventoryName).isEquipped(
name
);
export const isEquipped = function (
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
name: string
) {
return InventoryManager.get(
instanceContainer,
inventoryName
).isEquipped(name);
};
export const serializeToVariable = function (
runtimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
variable: gdjs.Variable
) {
const allItems = gdjs.InventoryManager.get(
runtimeScene,
instanceContainer,
inventoryName
).getAllItems();
for (const name in allItems) {
@@ -92,12 +134,12 @@ namespace gdjs {
};
export const unserializeFromVariable = function (
runtimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
inventoryName: string,
variable: gdjs.Variable
) {
const inventory = gdjs.InventoryManager.get(
runtimeScene,
instanceContainer,
inventoryName
);
inventory.clear();

View File

@@ -1,5 +1,6 @@
/// <reference path="sha256.d.ts" />
// TODO EBO Replace runtimeScene to instanceContainer.
namespace gdjs {
const logger = new gdjs.Logger('Leaderboards');
export namespace evtTools {

View File

@@ -27,7 +27,7 @@ namespace gdjs {
_texture: string;
_obstaclesManager: gdjs.LightObstaclesManager;
_renderer: gdjs.LightRuntimeObjectRenderer;
_runtimeScene: gdjs.RuntimeScene;
_instanceContainer: gdjs.RuntimeScene;
constructor(
runtimeScene: gdjs.RuntimeScene,
@@ -43,7 +43,7 @@ namespace gdjs {
runtimeScene
);
this._renderer = new gdjs.LightRuntimeObjectRenderer(this, runtimeScene);
this._runtimeScene = runtimeScene;
this._instanceContainer = runtimeScene;
// *ALWAYS* call `this.onCreated()` at the very end of your object constructor.
this.onCreated();

View File

@@ -262,7 +262,7 @@ namespace gdjs {
oldObjectData.rendererParam2 !== newObjectData.rendererParam2
) {
// Destroy the renderer, ensure it's removed from the layer.
const layer = this._runtimeScene.getLayer(this.layer);
const layer = this.getInstanceContainer().getLayer(this.layer);
layer
.getRenderer()
.removeRendererObject(this._renderer.getRendererObject());
@@ -737,9 +737,12 @@ namespace gdjs {
return this.texture;
}
setTexture(texture: string, runtimeScene: gdjs.RuntimeScene): void {
setTexture(
texture: string,
instanceContainer: gdjs.RuntimeInstanceContainer
): void {
if (this.texture !== texture) {
if (this._renderer.isTextureNameValid(texture, runtimeScene)) {
if (this._renderer.isTextureNameValid(texture, instanceContainer)) {
this.texture = texture;
this._textureDirty = true;
}

View File

@@ -4,6 +4,9 @@ Copyright (c) 2013-2016 Florian Rival (Florian.Rival@gmail.com)
*/
namespace gdjs {
export interface RuntimeInstanceContainer {
pathfindingObstaclesManager: gdjs.PathfindingObstaclesManager;
}
declare var rbush: any;
/**
@@ -15,24 +18,21 @@ namespace gdjs {
export class PathfindingObstaclesManager {
_obstaclesRBush: any;
/**
* @param object The object
*/
constructor(runtimeScene: gdjs.RuntimeScene) {
constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {
this._obstaclesRBush = new rbush();
}
/**
* Get the obstacles manager of a scene.
*/
static getManager(runtimeScene) {
if (!runtimeScene.pathfindingObstaclesManager) {
static getManager(instanceContainer: gdjs.RuntimeInstanceContainer) {
if (!instanceContainer.pathfindingObstaclesManager) {
//Create the shared manager if necessary.
runtimeScene.pathfindingObstaclesManager = new gdjs.PathfindingObstaclesManager(
runtimeScene
instanceContainer.pathfindingObstaclesManager = new gdjs.PathfindingObstaclesManager(
instanceContainer
);
}
return runtimeScene.pathfindingObstaclesManager;
return instanceContainer.pathfindingObstaclesManager;
}
/**
@@ -111,14 +111,14 @@ namespace gdjs {
> | null = null;
constructor(
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
behaviorData,
owner: gdjs.RuntimeObject
) {
super(runtimeScene, behaviorData, owner);
super(instanceContainer, behaviorData, owner);
this._impassable = behaviorData.impassable;
this._cost = behaviorData.cost;
this._manager = PathfindingObstaclesManager.getManager(runtimeScene);
this._manager = PathfindingObstaclesManager.getManager(instanceContainer);
//Note that we can't use getX(), getWidth()... of owner here:
//The owner is not yet fully constructed.
@@ -140,7 +140,7 @@ namespace gdjs {
}
}
doStepPreEvents(runtimeScene: gdjs.RuntimeScene) {
doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {
//Make sure the obstacle is or is not in the obstacles manager.
if (!this.activated() && this._registeredInManager) {
this._manager.removeObstacle(this);
@@ -170,7 +170,7 @@ namespace gdjs {
}
}
doStepPostEvents(runtimeScene: gdjs.RuntimeScene) {}
doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}
getAABB() {
return this.owner.getAABB();

View File

@@ -3,6 +3,7 @@ namespace gdjs {
const logger = new gdjs.Logger('Player Authentication');
const authComponents = gdjs.playerAuthenticationComponents;
// TODO EBO Replace runtimeScene to instanceContainer.
export namespace playerAuthentication {
// Authentication information.
let _username: string | null = null;

View File

@@ -679,7 +679,7 @@ namespace gdjs {
return this._renderer.getHeight();
}
updatePreRender(runtimeScene: gdjs.RuntimeScene): void {
updatePreRender(instanceContainer: gdjs.RuntimeInstanceContainer): void {
this._renderer.updatePreRender();
}

View File

@@ -1,17 +1,24 @@
namespace gdjs {
export interface RuntimeGame {
shopifyClients: { [name: string]: any };
}
declare var ShopifyBuy: any;
export class ShopifyClientsManager {
static set(runtimeScene, name, shopifyClient) {
const game = runtimeScene.getGame();
static set(
instanceContainer: gdjs.RuntimeInstanceContainer,
name: string,
shopifyClient
) {
const game = instanceContainer.getGame();
if (!game.shopifyClients) {
game.shopifyClients = {};
}
game.shopifyClients[name] = shopifyClient;
}
static get(runtimeScene, name) {
const game = runtimeScene.getGame();
static get(instanceContainer: gdjs.RuntimeInstanceContainer, name: string) {
const game = instanceContainer.getGame();
if (!game.shopifyClients) {
game.shopifyClients = {};
}
@@ -22,11 +29,11 @@ namespace gdjs {
export namespace evtTools {
export namespace shopify {
export const buildClient = function (
runtimeScene,
name,
domain,
appId,
accessToken
instanceContainer: gdjs.RuntimeInstanceContainer,
name: string,
domain: string,
appId: string,
accessToken: string
) {
if (typeof ShopifyBuy === 'undefined') {
return;
@@ -37,21 +44,24 @@ namespace gdjs {
appId: appId,
});
const shopifyClient = ShopifyBuy.buildClient(config);
ShopifyClientsManager.set(runtimeScene, name, shopifyClient);
ShopifyClientsManager.set(instanceContainer, name, shopifyClient);
};
export const getCheckoutUrlForProduct = function (
runtimeScene,
name,
productId,
quantity,
variantIndex,
successVariable,
errorVariable
instanceContainer: gdjs.RuntimeInstanceContainer,
name: string,
productId: string,
quantity: number,
variantIndex: number,
successVariable: gdjs.Variable,
errorVariable: gdjs.Variable
) {
errorVariable.setString('');
successVariable.setString('');
const shopifyClient = ShopifyClientsManager.get(runtimeScene, name);
const shopifyClient = ShopifyClientsManager.get(
instanceContainer,
name
);
shopifyClient.fetchProduct(productId).then(
function (product) {
if (variantIndex < 0 || variantIndex >= product.variants.length) {

View File

@@ -199,8 +199,8 @@ namespace gdjs {
this._renderer.onSceneResumed();
}
onDestroyFromScene(runtimeScene: gdjs.RuntimeScene): void {
super.onDestroyFromScene(runtimeScene);
onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {
super.onDestroyFromScene(instanceContainer);
this._renderer.onDestroy();
}

View File

@@ -124,7 +124,7 @@ namespace gdjs {
}
this._tileMapManager.getOrLoadTextureCache(
(textureName) =>
(this._runtimeScene
(this.getInstanceContainer()
.getGame()
.getImageManager()
.getPIXITexture(textureName) as unknown) as PIXI.BaseTexture<

View File

@@ -69,8 +69,8 @@ namespace gdjs {
return this._renderer.getRendererObject();
}
onDestroyFromScene(runtimeScene): void {
super.onDestroyFromScene(runtimeScene);
onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {
super.onDestroyFromScene(instanceContainer);
if ((this._renderer as any).onDestroy) {
(this._renderer as any).onDestroy();
}

View File

@@ -95,8 +95,8 @@ namespace gdjs {
}
}
onDestroyFromScene(runtimeScene): void {
super.onDestroyFromScene(runtimeScene);
onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {
super.onDestroyFromScene(instanceContainer);
this._renderer.onDestroy();
}

View File

@@ -4,218 +4,221 @@
* This project is released under the MIT License.
*/
namespace gdjs {
// TODO EBO Replace instanceContainer by instanceContainer.
export namespace evtTools {
export namespace camera {
export const setCameraX = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
x: float,
layer: string,
cameraId: integer
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
runtimeScene.getLayer(layer).setCameraX(x, cameraId);
instanceContainer.getLayer(layer).setCameraX(x, cameraId);
};
export const setCameraY = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
y: float,
layer: string,
cameraId: integer
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
runtimeScene.getLayer(layer).setCameraY(y, cameraId);
instanceContainer.getLayer(layer).setCameraY(y, cameraId);
};
export const getCameraX = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getCameraX();
return instanceContainer.getLayer(layer).getCameraX();
};
export const getCameraY = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getCameraY();
return instanceContainer.getLayer(layer).getCameraY();
};
export const getCameraWidth = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getCameraWidth();
return instanceContainer.getLayer(layer).getCameraWidth();
};
export const getCameraHeight = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getCameraHeight();
return instanceContainer.getLayer(layer).getCameraHeight();
};
export const getCameraBorderLeft = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return (
getCameraX(runtimeScene, layer, cameraId) -
getCameraWidth(runtimeScene, layer, cameraId) / 2
getCameraX(instanceContainer, layer, cameraId) -
getCameraWidth(instanceContainer, layer, cameraId) / 2
);
};
export const getCameraBorderRight = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return (
getCameraX(runtimeScene, layer, cameraId) +
getCameraWidth(runtimeScene, layer, cameraId) / 2
getCameraX(instanceContainer, layer, cameraId) +
getCameraWidth(instanceContainer, layer, cameraId) / 2
);
};
export const getCameraBorderTop = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return (
getCameraY(runtimeScene, layer, cameraId) -
getCameraHeight(runtimeScene, layer, cameraId) / 2
getCameraY(instanceContainer, layer, cameraId) -
getCameraHeight(instanceContainer, layer, cameraId) / 2
);
};
export const getCameraBorderBottom = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return (
getCameraY(runtimeScene, layer, cameraId) +
getCameraHeight(runtimeScene, layer, cameraId) / 2
getCameraY(instanceContainer, layer, cameraId) +
getCameraHeight(instanceContainer, layer, cameraId) / 2
);
};
export const showLayer = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene.getLayer(layer).show(true);
return instanceContainer.getLayer(layer).show(true);
};
export const hideLayer = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene.getLayer(layer).show(false);
return instanceContainer.getLayer(layer).show(false);
};
export const layerIsVisible = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string
): boolean {
return (
runtimeScene.hasLayer(layer) &&
runtimeScene.getLayer(layer).isVisible()
instanceContainer.hasLayer(layer) &&
instanceContainer.getLayer(layer).isVisible()
);
};
export const setCameraRotation = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
rotation: float,
layer: string,
cameraId: integer
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene
return instanceContainer
.getLayer(layer)
.setCameraRotation(rotation, cameraId);
};
export const getCameraRotation = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getCameraRotation(cameraId);
return instanceContainer.getLayer(layer).getCameraRotation(cameraId);
};
export const getCameraZoom = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
cameraId: integer
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getCameraZoom(cameraId);
return instanceContainer.getLayer(layer).getCameraZoom(cameraId);
};
export const setCameraZoom = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
newZoom: float,
layer: string,
cameraId: integer
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene.getLayer(layer).setCameraZoom(newZoom, cameraId);
return instanceContainer
.getLayer(layer)
.setCameraZoom(newZoom, cameraId);
};
export const centerCamera = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
object: gdjs.RuntimeObject | null,
anticipateMove: boolean,
layerName: string,
cameraId: integer
) {
if (!runtimeScene.hasLayer(layerName) || object == null) {
if (!instanceContainer.hasLayer(layerName) || object == null) {
return;
}
let xOffset = 0;
@@ -223,11 +226,11 @@ namespace gdjs {
if (anticipateMove && !object.hasNoForces()) {
const objectAverageForce = object.getAverageForce();
const elapsedTimeInSeconds =
object.getElapsedTime(runtimeScene) / 1000;
object.getElapsedTime(instanceContainer) / 1000;
xOffset = objectAverageForce.getX() * elapsedTimeInSeconds;
yOffset = objectAverageForce.getY() * elapsedTimeInSeconds;
}
const layer = runtimeScene.getLayer(layerName);
const layer = instanceContainer.getLayer(layerName);
layer.setCameraX(object.getCenterXInScene() + xOffset, cameraId);
layer.setCameraY(object.getCenterYInScene() + yOffset, cameraId);
};
@@ -236,7 +239,7 @@ namespace gdjs {
* @deprecated prefer using centerCamera and clampCamera.
*/
export const centerCameraWithinLimits = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
object: gdjs.RuntimeObject | null,
left: number,
top: number,
@@ -246,9 +249,15 @@ namespace gdjs {
layerName: string,
cameraId: integer
) {
centerCamera(runtimeScene, object, anticipateMove, layerName, cameraId);
centerCamera(
instanceContainer,
object,
anticipateMove,
layerName,
cameraId
);
clampCamera(
runtimeScene,
instanceContainer,
left,
top,
right,
@@ -259,7 +268,7 @@ namespace gdjs {
};
export const clampCamera = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
left: float,
top: float,
right: float,
@@ -267,10 +276,10 @@ namespace gdjs {
layerName: string,
cameraId: integer
) {
if (!runtimeScene.hasLayer(layerName)) {
if (!instanceContainer.hasLayer(layerName)) {
return;
}
const layer = runtimeScene.getLayer(layerName);
const layer = instanceContainer.getLayer(layerName);
const cameraHalfWidth = layer.getCameraWidth(cameraId) / 2;
const cameraHalfHeight = layer.getCameraHeight(cameraId) / 2;
@@ -304,150 +313,152 @@ namespace gdjs {
/**
* Update a layer effect parameter (with a number).
* @param runtimeScene The scene
* @param instanceContainer The scene
* @param layer The name of the layer
* @param effect The name of the effect
* @param parameter The parameter to update
* @param value The new value
*/
export const setLayerEffectDoubleParameter = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
effect: string,
parameter: string,
value: float
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene
return instanceContainer
.getLayer(layer)
.setEffectDoubleParameter(effect, parameter, value);
};
/**
* Update a layer effect parameter (with a string).
* @param runtimeScene The scene
* @param instanceContainer The scene
* @param layer The name of the layer
* @param effect The name of the effect
* @param parameter The parameter to update
* @param value The new value
*/
export const setLayerEffectStringParameter = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
effect: string,
parameter: string,
value: string
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene
return instanceContainer
.getLayer(layer)
.setEffectStringParameter(effect, parameter, value);
};
/**
* Enable or disable a layer effect parameter (boolean).
* @param runtimeScene The scene
* @param instanceContainer The scene
* @param layer The name of the layer
* @param effect The name of the effect
* @param parameter The parameter to update
* @param value The new value
*/
export const setLayerEffectBooleanParameter = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
effect: string,
parameter: string,
value: boolean
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene
return instanceContainer
.getLayer(layer)
.setEffectBooleanParameter(effect, parameter, value);
};
/**
* Enable, or disable, an effect of a layer.
* @param runtimeScene The scene
* @param instanceContainer The scene
* @param layer The name of the layer
* @param effect The name of the effect
* @param enabled true to enable, false to disable.
*/
export const enableLayerEffect = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
effect: string,
enabled: boolean
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
runtimeScene.getLayer(layer).enableEffect(effect, enabled);
instanceContainer.getLayer(layer).enableEffect(effect, enabled);
};
/**
* Check if an effect is enabled.
* @param runtimeScene The scene
* @param instanceContainer The scene
* @param layer The name of the layer
* @param effect The name of the effect
* @return true if the effect is enabled, false otherwise.
*/
export const layerEffectEnabled = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
effect: string
): boolean {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return true;
}
return runtimeScene.getLayer(layer).isEffectEnabled(effect);
return instanceContainer.getLayer(layer).isEffectEnabled(effect);
};
export const setLayerTimeScale = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
timeScale: float
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene.getLayer(layer).setTimeScale(timeScale);
return instanceContainer.getLayer(layer).setTimeScale(timeScale);
};
export const getLayerTimeScale = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 1;
}
return runtimeScene.getLayer(layer).getTimeScale();
return instanceContainer.getLayer(layer).getTimeScale();
};
export const setLayerDefaultZOrder = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string,
defaultZOrder: integer
) {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return;
}
return runtimeScene.getLayer(layer).setDefaultZOrder(defaultZOrder);
return instanceContainer
.getLayer(layer)
.setDefaultZOrder(defaultZOrder);
};
export const getLayerDefaultZOrder = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layer: string
): number {
if (!runtimeScene.hasLayer(layer)) {
if (!instanceContainer.hasLayer(layer)) {
return 0;
}
return runtimeScene.getLayer(layer).getDefaultZOrder();
return instanceContainer.getLayer(layer).getDefaultZOrder();
};
/**
@@ -456,13 +467,13 @@ namespace gdjs {
* @param rgbColor The color, in RGB format ("128;200;255").
*/
export const setLayerAmbientLightColor = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
layerName: string,
rgbColor: string
) {
if (
!runtimeScene.hasLayer(layerName) ||
!runtimeScene.getLayer(layerName).isLightingLayer()
!instanceContainer.hasLayer(layerName) ||
!instanceContainer.getLayer(layerName).isLightingLayer()
) {
return;
}
@@ -470,7 +481,7 @@ namespace gdjs {
if (colors.length < 3) {
return;
}
return runtimeScene
return instanceContainer
.getLayer(layerName)
.setClearColor(
parseInt(colors[0], 10),

View File

@@ -147,10 +147,10 @@ namespace gdjs {
};
export const enableMetrics = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
enable: boolean
) {
runtimeScene.getGame().enableMetrics(enable);
instanceContainer.getGame().enableMetrics(enable);
};
/**

View File

@@ -224,7 +224,7 @@ namespace gdjs {
export const readNumberFromJSONFile = (
name: string,
elementPath: string,
runtimeScene: gdjs.RuntimeScene | null,
instanceContainer: gdjs.RuntimeInstanceContainer | null,
variable: gdjs.Variable
) => {
return loadObject(name, (jsObject) => {
@@ -250,7 +250,7 @@ namespace gdjs {
export const readStringFromJSONFile = (
name: string,
elementPath: string,
runtimeScene: gdjs.RuntimeScene | null,
instanceContainer: gdjs.RuntimeInstanceContainer | null,
variable: gdjs.Variable
) => {
return loadObject(name, (jsObject) => {

View File

@@ -85,10 +85,10 @@ namespace gdjs {
* @private
*/
export const globalVariableExists = function (
runtimeScene: gdjs.RuntimeScene,
instanceContainer: gdjs.RuntimeInstanceContainer,
variableName: string
): boolean {
return runtimeScene.getGame().getVariables().has(variableName);
return instanceContainer.getGame().getVariables().has(variableName);
};
/**

View File

@@ -329,7 +329,6 @@ namespace gdjs {
gdjs.callbacksRuntimeSceneUnloaded.push(callback);
};
// TODO EBO Check that it doesn't break community extensions.
/**
* Register a function to be called when an object is deleted from a scene.
* @param callback The function to be called.

View File

@@ -27,20 +27,22 @@ namespace gdjs {
/**
* @param layer The layer
* @param runtimeSceneRenderer The scene renderer
* @param runtimeInstanceContainerRenderer The scene renderer
*/
constructor(
layer: gdjs.Layer,
runtimeSceneRenderer: gdjs.RuntimeInstanceContainerRenderer,
runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer,
pixiRenderer: PIXI.Renderer | null
) {
this._pixiContainer = new PIXI.Container();
this._layer = layer;
this._runtimeSceneRenderer = runtimeSceneRenderer;
this._runtimeSceneRenderer = runtimeInstanceContainerRenderer;
this._pixiRenderer = pixiRenderer;
this._isLightingLayer = layer.isLightingLayer();
this._clearColor = layer.getClearColor();
runtimeSceneRenderer.getRendererObject().addChild(this._pixiContainer);
runtimeInstanceContainerRenderer
.getRendererObject()
.addChild(this._pixiContainer);
this._pixiContainer.filters = [];
if (this._isLightingLayer) {
this._replaceContainerWithSprite();

View File

@@ -288,9 +288,6 @@ namespace gdjs {
/**
* The SpriteRuntimeObject represents an object that can display images.
*
* @param runtimeScene The scene the object belongs to
* @param spriteObjectData The object data used to initialize the object
*/
export class SpriteRuntimeObject extends gdjs.RuntimeObject {
_currentAnimation: number = 0;
@@ -321,6 +318,10 @@ namespace gdjs {
_renderer: gdjs.SpriteRuntimeObjectRenderer;
_animationFrameDirty: any;
/**
* @param instanceContainer The container the object belongs to
* @param spriteObjectData The object data used to initialize the object
*/
constructor(
instanceContainer: gdjs.RuntimeInstanceContainer,
spriteObjectData: ObjectData & SpriteObjectDataType
@@ -347,7 +348,7 @@ namespace gdjs {
reinitialize(spriteObjectData: SpriteObjectData) {
super.reinitialize(spriteObjectData);
const runtimeScene = this._runtimeScene;
const instanceContainer = this.getInstanceContainer();
this._currentAnimation = 0;
this._currentDirection = 0;
this._currentFrame = 0;
@@ -366,13 +367,13 @@ namespace gdjs {
const animData = spriteObjectData.animations[i];
if (i < this._animations.length) {
this._animations[i].reinitialize(
runtimeScene.getGame().getImageManager(),
instanceContainer.getGame().getImageManager(),
animData
);
} else {
this._animations.push(
new gdjs.SpriteAnimation(
runtimeScene.getGame().getImageManager(),
instanceContainer.getGame().getImageManager(),
animData
)
);
@@ -382,7 +383,7 @@ namespace gdjs {
//Make sure to delete already existing animations which are not used anymore.
this._animationFrame = null;
this._renderer.reinitialize(this, runtimeScene);
this._renderer.reinitialize(this, instanceContainer);
this._updateAnimationFrame();
// *ALWAYS* call `this.onCreated()` at the very end of your object reinitialize method.
@@ -393,19 +394,19 @@ namespace gdjs {
oldObjectData: SpriteObjectData,
newObjectData: SpriteObjectData
): boolean {
const runtimeScene = this._runtimeScene;
const instanceContainer = this.getInstanceContainer();
let i = 0;
for (const len = newObjectData.animations.length; i < len; ++i) {
const animData = newObjectData.animations[i];
if (i < this._animations.length) {
this._animations[i].reinitialize(
runtimeScene.getGame().getImageManager(),
instanceContainer.getGame().getImageManager(),
animData
);
} else {
this._animations.push(
new gdjs.SpriteAnimation(
runtimeScene.getGame().getImageManager(),
instanceContainer.getGame().getImageManager(),
animData
)
);