Skip to content

Commit a3f53b7

Browse files
committed
wip, allow painting with 3x3 grid when holding control on tilemap.
1 parent 8b03f4e commit a3f53b7

1 file changed

Lines changed: 40 additions & 13 deletions

File tree

editor/common/facades/tilemap.ts

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)