@@ -2,12 +2,13 @@ import { type Container, Sprite, type Ticker } from "pixi.js";
22import { type Writable , get } from "svelte/store" ;
33import { Block , BlockDefinitionMap } from "./constants.ts" ;
44import * as consts from "./constants.ts" ;
5- import { assert , warnIf } from "./lib.ts" ;
5+ import { assert } from "./lib.ts" ;
66import type { Context , GameConfig , GameState , MovableObject } from "./public-types.ts" ;
77import {
88 fallableTexture ,
99 goalTexture ,
1010 rockTexture ,
11+ spikeTexture ,
1112 switchBaseTexture ,
1213 switchPressedTexture ,
1314 switchTexture ,
@@ -27,49 +28,20 @@ type VirtualSpriteCell = {
2728type VirtualSOM = ( VirtualSpriteCell | null ) [ ] [ ] ;
2829export type GridCell =
2930 | {
30- block : Block . block ;
31+ // blocks that don't have switchId
32+ block : null | Block . block | Block . switchBase | Block . goal | Block . spike ;
3133 objectId ?: unknown ;
3234 }
3335 | {
34- block : Block . movable ;
35- objectId : string ;
36- switchId : string | undefined ;
37- }
38- | {
39- block : Block . fallable ;
36+ // movable blocks (can be placed on top of switch)
37+ block : Block . movable | Block . fallable ;
4038 objectId : string ;
4139 switchId : string | undefined ; // switchの上に置かれている場合
4240 }
4341 | {
44- block : null ; // air
45- objectId ?: unknown ;
46- }
47- | {
48- block : Block . switch ;
49- switchId ?: string ;
50- objectId ?: unknown ;
51- }
52- | {
53- block : Block . switchBase ;
54- objectId ?: unknown ;
55- }
56- | {
57- block : Block . switchingBlockOFF ;
58- switchId ?: string ;
59- objectId ?: unknown ;
60- }
61- | {
62- block : Block . switchingBlockON ;
63- switchId ?: string ;
64- objectId ?: unknown ;
65- }
66- | {
67- block : Block . switchPressed ;
68- switchId ?: string ;
69- objectId ?: unknown ;
70- }
71- | {
72- block : Block . goal ;
42+ // switches / triggerable blocks
43+ block : Block . switch | Block . switchingBlockOFF | Block . switchingBlockON | Block . switchPressed ;
44+ switchId ?: string ; // optional でいいの?
7345 objectId ?: unknown ;
7446 } ;
7547
@@ -102,19 +74,12 @@ export class Grid {
10274 case null : // air
10375 vspriteRow . push ( null ) ;
10476 break ;
105- case Block . movable : {
106- const sprite = createSprite ( cellSize , dblock , x , y , this . marginY ) ;
107- stage . addChild ( sprite ) ;
108- vspriteRow . push ( { sprite, block : dblock , dy : 0 , vy : 0 } ) ;
109- break ;
110- }
111- case Block . fallable : {
112- const sprite = createSprite ( cellSize , dblock , x , y , this . marginY ) ;
113- stage . addChild ( sprite ) ;
114- vspriteRow . push ( { sprite, block : dblock , dy : 0 , vy : 0 } ) ;
115- break ;
116- }
117- case Block . block : {
77+ case Block . block :
78+ case Block . movable :
79+ case Block . spike :
80+ case Block . fallable :
81+ case Block . goal :
82+ case Block . switchBase : {
11883 const sprite = createSprite ( cellSize , dblock , x , y , this . marginY ) ;
11984 stage . addChild ( sprite ) ;
12085 vspriteRow . push ( { sprite, block : dblock , dy : 0 , vy : 0 } ) ;
@@ -139,12 +104,6 @@ export class Grid {
139104 } ) ;
140105 break ;
141106 }
142- case Block . switchBase : {
143- const sprite = createSprite ( cellSize , dblock , x , y , this . marginY ) ;
144- stage . addChild ( sprite ) ;
145- vspriteRow . push ( { sprite, block : dblock , dy : 0 , vy : 0 } ) ;
146- break ;
147- }
148107 case Block . switchingBlockOFF : {
149108 const switchId = (
150109 get ( cx . state ) . cells [ y ] [ x ] as {
@@ -167,15 +126,9 @@ export class Grid {
167126 } ) ;
168127 break ;
169128 }
170- case Block . goal : {
171- const sprite = createSprite ( cellSize , dblock , x , y , this . marginY ) ;
172- stage . addChild ( sprite ) ;
173- vspriteRow . push ( { sprite, block : dblock , dy : 0 , vy : 0 } ) ;
174- break ;
175- }
176129 case Block . switchingBlockON :
177130 case Block . switchPressed :
178- throw new Error ( `createCellsFromStageDefinition : block is not supported: ${ dblock } ` ) ;
131+ throw new Error ( `[Grid.constructor] : block is not supported: ${ dblock } ` ) ;
179132 default :
180133 dblock satisfies never ;
181134 }
@@ -204,6 +157,7 @@ export class Grid {
204157 }
205158 }
206159 }
160+
207161 /**
208162 it uses object equality internally, therefore
209163 - object should be equal if they are the same.
@@ -631,6 +585,7 @@ export function createCellsFromStageDefinition(stageDefinition: StageDefinition)
631585 case Block . block :
632586 case null :
633587 case Block . switchBase :
588+ case Block . spike :
634589 case Block . goal : {
635590 const cell : GridCell = {
636591 block,
@@ -753,6 +708,11 @@ function createSprite(
753708 updateSprite ( sprite , blockSize , x , y , marginY , 0 ) ;
754709 return sprite ;
755710 }
711+ case Block . spike : {
712+ const sprite = new Sprite ( spikeTexture ) ;
713+ updateSprite ( sprite , blockSize , x , y , marginY , 0 ) ;
714+ return sprite ;
715+ }
756716 default :
757717 block satisfies never ;
758718 throw new Error ( "unreachable" ) ;
@@ -765,6 +725,7 @@ function updateSprite(sprite: Sprite, blockSize: number, x: number, y: number, m
765725 sprite . y = y * blockSize + marginY + dy ;
766726}
767727
728+ //ToDo: 現在の仕様では、Escメニュー表示状態でも動き続ける。
768729export function createTutorialSprite ( cx : { _stage_container : Container } , order : number ) {
769730 let sprite = new Sprite ( tutorialImg1 ) ;
770731 switch ( order ) {
@@ -781,43 +742,11 @@ export function createTutorialSprite(cx: { _stage_container: Container }, order:
781742 sprite . y = 100 ;
782743 cx . _stage_container . addChild ( sprite ) ;
783744}
784- //ToDo: 現在の仕様では、Escメニュー表示状態でも動き続ける。
785745
786746export function printCells ( cells : GridCell [ ] [ ] , context ?: string ) {
787747 console . log (
788748 `${ context ? context : "Grid" } :
789- ${ cells
790- . map ( ( row ) =>
791- row
792- . map ( ( cell ) => {
793- switch ( cell . block ) {
794- case null :
795- return "." ;
796- case Block . block :
797- return "b" ;
798- case Block . movable :
799- return cell . switchId !== undefined ? "M" : "m" ;
800- case Block . fallable :
801- return cell . switchId !== undefined ? "F" : "f" ;
802- case Block . switch :
803- return "s" ;
804- case Block . switchBase :
805- return "S" ;
806- case Block . switchingBlockOFF :
807- return "w" ;
808- case Block . switchingBlockON :
809- return "w" ;
810- case Block . switchPressed :
811- return "s" ;
812- case Block . goal :
813- return "g" ;
814- default :
815- cell satisfies never ;
816- }
817- } )
818- . join ( "" ) ,
819- )
820- . join ( "\n" ) } `,
749+ ${ cells . map ( ( row ) => row . map ( ( cell ) => consts . ReverseBlockMap . get ( cell . block ) ) . join ( "" ) ) . join ( "\n" ) } ` ,
821750 ) ;
822751}
823752
0 commit comments