UNPKG

isaacscript-common

Version:

Helper functions and features for IsaacScript mods.

88 lines (87 loc) 3.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.colorEquals = colorEquals; exports.copyColor = copyColor; exports.deserializeColor = deserializeColor; exports.getRandomColor = getRandomColor; exports.isColor = isColor; exports.isSerializedColor = isSerializedColor; exports.serializeColor = serializeColor; const SerializationBrand_1 = require("../enums/private/SerializationBrand"); const isaacAPIClass_1 = require("./isaacAPIClass"); const random_1 = require("./random"); const rng_1 = require("./rng"); const table_1 = require("./table"); const types_1 = require("./types"); const utils_1 = require("./utils"); const OBJECT_NAME = "Color"; const KEYS = ["R", "G", "B", "A", "RO", "GO", "BO"]; function colorEquals(color1, color2) { return (0, isaacAPIClass_1.isaacAPIClassEquals)(color1, color2, KEYS); } /** Helper function to copy a `Color` Isaac API class. */ function copyColor(color) { if (!isColor(color)) { error(`Failed to copy a ${OBJECT_NAME} object since the provided object was not a userdata ${OBJECT_NAME} class.`); } return Color(color.R, color.G, color.B, color.A, color.RO, color.GO, color.BO); } /** * Helper function to convert a `SerializedColor` object to a normal `Color` object. (This is used * by the save data manager when reading data from the "save#.dat" file.) */ function deserializeColor(color) { if (!(0, types_1.isTable)(color)) { error(`Failed to deserialize a ${OBJECT_NAME} object since the provided object was not a Lua table.`); } const [r, g, b, a, ro, go, bo] = (0, table_1.getNumbersFromTable)(color, OBJECT_NAME, ...KEYS); (0, utils_1.assertDefined)(r, `Failed to deserialize a ${OBJECT_NAME} object since the provided object did not have a value for: R`); (0, utils_1.assertDefined)(g, `Failed to deserialize a ${OBJECT_NAME} object since the provided object did not have a value for: G`); (0, utils_1.assertDefined)(b, `Failed to deserialize a ${OBJECT_NAME} object since the provided object did not have a value for: B`); return Color(r, g, b, a, ro, go, bo); } /** * Helper function to get a random `Color` object. * * If you want to generate an unseeded object, you must explicitly pass `undefined` to the * `seedOrRNG` parameter. * * @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the * `RNG.Next` method will be called. If `undefined` is provided, it will default to * a random seed. * @param alpha Optional. The alpha value to use. Default is 1. */ function getRandomColor(seedOrRNG, alpha = 1) { const rng = (0, rng_1.isRNG)(seedOrRNG) ? seedOrRNG : (0, rng_1.newRNG)(seedOrRNG); const r = (0, random_1.getRandom)(rng); const g = (0, random_1.getRandom)(rng); const b = (0, random_1.getRandom)(rng); return Color(r, g, b, alpha); } /** Helper function to check if something is an instantiated `Color` object. */ function isColor(object) { return (0, isaacAPIClass_1.isIsaacAPIClassOfType)(object, OBJECT_NAME); } /** * Used to determine is the given table is a serialized `Color` object created by the `deepCopy` * function. */ function isSerializedColor(object) { if (!(0, types_1.isTable)(object)) { return false; } return (0, table_1.tableHasKeys)(object, ...KEYS) && object.has(SerializationBrand_1.SerializationBrand.COLOR); } /** * Helper function to convert a `Color` object to a `SerializedColor` object. (This is used by the * save data manager when writing data from the "save#.dat" file.) */ function serializeColor(color) { if (!isColor(color)) { error(`Failed to serialize a ${OBJECT_NAME} object since the provided object was not a userdata ${OBJECT_NAME} class.`); } const colorTable = new LuaMap(); (0, table_1.copyUserdataValuesToTable)(color, KEYS, colorTable); colorTable.set(SerializationBrand_1.SerializationBrand.COLOR, ""); return colorTable; }