Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | import {Sprite} from '@pixi/sprite'; import {Viewport} from 'pixi-viewport'; import { AvatarImageEnum, AvatarFaceEnum, avatarImageMDs, } from './metaData/ImageMetaData'; import {DisplayContainer} from './DisplayContainer'; import {AvatarData, DisplayContainerData} from './metaData/DataInterface'; import {ResourceManager} from './ResourceManager'; import {World} from './World'; const avatarMDs = require('./metaData/avatars.json'); export interface IAvatar { avatarImageEnum: AvatarImageEnum; avatarFace: AvatarFaceEnum; avatarFaceScale: number; faceTexture: string[]; partRotateDegree: number[]; viewport: Viewport; } export enum AvatarParts { LEFT_ARM, LEFT_LEG, BODY, RIGHT_ARM, RIGHT_LEG, FACE, } export const PARTS_ROTATE_SPEED = 2; export class Avatar extends DisplayContainer implements IAvatar { public avatarImageEnum: AvatarImageEnum; public avatarFace: AvatarFaceEnum; public avatarFaceScale: number; public faceTexture: string[]; public partRotateDegree: number[]; public viewport: Viewport; constructor(world: World, viewport: Viewport) { super(world); this.avatarImageEnum = AvatarImageEnum.BUNNY; this.avatarFace = AvatarFaceEnum.FACE_MUTE; this.avatarFaceScale = 1.0; this.partRotateDegree = Array.from({length: 6}, () => 0); this.position.copyFrom(world.startPosition); this.viewport = viewport; this.faceTexture = []; } public setAvatar(avatarImageEnum: AvatarImageEnum): void { this.avatarImageEnum = avatarImageEnum; this.changeAvatar(this.getAvatarMD()); } protected getAvatarMD(): AvatarData { const avatarName = this.getAvatarInitialName(); return avatarMDs[avatarName]; } private getAvatarInitialName(): string { return avatarImageMDs[this.avatarImageEnum].avatarInitialName; } public changeAvatar(data: DisplayContainerData): void { const newParts: Sprite[] = []; data.parts.forEach(part => { const sprite = this.makeSpriteFromPartsMD(part); if (sprite) newParts.push(sprite); }); const faceTexture = this.getAvatarMD().faceTexture; if (faceTexture) this.faceTexture = faceTexture; this.removeChildren(); this.parts = newParts; this.addPartsToChild(); if (data.collisionBox) this.addCollisionBox(data.collisionBox); } public swapFace(): void { const textureName = this.faceTexture[this.avatarFace]; const face = this.children[AvatarParts.FACE] as Sprite; const texture = ResourceManager.getTexture(textureName, 'avatars.json'); if (texture) face.texture = texture; } } |