Character and Skin Data Structure
I'm currently implementing a character selection system in a Roblox game and would like to hear everyone's opinions on how to structure the data.
// Character types (5 types)
enum CharacterType {
Warrior = "Warrior",
Mage = "Mage",
Archer = "Archer",
Assassin = "Assassin",
Tank = "Tank"
}
// Skins for each character (5 colors each)
enum WarriorSkin { Red = "Red", Blue = "Blue", Green = "Green", Gold = "Gold", Silver = "Silver" }
enum MageSkin { Purple = "Purple", White = "White", Black = "Black", Pink = "Pink", Cyan = "Cyan" }
enum ArcherSkin { Brown = "Brown", Orange = "Orange", Yellow = "Yellow", Gray = "Gray", Navy = "Navy" }
enum AssassinSkin { Dark = "Dark", Crimson = "Crimson", Steel = "Steel", Emerald = "Emerald", Violet = "Violet" }
enum TankSkin { Bronze = "Bronze", Iron = "Iron", Copper = "Copper", Platinum = "Platinum", Obsidian = "Obsidian" }
// Union type for type discrimination
export type CharacterSkin = WarriorSkin | MageSkin | ArcherSkin | AssassinSkin | TankSkin;
// DataStore management
interface PlayerData {
selectedCharacter: { type: CharacterType; skin: CharacterSkin };
ownedCharacters: Map<CharacterType, Set<CharacterSkin>>;
}
// Character types (5 types)
enum CharacterType {
Warrior = "Warrior",
Mage = "Mage",
Archer = "Archer",
Assassin = "Assassin",
Tank = "Tank"
}
// Skins for each character (5 colors each)
enum WarriorSkin { Red = "Red", Blue = "Blue", Green = "Green", Gold = "Gold", Silver = "Silver" }
enum MageSkin { Purple = "Purple", White = "White", Black = "Black", Pink = "Pink", Cyan = "Cyan" }
enum ArcherSkin { Brown = "Brown", Orange = "Orange", Yellow = "Yellow", Gray = "Gray", Navy = "Navy" }
enum AssassinSkin { Dark = "Dark", Crimson = "Crimson", Steel = "Steel", Emerald = "Emerald", Violet = "Violet" }
enum TankSkin { Bronze = "Bronze", Iron = "Iron", Copper = "Copper", Platinum = "Platinum", Obsidian = "Obsidian" }
// Union type for type discrimination
export type CharacterSkin = WarriorSkin | MageSkin | ArcherSkin | AssassinSkin | TankSkin;
// DataStore management
interface PlayerData {
selectedCharacter: { type: CharacterType; skin: CharacterSkin };
ownedCharacters: Map<CharacterType, Set<CharacterSkin>>;
}
2 Replies
Unknown User•3w ago
Message Not Public
Sign In & Join Server To View
const CharacterData = {
Warrior: {
name: "Warrior",
skins: ["Red", "Blue", "Green", "Gold", "Silver"],
// baseHealth: 100,
// baseAttack: 50,
// description: "...",
},
Mage: {
name: "Mage",
skins: ["Purple", "White", "Black", "Pink", "Cyan"],
// baseHealth: 60,
// baseMana: 150,
},
} as const;
type CharacterType = keyof typeof CharacterData;
type CharacterSkin<T extends CharacterType> = typeof CharacterData[T]["skins"][number];
const CharacterData = {
Warrior: {
name: "Warrior",
skins: ["Red", "Blue", "Green", "Gold", "Silver"],
// baseHealth: 100,
// baseAttack: 50,
// description: "...",
},
Mage: {
name: "Mage",
skins: ["Purple", "White", "Black", "Pink", "Cyan"],
// baseHealth: 60,
// baseMana: 150,
},
} as const;
type CharacterType = keyof typeof CharacterData;
type CharacterSkin<T extends CharacterType> = typeof CharacterData[T]["skins"][number];