@@ -8,14 +8,15 @@ import type { Laser as LaserType } from "../../types/laser";
88import type {
99 MessageCratesUpdate ,
1010 MessageDoorsAndButtonsUpdate ,
11- MessageLasersUpdate ,
1211 MessageGenerateLines ,
12+ MessageLasersUpdate ,
1313 MessageMapInfo ,
1414 MessageOnAddPlayer ,
1515 MessageOnRemovePlayer ,
1616 MessagePositionUpdate ,
1717} from "../../types/messages" ;
1818import type { Player as PlayerType } from "../../types/player" ;
19+ import { Capybara } from "../entities/capybara" ;
1920import { Crate } from "../entities/crate" ;
2021import { Player } from "../entities/player" ;
2122import { TILE_SIZE } from "../lib/const" ;
@@ -30,16 +31,19 @@ import { Button } from "../mechanics/button";
3031import { Cable } from "../mechanics/cable" ;
3132import { Door } from "../mechanics/door" ;
3233import { Laser } from "../mechanics/laser" ;
34+ import { Vent } from "../mechanics/vent" ;
3335import { SpeechBubble } from "../speech-bubbles/display-speech-bubble" ;
3436
3537export class Main extends Phaser . Scene {
3638 private room ! : Room ;
39+ private capybara : Capybara | null = null ;
3740 private players = new Map < string , Player > ( ) ;
3841 private crates = new Map < number , Crate > ( ) ;
3942 private buttons = new Map < string , Button > ( ) ;
4043 private doors = new Map < string , Door > ( ) ;
4144 private lasers = new Map < string , Laser > ( ) ;
4245 private cables = new Map < string , Cable > ( ) ;
46+ private vents = new Map < number , Vent > ( ) ;
4347 private speechBubbles = new Map < string , SpeechBubble > ( ) ;
4448 private bubbleTimer ! : Phaser . Time . TimerEvent ;
4549 private cursors ! : Phaser . Types . Input . Keyboard . CursorKeys ;
@@ -89,6 +93,13 @@ export class Main extends Phaser.Scene {
8993 "data/speech-bubble-data.json" ,
9094 ) ;
9195
96+ // vents
97+ this . load . image ( "vent-open" , "images/vent/vent-open.png" ) ;
98+ this . load . image ( "vent-closed" , "images/vent/vent-closed.png" ) ;
99+
100+ // capybara
101+ this . load . image ( "capybara" , "images/capybara/back_1.png" ) ;
102+
92103 // player textures
93104 for ( const [ index , textureKey ] of PLAYER_TEXTURE_KEYS . entries ( ) ) {
94105 this . load . spritesheet (
@@ -160,6 +171,16 @@ export class Main extends Phaser.Scene {
160171 ) ;
161172 this . cables . set ( cable . cableId , c ) ;
162173 }
174+
175+ if ( message . vents ) {
176+ for ( const vent of message . vents ) {
177+ this . addVent ( vent ) ;
178+ }
179+ }
180+
181+ if ( message . capybara ) {
182+ this . addCapybara ( message . capybara ) ;
183+ }
163184 } ) ;
164185
165186 room . onMessage ( "onAddPlayer" , ( message : MessageOnAddPlayer ) => {
@@ -230,6 +251,24 @@ export class Main extends Phaser.Scene {
230251 }
231252 } ,
232253 ) ;
254+ room . onMessage ( "line" , ( message : MessageGenerateLines ) => {
255+ const player = this . players . get ( message . sessionId ) ;
256+ if ( player !== undefined ) {
257+ this . displayBubble ( message . text , player , message . sessionId ) ;
258+ }
259+ } ) ;
260+
261+ room . onMessage (
262+ "capybaraUpdate" ,
263+ ( message : { x : number ; y : number ; state : string } ) => {
264+ if ( this . capybara ) {
265+ this . capybara . setPosition (
266+ message . x * TILE_SIZE + TILE_SIZE / 2 ,
267+ message . y * TILE_SIZE + TILE_SIZE / 2 ,
268+ ) ;
269+ }
270+ } ,
271+ ) ;
233272
234273 room . onMessage ( "line" , ( message : MessageGenerateLines ) => {
235274 const player = this . players . get ( message . sessionId ) ;
@@ -384,17 +423,30 @@ export class Main extends Phaser.Scene {
384423 this . doors . set ( doorInfo . doorId , door ) ;
385424 }
386425
387- private addCable ( cableInfo : CableType ) {
388- const cable = new Cable (
426+ private addVent ( ventInfo : {
427+ id : number ;
428+ x : number ;
429+ y : number ;
430+ open : boolean ;
431+ } ) {
432+ const vent = new Vent (
389433 this ,
390- cableInfo . x ,
391- cableInfo . y ,
392- cableInfo . cableId ,
393- cableInfo . color ,
394- cableInfo . pressed ,
434+ ventInfo . x ,
435+ ventInfo . y ,
436+ ventInfo . id ,
437+ ventInfo . open ,
395438 ) ;
396- this . add . existing ( cable ) ;
397- this . cables . set ( cableInfo . cableId , cable ) ;
439+ this . add . existing ( vent ) ;
440+ this . vents . set ( ventInfo . id , vent ) ;
441+ }
442+
443+ private addCapybara ( capybaraInfo : { x : number ; y : number } ) {
444+ if ( this . capybara ) {
445+ this . capybara . destroy ( ) ;
446+ }
447+
448+ this . capybara = new Capybara ( this , capybaraInfo . x , capybaraInfo . y ) ;
449+ this . add . existing ( this . capybara ) ;
398450 }
399451
400452 createMap ( grid : string [ ] [ ] , width : number , height : number ) {
0 commit comments