@@ -122,11 +122,16 @@ export class EditorFacadeTilemap extends BaseTilemap {
122122 if ( this . paletteId . length === 0 ) return ;
123123
124124 const isColorMode = this . atlas === "" ;
125+ const paletteCols = Math . max ( 1 , this . paletteCols | 0 ) ;
126+ const paletteRows = Math . max ( 1 , this . paletteRows | 0 ) ;
125127
126128 for ( let dy = 0 ; dy < rows ; dy ++ ) {
127129 for ( let dx = 0 ; dx < cols ; dx ++ ) {
128- const sy = rows - 1 - dy ;
129- const idx = sy * cols + dx ;
130+ // Tile the palette to fill the tooltip brush
131+ const paletteX = dx % paletteCols ;
132+ const paletteY = dy % paletteRows ;
133+ const sy = paletteRows - 1 - paletteY ;
134+ const idx = sy * paletteCols + paletteX ;
130135
131136 const tileId = this . paletteId [ idx ] ?? - 1 ;
132137 if ( tileId < 0 ) continue ;
@@ -166,7 +171,8 @@ export class EditorFacadeTilemap extends BaseTilemap {
166171 this . container . addChild ( this . #tooltip) ;
167172
168173 let paintOperations : ( UndoRedoOperation & { t : "modify-tilemap" } ) [ "ops" ] = [ ] ;
169- const paint = ( world : Vector2 ) => {
174+ let isControlHeld = false ; // Track Control key state for tooltip
175+ const paint = ( world : Vector2 , controlHeld = false ) => {
170176 if ( this . paletteId . length === 0 ) return ;
171177
172178 const left = this . inputs . getKey ( "MouseLeft" ) ;
@@ -177,15 +183,27 @@ export class EditorFacadeTilemap extends BaseTilemap {
177183 return ;
178184 }
179185
180- const cols = Math . max ( 1 , this . paletteCols | 0 ) ;
181- const rows = Math . max ( 1 , this . paletteRows | 0 ) ;
186+ const paletteCols = Math . max ( 1 , this . paletteCols | 0 ) ;
187+ const paletteRows = Math . max ( 1 , this . paletteRows | 0 ) ;
188+
189+ let cols = paletteCols ;
190+ let rows = paletteRows ;
191+
192+ // Override to 3x3 grid when Control is held
193+ if ( controlHeld ) {
194+ cols = 3 ;
195+ rows = 3 ;
196+ }
182197 const { x, y } = this . getTileCoordinatesAtPoint ( world ) ;
183198 const isColorMode = this . atlas === "" ;
184199
185200 for ( let dy = 0 ; dy < rows ; dy ++ ) {
186201 for ( let dx = 0 ; dx < cols ; dx ++ ) {
187- const sy = rows - 1 - dy ;
188- const idx = sy * cols + dx ;
202+ // When Control is held, tile the palette to fill the 3x3 brush
203+ const paletteX = dx % paletteCols ;
204+ const paletteY = dy % paletteRows ;
205+ const sy = paletteRows - 1 - paletteY ;
206+ const idx = sy * paletteCols + paletteX ;
189207 const tileId = this . paletteId [ idx ] ?? - 1 ;
190208 if ( tileId < 0 ) continue ;
191209
@@ -225,9 +243,10 @@ export class EditorFacadeTilemap extends BaseTilemap {
225243 }
226244 } ;
227245
228- this . listen ( this . game . inputs , MouseDown , ( { cursor } ) => {
246+ this . listen ( this . game . inputs , MouseDown , ( { cursor, ev } ) => {
229247 paintOperations = [ ] ;
230- paint ( cursor . world ) ;
248+ isControlHeld = ev . ctrlKey || ev . metaKey ;
249+ paint ( cursor . world , isControlHeld ) ;
231250 } ) ;
232251 this . listen ( this . game . inputs , MouseUp , ( ) => {
233252 if ( paintOperations . length > 0 ) {
@@ -239,8 +258,9 @@ export class EditorFacadeTilemap extends BaseTilemap {
239258 paintOperations = [ ] ;
240259 }
241260 } ) ;
242- this . listen ( this . game . inputs , MouseMove , ( { cursor } ) => {
243- paint ( cursor . world ) ;
261+ this . listen ( this . game . inputs , MouseMove , ( { cursor, ev } ) => {
262+ isControlHeld = ev . ctrlKey || ev . metaKey ;
263+ paint ( cursor . world , isControlHeld ) ;
244264 } ) ;
245265
246266 this . listen ( this . game , GameRender , ( ) => {
@@ -256,8 +276,15 @@ export class EditorFacadeTilemap extends BaseTilemap {
256276 const local = pointWorldToLocal ( this . globalTransform , world ) ;
257277 this . #tooltip. position . set ( Math . floor ( local . x + 0.5 ) , Math . floor ( - local . y + 0.5 ) ) ;
258278
259- const cols = Math . max ( 1 , this . paletteCols | 0 ) ;
260- const rows = Math . max ( 1 , this . paletteRows | 0 ) ;
279+ let cols = Math . max ( 1 , this . paletteCols | 0 ) ;
280+ let rows = Math . max ( 1 , this . paletteRows | 0 ) ;
281+
282+ // Show 3x3 tooltip when Control is held
283+ if ( isControlHeld ) {
284+ cols = 3 ;
285+ rows = 3 ;
286+ }
287+
261288 this . #buildTooltip( cols , rows ) ;
262289 } ) ;
263290 }
0 commit comments