mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-10-21 20:45:52 +02:00
* TS: enable strict-null * fix battle-scene.ts * fix voucher.ts * adapt more files to strict-null * adapt more files to strict-null ( 2) * adapt ability.ts to strict-null * adapt `arena.ts` to strict-null * adapt TagAddedEvent constructor to strict-null * adapt phases.ts.to strict-null * adapt status-effect.ts to strict-null * adapt `account.ts` to strict-null * adapt `configHandler.ts` to strict-null * adapt `ability.ts` to strict-null * adapt `biomes.ts` to strict-null * adapt `challenge.ts` to strict-null * adapt `daily-run.ts` to strict-null * adapt `nature.ts` to strict-null * adapt `pokemon-forms.ts` to strict-null * adapt `tainer-names.ts` to strict-null * adapt `types.ts` to strict-null * adapt `weather.ts` to strict-null * adapt `egg-hatch-phase.ts` to strict-null * adapt `evolution-phase.ts` to strict-null * adapt `pokemon-sprite-sparkle-handler.ts` to strict-null * adapt `evolution-phase.ts` to strict-null * adapt `game-mode.ts` to strict-null * adapt `utils.ts` to strict-null * adapt `voucher-ui-handler.ts` to strict-null * adapt `src/ui/unavailable-modal-ui-handler.ts` to strict-null * adapt `src/ui/ui.ts` to strict-null * adapt `src/ui/ui-theme.ts` to strict-null * adapt `src/ui/title-ui-handler.ts` to strict-null * adapt `src/ui/time-of-day-widget.ts` to strict-null * adapt `src/ui/text.ts` to strict-null * adapt `src/ui/target-select-ui-handler.ts` to strict-null * adapt `src/ui/settings/settings-keyboard-ui-handler.ts` to strict-null * adapt more files to strict-null (3) * adapt more files to strict-null (4) * adapt more files (mostly tests) to strict-null (5) * adapt more files to strict-null (6) * adapt more files to strict-null (7) * Update `src/data/pokemon-evolutions.ts` for strict-null Partial update `src/data/pokemon-species.ts` for strict-null * adapt more files to strict-null (8) * adapt more files to strict-null (9) * Strict some more nulls (still a few errors remaining) * adapt rest of the files to strict-null (9) * fix tests (check for null instead of undefined) * repalce a lot of `??` with bangs And added TODO notice as usual * fix more tests * all tests pass now * fix broken game-loop after trainer battle add some console.warn for missing cases and falling back to default * remove guessed fallback from utils.rgbHexToRgba * add TODO for this.currentBattle = null * adjust getPokemonById() return to include `null` * fix compilation errors * add test for pokemon.trySetStatus * `chanceMultiplier` shouldn't be optional * allow `null` for currentPhase * adjust hasExpSprite logic for no keymatch found * reduce bang usage in account.updateUserInfo() * fix new strict-null issues after merge * fix `strict-null` issues in dropdown.ts and sand_spit.test.ts * fix egg-gacha * adapt gul_missile.test.ts to strict-null * fix move.ts strict-null * fix i18n.ts strict-null * fix strict-null issues * fix baton_pass test after accidentially breaking it * chore: fix compiler errors * revert accidential changes in baton_pass.test.ts --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
645 lines
13 KiB
TypeScript
645 lines
13 KiB
TypeScript
export enum Type {
|
|
UNKNOWN = -1,
|
|
NORMAL = 0,
|
|
FIGHTING,
|
|
FLYING,
|
|
POISON,
|
|
GROUND,
|
|
ROCK,
|
|
BUG,
|
|
GHOST,
|
|
STEEL,
|
|
FIRE,
|
|
WATER,
|
|
GRASS,
|
|
ELECTRIC,
|
|
PSYCHIC,
|
|
ICE,
|
|
DRAGON,
|
|
DARK,
|
|
FAIRY,
|
|
STELLAR
|
|
}
|
|
|
|
export type TypeDamageMultiplier = 0 | 0.125 | 0.25 | 0.5 | 1 | 2 | 4 | 8;
|
|
|
|
export function getTypeDamageMultiplier(attackType: integer, defType: integer): TypeDamageMultiplier {
|
|
if (attackType === Type.UNKNOWN || defType === Type.UNKNOWN) {
|
|
return 1;
|
|
}
|
|
|
|
switch (defType) {
|
|
case Type.NORMAL:
|
|
switch (attackType) {
|
|
case Type.FIGHTING:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.GHOST:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.FIGHTING:
|
|
switch (attackType) {
|
|
case Type.FLYING:
|
|
case Type.PSYCHIC:
|
|
case Type.FAIRY:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
return 1;
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.DARK:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.FLYING:
|
|
switch (attackType) {
|
|
case Type.ROCK:
|
|
case Type.ELECTRIC:
|
|
case Type.ICE:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.PSYCHIC:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.FIGHTING:
|
|
case Type.BUG:
|
|
case Type.GRASS:
|
|
return 0.5;
|
|
case Type.GROUND:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.POISON:
|
|
switch (attackType) {
|
|
case Type.GROUND:
|
|
case Type.PSYCHIC:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.ROCK:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.ELECTRIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
return 1;
|
|
case Type.FIGHTING:
|
|
case Type.POISON:
|
|
case Type.BUG:
|
|
case Type.GRASS:
|
|
case Type.FAIRY:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.GROUND:
|
|
switch (attackType) {
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ICE:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.FLYING:
|
|
case Type.GROUND:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.PSYCHIC:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.POISON:
|
|
case Type.ROCK:
|
|
return 0.5;
|
|
case Type.ELECTRIC:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.ROCK:
|
|
switch (attackType) {
|
|
case Type.FIGHTING:
|
|
case Type.GROUND:
|
|
case Type.STEEL:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
return 2;
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.FIRE:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.BUG:
|
|
switch (attackType) {
|
|
case Type.FLYING:
|
|
case Type.ROCK:
|
|
case Type.FIRE:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.POISON:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.WATER:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.FIGHTING:
|
|
case Type.GROUND:
|
|
case Type.GRASS:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.GHOST:
|
|
switch (attackType) {
|
|
case Type.GHOST:
|
|
case Type.DARK:
|
|
return 2;
|
|
case Type.FLYING:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.POISON:
|
|
case Type.BUG:
|
|
return 0.5;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.STEEL:
|
|
switch (attackType) {
|
|
case Type.FIGHTING:
|
|
case Type.GROUND:
|
|
case Type.FIRE:
|
|
return 2;
|
|
case Type.GHOST:
|
|
case Type.WATER:
|
|
case Type.ELECTRIC:
|
|
case Type.DARK:
|
|
return 1;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.STEEL:
|
|
case Type.GRASS:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.FAIRY:
|
|
return 0.5;
|
|
case Type.POISON:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.FIRE:
|
|
switch (attackType) {
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.WATER:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GHOST:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
return 1;
|
|
case Type.BUG:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.GRASS:
|
|
case Type.ICE:
|
|
case Type.FAIRY:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.WATER:
|
|
switch (attackType) {
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.PSYCHIC:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.ICE:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.GRASS:
|
|
switch (attackType) {
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.BUG:
|
|
case Type.FIRE:
|
|
case Type.ICE:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.ROCK:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.PSYCHIC:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.GROUND:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.ELECTRIC:
|
|
switch (attackType) {
|
|
case Type.GROUND:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.POISON:
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.FLYING:
|
|
case Type.STEEL:
|
|
case Type.ELECTRIC:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.PSYCHIC:
|
|
switch (attackType) {
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.DARK:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.FIGHTING:
|
|
case Type.PSYCHIC:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.ICE:
|
|
switch (attackType) {
|
|
case Type.FIGHTING:
|
|
case Type.ROCK:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.DRAGON:
|
|
case Type.DARK:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.ICE:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.DRAGON:
|
|
switch (attackType) {
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
case Type.FAIRY:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FIGHTING:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.BUG:
|
|
case Type.GHOST:
|
|
case Type.STEEL:
|
|
case Type.PSYCHIC:
|
|
case Type.DARK:
|
|
return 1;
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
return 0.5;
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.DARK:
|
|
switch (attackType) {
|
|
case Type.FIGHTING:
|
|
case Type.BUG:
|
|
case Type.FAIRY:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.POISON:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.STEEL:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.ICE:
|
|
case Type.DRAGON:
|
|
return 1;
|
|
case Type.GHOST:
|
|
case Type.DARK:
|
|
return 0.5;
|
|
case Type.PSYCHIC:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.FAIRY:
|
|
switch (attackType) {
|
|
case Type.POISON:
|
|
case Type.STEEL:
|
|
return 2;
|
|
case Type.NORMAL:
|
|
case Type.FLYING:
|
|
case Type.GROUND:
|
|
case Type.ROCK:
|
|
case Type.GHOST:
|
|
case Type.FIRE:
|
|
case Type.WATER:
|
|
case Type.GRASS:
|
|
case Type.ELECTRIC:
|
|
case Type.PSYCHIC:
|
|
case Type.ICE:
|
|
case Type.FAIRY:
|
|
return 1;
|
|
case Type.FIGHTING:
|
|
case Type.BUG:
|
|
case Type.DARK:
|
|
return 0.5;
|
|
case Type.DRAGON:
|
|
default:
|
|
return 0;
|
|
}
|
|
case Type.STELLAR:
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Retrieve the types resisting a given type
|
|
* @returns An array populated with Types, or an empty array if no resistances exist (Unknown or Stellar type)
|
|
*/
|
|
export function getTypeResistances(type: number): Type[] {
|
|
switch (type) {
|
|
case Type.NORMAL:
|
|
return [Type.ROCK, Type.STEEL, Type.GHOST];
|
|
case Type.FIGHTING:
|
|
return [Type.FLYING, Type.POISON, Type.BUG, Type.PSYCHIC, Type.FAIRY, Type.GHOST];
|
|
case Type.FLYING:
|
|
return [Type.ROCK, Type.ELECTRIC, Type.STEEL];
|
|
case Type.POISON:
|
|
return [Type.POISON, Type.GROUND, Type.ROCK, Type.GHOST, Type.STEEL];
|
|
case Type.GROUND:
|
|
return [Type.BUG, Type.GRASS, Type.FLYING];
|
|
case Type.ROCK:
|
|
return [Type.FIGHTING, Type.GROUND, Type.STEEL];
|
|
case Type.BUG:
|
|
return [Type.FIGHTING, Type.FLYING, Type.POISON, Type.GHOST, Type.STEEL, Type.FIRE, Type.FAIRY];
|
|
case Type.GHOST:
|
|
return [Type.DARK, Type.NORMAL];
|
|
case Type.STEEL:
|
|
return [Type.STEEL, Type.FIRE, Type.WATER, Type.ELECTRIC];
|
|
case Type.FIRE:
|
|
return [Type.ROCK, Type.FIRE, Type.WATER, Type.DRAGON];
|
|
case Type.WATER:
|
|
return [Type.WATER, Type.GRASS, Type.DRAGON];
|
|
case Type.GRASS:
|
|
return [Type.FLYING, Type.POISON, Type.BUG, Type.STEEL, Type.FIRE, Type.GRASS, Type.DRAGON];
|
|
case Type.ELECTRIC:
|
|
return [Type.GRASS, Type.ELECTRIC, Type.DRAGON, Type.GROUND];
|
|
case Type.PSYCHIC:
|
|
return [Type.STEEL, Type.PSYCHIC];
|
|
case Type.ICE:
|
|
return [Type.STEEL, Type.FIRE, Type.WATER, Type.ICE];
|
|
case Type.DRAGON:
|
|
return [Type.STEEL, Type.FAIRY];
|
|
case Type.DARK:
|
|
return [Type.FIGHTING, Type.DARK, Type.FAIRY];
|
|
case Type.FAIRY:
|
|
return [Type.POISON, Type.STEEL, Type.FIRE];
|
|
case Type.UNKNOWN:
|
|
case Type.STELLAR:
|
|
default:
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieve the color corresponding to a specific damage multiplier
|
|
* @returns A color or undefined if the default color should be used
|
|
*/
|
|
export function getTypeDamageMultiplierColor(multiplier: TypeDamageMultiplier, side: "defense" | "offense"): string | undefined {
|
|
if (side === "offense") {
|
|
switch (multiplier) {
|
|
case 0:
|
|
return "#929292";
|
|
case 0.125:
|
|
return "#FF5500";
|
|
case 0.25:
|
|
return "#FF7400";
|
|
case 0.5:
|
|
return "#FE8E00";
|
|
case 1:
|
|
return undefined;
|
|
case 2:
|
|
return "#4AA500";
|
|
case 4:
|
|
return "#4BB400";
|
|
case 8:
|
|
return "#52C200";
|
|
}
|
|
} else if (side === "defense") {
|
|
switch (multiplier) {
|
|
case 0:
|
|
return "#B1B100";
|
|
case 0.125:
|
|
return "#2DB4FF";
|
|
case 0.25:
|
|
return "#00A4FF";
|
|
case 0.5:
|
|
return "#0093FF";
|
|
case 1:
|
|
return undefined;
|
|
case 2:
|
|
return "#FE8E00";
|
|
case 4:
|
|
return "#FF7400";
|
|
case 8:
|
|
return "#FF5500";
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getTypeRgb(type: Type): [ integer, integer, integer ] {
|
|
switch (type) {
|
|
case Type.NORMAL:
|
|
return [ 168, 168, 120 ];
|
|
case Type.FIGHTING:
|
|
return [ 192, 48, 40 ];
|
|
case Type.FLYING:
|
|
return [ 168, 144, 240 ];
|
|
case Type.POISON:
|
|
return [ 160, 64, 160 ];
|
|
case Type.GROUND:
|
|
return [ 224, 192, 104 ];
|
|
case Type.ROCK:
|
|
return [ 184, 160, 56 ];
|
|
case Type.BUG:
|
|
return [ 168, 184, 32 ];
|
|
case Type.GHOST:
|
|
return [ 112, 88, 152 ];
|
|
case Type.STEEL:
|
|
return [ 184, 184, 208 ];
|
|
case Type.FIRE:
|
|
return [ 240, 128, 48 ];
|
|
case Type.WATER:
|
|
return [ 104, 144, 240 ];
|
|
case Type.GRASS:
|
|
return [ 120, 200, 80 ];
|
|
case Type.ELECTRIC:
|
|
return [ 248, 208, 48 ];
|
|
case Type.PSYCHIC:
|
|
return [ 248, 88, 136 ];
|
|
case Type.ICE:
|
|
return [ 152, 216, 216 ];
|
|
case Type.DRAGON:
|
|
return [ 112, 56, 248 ];
|
|
case Type.DARK:
|
|
return [ 112, 88, 72 ];
|
|
case Type.FAIRY:
|
|
return [ 232, 136, 200 ];
|
|
case Type.STELLAR:
|
|
return [ 255, 255, 255 ];
|
|
default:
|
|
return [ 0, 0, 0 ];
|
|
}
|
|
}
|