mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-22 10:05:37 -04:00
184 lines
5.1 KiB
TypeScript
184 lines
5.1 KiB
TypeScript
namespace gdjs {
|
|
export interface RuntimeGame {
|
|
inventories: { [name: string]: gdjs.Inventory };
|
|
}
|
|
/**
|
|
* @category Other extensions > Inventory
|
|
*/
|
|
export class InventoryManager {
|
|
static get(
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
name: string
|
|
): gdjs.Inventory {
|
|
const game = instanceContainer.getGame();
|
|
if (!game.inventories) {
|
|
game.inventories = {};
|
|
}
|
|
let inventory = game.inventories[name];
|
|
if (!inventory) {
|
|
inventory = game.inventories[name] = new gdjs.Inventory();
|
|
}
|
|
return inventory;
|
|
}
|
|
}
|
|
|
|
export namespace evtTools {
|
|
export namespace inventory {
|
|
export const add = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string
|
|
) {
|
|
return InventoryManager.get(instanceContainer, inventoryName).add(name);
|
|
};
|
|
|
|
export const remove = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string
|
|
) {
|
|
return InventoryManager.get(instanceContainer, inventoryName).remove(
|
|
name
|
|
);
|
|
};
|
|
|
|
export const count = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string
|
|
) {
|
|
return InventoryManager.get(instanceContainer, inventoryName).count(
|
|
name
|
|
);
|
|
};
|
|
|
|
export const maximum = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string
|
|
) {
|
|
return InventoryManager.get(instanceContainer, inventoryName).maximum(
|
|
name
|
|
);
|
|
};
|
|
|
|
export const has = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string
|
|
) {
|
|
return InventoryManager.get(instanceContainer, inventoryName).has(name);
|
|
};
|
|
|
|
export const setMaximum = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string,
|
|
maxCount: number
|
|
) {
|
|
return InventoryManager.get(
|
|
instanceContainer,
|
|
inventoryName
|
|
).setMaximum(name, maxCount);
|
|
};
|
|
|
|
export const setUnlimited = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string,
|
|
enable: boolean
|
|
) {
|
|
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 equip = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string,
|
|
equip: boolean
|
|
) {
|
|
return InventoryManager.get(instanceContainer, inventoryName).equip(
|
|
name,
|
|
equip
|
|
);
|
|
};
|
|
|
|
export const isEquipped = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
name: string
|
|
) {
|
|
return InventoryManager.get(
|
|
instanceContainer,
|
|
inventoryName
|
|
).isEquipped(name);
|
|
};
|
|
|
|
export const serializeToVariable = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
variable: gdjs.Variable
|
|
) {
|
|
const allItems = gdjs.InventoryManager.get(
|
|
instanceContainer,
|
|
inventoryName
|
|
).getAllItems();
|
|
for (const name in allItems) {
|
|
const item = allItems[name];
|
|
const serializedItem = variable.getChild(name);
|
|
serializedItem.getChild('count').setNumber(item.count);
|
|
serializedItem.getChild('maxCount').setNumber(item.maxCount);
|
|
serializedItem.getChild('unlimited').setBoolean(item.unlimited);
|
|
serializedItem.getChild('equipped').setBoolean(item.equipped);
|
|
}
|
|
};
|
|
|
|
export const unserializeFromVariable = function (
|
|
instanceContainer: gdjs.RuntimeInstanceContainer,
|
|
inventoryName: string,
|
|
variable: gdjs.Variable
|
|
) {
|
|
const inventory = gdjs.InventoryManager.get(
|
|
instanceContainer,
|
|
inventoryName
|
|
);
|
|
inventory.clear();
|
|
|
|
const children = variable.getAllChildren();
|
|
for (const name in children) {
|
|
const serializedItem = children[name];
|
|
inventory.setCount(
|
|
name,
|
|
serializedItem.getChild('count').getAsNumber()
|
|
);
|
|
inventory.setMaximum(
|
|
name,
|
|
serializedItem.getChild('maxCount').getAsNumber()
|
|
);
|
|
inventory.setUnlimited(
|
|
name,
|
|
serializedItem.getChild('unlimited').getAsBoolean()
|
|
);
|
|
inventory.equip(
|
|
name,
|
|
serializedItem.getChild('equipped').getAsBoolean()
|
|
);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|