6540f15c5b
* Wrap websockets with HyperExpress * Add endpoints on pusher to resolve wokas * getting textures urls from pusher * Adding OpenAPI documentation for the pusher. The pusher now exposes a "/openapi" endpoint and a "/swagger-ui/" endpoint. * revert FRONT_URL * playerTextures metadata is being loaded via Phaser.Loader * fetch textures every time character or customize scene is open * Heavy changes: refactoring the pusher to always send the textures (and the front to accept them) * Sending character layer details to admin * Cleaning commented code * Fixing regex * Fix woka endpoints on pusher * Change error wording on pusher * Working on integration of the woka-list with the new admin endpoint. * Switching from "name" to "id" in texture object + using zod for woka/list validation * Add position on default woka data * Remove async on pusher option method * Fix woka list url * add options for /register * Fxiing loading the Woka list * Actually returning something in logout-callback * Copying messages to back too * remove customize button if no body parts are available (#1952) * remove customize button if no body parts are available * remove unused position field from PlayerTexturesCollection interface * removed unused label field * fix LocalUser test * little PlayerTextures class refactor * Fixing linting * Fixing missing Openapi packages in prod * Fixing back build Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: David Négrier <d.negrier@thecodingmachine.com> * Add returns on pusher endpoints Co-authored-by: Alexis Faizeau <a.faizeau@workadventu.re> Co-authored-by: Hanusiak Piotr <piotr@ltmp.co> Co-authored-by: Piotr Hanusiak <wacneg@gmail.com>
127 lines
4.1 KiB
TypeScript
127 lines
4.1 KiB
TypeScript
//The list of all the player textures, both the default models and the partial textures used for customization
|
|
|
|
export interface BodyResourceDescriptionListInterface {
|
|
[key: string]: BodyResourceDescriptionInterface;
|
|
}
|
|
|
|
export interface BodyResourceDescriptionInterface {
|
|
id: string;
|
|
img: string;
|
|
level?: number;
|
|
}
|
|
|
|
/**
|
|
* Temporary object to map layers to the old "level" concept.
|
|
*/
|
|
export const mapLayerToLevel = {
|
|
woka: -1,
|
|
body: 0,
|
|
eyes: 1,
|
|
hair: 2,
|
|
clothes: 3,
|
|
hat: 4,
|
|
accessory: 5,
|
|
};
|
|
|
|
export enum PlayerTexturesKey {
|
|
Accessory = "accessory",
|
|
Body = "body",
|
|
Clothes = "clothes",
|
|
Eyes = "eyes",
|
|
Hair = "hair",
|
|
Hat = "hat",
|
|
Woka = "woka",
|
|
}
|
|
|
|
type PlayerTexturesMetadata = Record<PlayerTexturesKey, PlayerTexturesCategory>;
|
|
|
|
interface PlayerTexturesCategory {
|
|
collections: PlayerTexturesCollection[];
|
|
required?: boolean;
|
|
}
|
|
|
|
interface PlayerTexturesCollection {
|
|
name: string;
|
|
textures: PlayerTexturesRecord[];
|
|
}
|
|
|
|
interface PlayerTexturesRecord {
|
|
id: string;
|
|
name: string;
|
|
url: string;
|
|
}
|
|
|
|
export class PlayerTextures {
|
|
private PLAYER_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private COLOR_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private EYES_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private HAIR_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private CLOTHES_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private HATS_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private ACCESSORIES_RESOURCES: BodyResourceDescriptionListInterface = {};
|
|
private LAYERS: BodyResourceDescriptionListInterface[] = [];
|
|
|
|
public loadPlayerTexturesMetadata(metadata: PlayerTexturesMetadata): void {
|
|
this.mapTexturesMetadataIntoResources(metadata);
|
|
}
|
|
|
|
public getTexturesResources(key: PlayerTexturesKey): BodyResourceDescriptionListInterface {
|
|
switch (key) {
|
|
case PlayerTexturesKey.Accessory:
|
|
return this.ACCESSORIES_RESOURCES;
|
|
case PlayerTexturesKey.Body:
|
|
return this.COLOR_RESOURCES;
|
|
case PlayerTexturesKey.Clothes:
|
|
return this.CLOTHES_RESOURCES;
|
|
case PlayerTexturesKey.Eyes:
|
|
return this.EYES_RESOURCES;
|
|
case PlayerTexturesKey.Hair:
|
|
return this.HAIR_RESOURCES;
|
|
case PlayerTexturesKey.Hat:
|
|
return this.HATS_RESOURCES;
|
|
case PlayerTexturesKey.Woka:
|
|
return this.PLAYER_RESOURCES;
|
|
}
|
|
}
|
|
|
|
public getLayers(): BodyResourceDescriptionListInterface[] {
|
|
return this.LAYERS;
|
|
}
|
|
|
|
private mapTexturesMetadataIntoResources(metadata: PlayerTexturesMetadata): void {
|
|
this.PLAYER_RESOURCES = this.getMappedResources(metadata.woka);
|
|
this.COLOR_RESOURCES = this.getMappedResources(metadata.body);
|
|
this.EYES_RESOURCES = this.getMappedResources(metadata.eyes);
|
|
this.HAIR_RESOURCES = this.getMappedResources(metadata.hair);
|
|
this.CLOTHES_RESOURCES = this.getMappedResources(metadata.clothes);
|
|
this.HATS_RESOURCES = this.getMappedResources(metadata.hat);
|
|
this.ACCESSORIES_RESOURCES = this.getMappedResources(metadata.accessory);
|
|
|
|
this.LAYERS = [
|
|
this.COLOR_RESOURCES,
|
|
this.EYES_RESOURCES,
|
|
this.HAIR_RESOURCES,
|
|
this.CLOTHES_RESOURCES,
|
|
this.HATS_RESOURCES,
|
|
this.ACCESSORIES_RESOURCES,
|
|
];
|
|
}
|
|
|
|
private getMappedResources(category: PlayerTexturesCategory): BodyResourceDescriptionListInterface {
|
|
const resources: BodyResourceDescriptionListInterface = {};
|
|
if (!category) {
|
|
return {};
|
|
}
|
|
for (const collection of category.collections) {
|
|
for (const texture of collection.textures) {
|
|
resources[texture.id] = { id: texture.id, img: texture.url };
|
|
}
|
|
}
|
|
return resources;
|
|
}
|
|
}
|
|
|
|
export const OBJECTS: BodyResourceDescriptionInterface[] = [
|
|
{ id: "teleportation", img: "resources/objects/teleportation.png" },
|
|
];
|