Code edit (2 edits merged)
Please save this source code
User prompt
add a new text 'currentSelectionText' at the top of the board
Code edit (1 edits merged)
Please save this source code
User prompt
in applyCellOccupation() copy the reference the building at gameMap.cells[cellX][cellY] to adjacent cells depending on building cellW and cellH
Code edit (2 edits merged)
Please save this source code
User prompt
Currently building creation is done like that : gameMap.cells[rockIlot1Center.x][rockIlot1Center.y].building = new ConstructionYard(rockIlot1Center.x, rockIlot1Center.y, 1); How to make this 2x2 buliding occupy 2x2 cells ?
Code edit (4 edits merged)
Please save this source code
User prompt
but I'm a developper and I don't see the variable, here is the function: self.render = function () { // Move tiles instead of the view var viewSize = Math.ceil(Math.max(game.width, game.height) / 2 / 100); // Calculate viewSize based on game dimensions and tile size for (var x = self.currentViewCenter.x - viewSize - 1; x <= self.currentViewCenter.x + viewSize; x++) { for (var y = self.currentViewCenter.y - viewSize - 1; y <= self.currentViewCenter.y + viewSize; y++) { if (x >= 0 && x < self.cells.length && y >= 0 && y < self.cells[x].length) { var cell = self.cells[x][y]; var asset = cell.asset; var screenX = (x - self.currentViewCenter.x + viewSize) * asset.width; var screenY = (y - self.currentViewCenter.y + viewSize) * asset.height; asset.x = screenX; asset.y = screenY; if (!asset.parent) { self.addChild(asset); } // Render buildings var building = cell.building; if (building) { building.asset.x = screenX; building.asset.y = screenY; self.addChild(building.asset); } } else { if (asset && asset.parent) { self.removeChild(asset); } } } } };
Code edit (6 edits merged)
Please save this source code
User prompt
Bulding should occupy cellW cells horizontally and cellH cells vertically, so when user clicks on a 2x2 building it should select the buiding when he clicks at at (x,y) (x+1,y), (x,y+1) and (x+1,y+1)
User prompt
when drawing a building at x,y, x,y should be the top left corner
Code edit (1 edits merged)
Please save this source code
Code edit (4 edits merged)
Please save this source code
User prompt
in handleDragEnd add to cellX and cellY the offset due to currentViewCenter
Code edit (5 edits merged)
Please save this source code
User prompt
add cellW and cellH properties to buildings, constructionYard is 2x2
User prompt
add cellX and cellY propeties to buildings
Code edit (4 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of null (reading 'x')' in or related to this line: 'var deltaX = currentPos.x - dragStart.x;' Line Number: 280
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Timeout.tick error: Cannot read properties of null (reading 'playerId')' in or related to this line: 'return player1.playerId === id ? player1.tint : player2.tint;' Line Number: 205
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Uncaught ReferenceError: global is not defined' in or related to this line: 'global.updateActionBoard = function () {' Line Number: 284
User prompt
Add a global function to handle the action board update
Code edit (1 edits merged)
Please save this source code
===================================================================
--- original.js
+++ change.js
@@ -115,20 +115,8 @@
self.load = function (data) {
// Load map data from a file
};
});
-// Command Panel class
-var CommandPanel = Container.expand(function () {
- var self = Container.call(this);
- self.graphics = self.attachAsset('boardBackground', {
- width: game.width,
- height: game.height * 0.22,
- color: 0x333333
- });
- // Set the center box position to the center of the screen
- self.x = game.width / 2 - self.graphics.width / 2;
- self.y = game.height - self.height + game.height * 0.01;
-});
var Sand = Container.expand(function (x, y) {
var self = Container.call(this);
self.asset = LK.getAsset('sand', {
x: x * 100,
@@ -179,8 +167,20 @@
// Initialize player-specific properties here
// ...
return self;
});
+// Command Panel class
+var CommandPanel = Container.expand(function () {
+ var self = Container.call(this);
+ self.graphics = self.attachAsset('boardBackground', {
+ width: game.width,
+ height: game.height * 0.22,
+ color: 0x333333
+ });
+ // Set the center box position to the center of the screen
+ self.x = game.width / 2 - self.graphics.width / 2;
+ self.y = game.height - self.height + game.height * 0.01;
+});
/****
* Initialize Game
****/
@@ -192,62 +192,62 @@
/****
* Game Code
****/
-var currentSelection = null;
var getPlayerTint = function getPlayerTint(id) {
return player1.playerId === id ? player1.tint : player2.tint;
};
-var player1 = new Player(1, 0xAAAAff);
-var player2 = new Player(2, 0xffAAAA);
-// Initialize assets used in this game.
-// Event listeners
-// Event listeners
-// Instantiate and initialize the Map
+var gameIsRunning = false;
var mapXSize = 50;
var mapYSize = 30;
-// Prepare the terrain
-var globalTerrain = new Array(mapXSize).fill(0).map(function () {
- return new Array(mapYSize).fill(0);
-});
-var gameMap = new Map();
-gameMap.init(mapXSize, mapYSize); // Initialize with a 20x20 grid
-// Define a fixed rock ilot near the center left of the map
-var rockIlot1Center = {
- x: Math.floor(mapXSize * 0.15),
- y: Math.floor(mapYSize * 0.5)
-};
-var rockIlot1Radius = 4;
-for (var x = rockIlot1Center.x - rockIlot1Radius; x <= rockIlot1Center.x + rockIlot1Radius; x++) {
- for (var y = rockIlot1Center.y - rockIlot1Radius; y <= rockIlot1Center.y + rockIlot1Radius; y++) {
- if (x >= 0 && x < mapXSize && y >= 0 && y < mapYSize) {
- globalTerrain[x][y] = 1;
+var gameMap = null;
+var globalTerrain = null;
+var player1 = null;
+var player2 = null;
+var currentSelection = null;
+// Prepare the map
+function prepareMap() {
+ globalTerrain = new Array(mapXSize).fill(0).map(function () {
+ return new Array(mapYSize).fill(0);
+ });
+ gameMap = new Map();
+ gameMap.init(mapXSize, mapYSize); // Initialize with a 20x20 grid
+ // Define a fixed rock ilot near the center left of the map
+ var rockIlot1Center = {
+ x: Math.floor(mapXSize * 0.15),
+ y: Math.floor(mapYSize * 0.5)
+ };
+ var rockIlot1Radius = 4;
+ for (var x = rockIlot1Center.x - rockIlot1Radius; x <= rockIlot1Center.x + rockIlot1Radius; x++) {
+ for (var y = rockIlot1Center.y - rockIlot1Radius; y <= rockIlot1Center.y + rockIlot1Radius; y++) {
+ if (x >= 0 && x < mapXSize && y >= 0 && y < mapYSize) {
+ globalTerrain[x][y] = 1;
+ }
}
}
-}
-console.log("rockIlot2Center at " + rockIlot1Center.x + ',' + rockIlot1Center.y);
-gameMap.cells[rockIlot1Center.x][rockIlot1Center.y].building = new ConstructionYard(rockIlot1Center.x, rockIlot1Center.y, 1);
-// Define a fixed rock ilot near the center right of the map
-var rockIlot2Center = {
- x: Math.floor(mapXSize * 0.85),
- y: Math.floor(mapYSize * 0.5)
-};
-var rockIlot2Radius = 4;
-for (var x = rockIlot2Center.x - rockIlot2Radius; x <= rockIlot2Center.x + rockIlot2Radius; x++) {
- for (var y = rockIlot2Center.y - rockIlot2Radius; y <= rockIlot2Center.y + rockIlot2Radius; y++) {
- if (x >= 0 && x < mapXSize && y >= 0 && y < mapYSize) {
- globalTerrain[x][y] = 1;
+ console.log("rockIlot2Center at " + rockIlot1Center.x + ',' + rockIlot1Center.y);
+ gameMap.cells[rockIlot1Center.x][rockIlot1Center.y].building = new ConstructionYard(rockIlot1Center.x, rockIlot1Center.y, 1);
+ // Define a fixed rock ilot near the center right of the map
+ var rockIlot2Center = {
+ x: Math.floor(mapXSize * 0.85),
+ y: Math.floor(mapYSize * 0.5)
+ };
+ var rockIlot2Radius = 4;
+ for (var x = rockIlot2Center.x - rockIlot2Radius; x <= rockIlot2Center.x + rockIlot2Radius; x++) {
+ for (var y = rockIlot2Center.y - rockIlot2Radius; y <= rockIlot2Center.y + rockIlot2Radius; y++) {
+ if (x >= 0 && x < mapXSize && y >= 0 && y < mapYSize) {
+ globalTerrain[x][y] = 1;
+ }
}
}
+ console.log("rockIlot2Center at " + rockIlot2Center.x + ',' + rockIlot2Center.y);
+ gameMap.cells[rockIlot2Center.x][rockIlot2Center.y].building = new ConstructionYard(rockIlot2Center.x, rockIlot2Center.y, 2);
+ console.log('ConstructionYard cell :', gameMap.cells[rockIlot2Center.x][rockIlot2Center.y]);
+ gameMap.initTerrain(mapXSize, mapYSize); // Initialize with a 20x20 grid
+ // Add the map to the game
+ game.addChild(gameMap);
}
-console.log("rockIlot2Center at " + rockIlot2Center.x + ',' + rockIlot2Center.y);
-gameMap.cells[rockIlot2Center.x][rockIlot2Center.y].building = new ConstructionYard(rockIlot2Center.x, rockIlot2Center.y, 2);
-console.log('ConstructionYard cell :', gameMap.cells[rockIlot2Center.x][rockIlot2Center.y]);
-gameMap.initTerrain(mapXSize, mapYSize); // Initialize with a 20x20 grid
-// Add the map to the game
-// This should be done after the map is fully initialized and ready to render
-game.addChild(gameMap);
-var isPressing = false;
+//#region Event listeners
var dragStart = null;
function handleDragStart(obj) {
dragStart = obj.event.getLocalPosition(game);
}
@@ -269,25 +269,39 @@
}
game.on('down', handleDragStart);
game.on('move', handleDragMove);
game.on('up', handleDragEnd);
+//#endregion Event listeners
// Instantiate CommandPanel
var commandPanel = game.addChild(new CommandPanel());
// Global function to handle action board updates
var updateActionBoard = function updateActionBoard() {
// Update logic for the action board
// This function can be called whenever the action board needs to be updated
};
-// Create a Text2 object to display player1's spice level
-var player1SpiceText = new Text2(player1.spice.toString(), {
- size: 50,
- fill: '#000000',
- font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
-});
-player1SpiceText.anchor.set(1.0, 0);
-// Add the spice level text to the GUI overlay
-LK.gui.topRight.addChild(player1SpiceText);
+function initGame() {
+ prepareMap();
+ // prepare players
+ player1 = new Player(1, 0xAAAAff);
+ player2 = new Player(2, 0xffAAAA);
+ // Create a Text2 object to display player1's spice level
+ var player1SpiceText = new Text2(player1.spice.toString(), {
+ size: 50,
+ fill: '#000000',
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
+ });
+ player1SpiceText.anchor.set(1.0, 0);
+ // Add the spice level text to the GUI overlay
+ LK.gui.topRight.addChild(player1SpiceText);
+ gameIsRunning = true;
+}
// Game tick
LK.on('tick', function () {
// Render the map each tick
- gameMap.render();
-});
\ No newline at end of file
+ if (gameIsRunning) {
+ gameMap.render();
+ }
+});
+// Start the game
+LK.setTimeout(function () {
+ initGame();
+}, 1000);
\ No newline at end of file
a tileable sand terrain tile.
A square tileable rock terrain tile WITHOUT BBORDER. Single Game Texture. In-Game asset. 2d. No shadows. No Border
Zenith view of Dune's Wind Trap power facility square fence. Ressembles a bit to Sydney's Opera. Zenith view Directly from above.
grey cancel icon. UI
thin white circle empty.
0x5e86ff
Zenith view of a white rectangular Harvester shape of a garbage truck with a triangular head. Harvesting on sand, with flowing spice in the back. inside a square fence. Zenith view. Directly overhead. Plumb view.
Minimal Ui icon of an right sign aside with an icon of a target. sand background
Minimal icon of a home with direction icon pointing to the home. sand background
3 white flat isometric concentric circles like a target.
Remove background
Gray background
Minimal Ui icon of target sign on a fire icon.. sand background
top view of an explosion effect.
Simple heavy army tank factory buiding a tank with a crane. Square fence... Zenith view Directly overhead. Plumb view.
an empty black popup UI. UI