Code edit (1 edits merged)
Please save this source code
Code edit (11 edits merged)
Please save this source code
User prompt
in gamePlayingDown when "// Make the athlete run" animate the button width and height to simulate a button press
Code edit (1 edits merged)
Please save this source code
Code edit (13 edits merged)
Please save this source code
User prompt
add a 'down' handler for runbutton
Code edit (1 edits merged)
Please save this source code
User prompt
I didn't say to remove the previous button!
User prompt
in initMenuState, add two semi-transparent runButtons in the upper half of the screen
Code edit (20 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: difficulty is not defined' in or related to this line: 'self.nextHurdleSpeedX = -1 * Math.min(0, 2 - difficulty) + (-5 + 10 * Math.random() * (1 + 0.5 * (difficulty - 1))); // Level n' Line Number: 216
Code edit (1 edits merged)
Please save this source code
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: bonusGraphics is not defined' in or related to this line: 'bonusGraphics.visible = false;' Line Number: 502
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: BonusManager is not defined' in or related to this line: 'bonusManager = new BonusManager();' Line Number: 1041
Code edit (4 edits merged)
Please save this source code
User prompt
add a new class Bonus
Code edit (10 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: drone is undefined' in or related to this line: 'drone._update_migrated();' Line Number: 1076
Code edit (2 edits merged)
Please save this source code
User prompt
in DeliveryDrone class, add a bonus1 asset to the class and make it pop from the box when on ground
User prompt
in DeliveryDrone class, add an asset for the bonus that pops up from the box when on ground
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
===================================================================
--- original.js
+++ change.js
@@ -177,12 +177,14 @@
// Reached the ground
self.isOnGround = true;
self.speedY = 0;
self.y = linesGroundLevels[self.lineIndex];
- // Define speed for next hurdle
- self.nextHurdleSpeedX = -1 + (-5 + 10 * Math.random()); //(1 - difficultyLevel) * 4 + difficultyLevel * 2 * Math.random();
+ // Define speed for next hurdle => Defines the Difficulty
+ self.nextHurdleSpeedX = -1 + (-5 + 10 * Math.random()); // Level 1/3
+ self.nextHurdleSpeedX = 0 + (-5 + 15 * Math.random()); // Level 2/3
+ //(1 - difficultyLevel) * 4 + difficultyLevel * 2 * Math.random();
if (obstacles[self.lineIndex].length <= 3 && self.x > athlete.x) {
- self.nextHurdleSpeedX = -1 - 1 * Math.abs(self.nextHurdleSpeedX);
+ //self.nextHurdleSpeedX = -1 - 1 * Math.abs(self.nextHurdleSpeedX); Level 1/3
}
} else {
self.jumpAnim();
}
@@ -276,23 +278,24 @@
}
self.updatePosture();
};
self.jump = function () {
- if (!self.isAI && self.justTookBonus) {
- self.nbJumps++;
- if (self.nbJumps > 3) {
- log("JUMPS FINISHED " + self.nbJumps);
- self.justTookBonus = false;
- self.jumpSpeed = self.jumpSpeedDefault;
- self.speedBeforeBonus = 0;
- globalSpeedPerLine[self.lineIndex] = globalBaseSpeed;
- self.nbJumps = 0;
- bonusManager.endBonus();
- }
- }
if (self.isAI || Date.now() - self.lastJumpTime > self.interJumpDelayMs) {
if (self.isOnGround) {
self.isOnGround = false;
+ // Handle jump bonus
+ if (!self.isAI && self.justTookBonus) {
+ self.nbJumps++;
+ if (self.nbJumps > 3) {
+ log("JUMPS FINISHED " + self.nbJumps);
+ self.justTookBonus = false;
+ self.jumpSpeed = self.jumpSpeedDefault;
+ self.speedBeforeBonus = 0;
+ self.nbJumps = 0;
+ globalSpeedPerLine[self.lineIndex] = globalBaseSpeed;
+ bonusManager.endBonus();
+ }
+ }
self.speedY = self.jumpSpeed;
self.lastJumpTime = Date.now();
//globalSpeedPerLine[self.lineIndex] = globalSpeedPerLine[self.lineIndex] * 1.1;
if (self.lineIndex == 1) {
@@ -419,12 +422,12 @@
self.isFalling = false;
self.isOnGround = true;
};
self.useBonus = function () {
+ log("Player useBonus...", self.justTookBonus);
if (self.justTookBonus) {
return;
}
- log("Adjusted jumpSpeed for bonus effect");
self.justTookBonus = true;
self.jumpSpeed = self.jumpSpeedBonus; // Adjust jumpSpeed for bonus
};
});
@@ -449,53 +452,48 @@
/********************************** BONUS CLASS ********************************** */
/****************************************************************************************** */
var BonusManager = Container.expand(function () {
var self = Container.call(this);
+ self.isUsed = false;
// Bonus asset
self.bonusGraphics = self.attachAsset('bonus1', {
anchorX: 0.5,
anchorY: 0.5,
x: 100,
y: game.height / 2,
alpha: 0.8,
- visible: false
+ visible: true
});
// Update method for animations or effects over time
self._update_migrated = function () {};
self.useBonus = function () {
+ log("BonusManager useBonus...");
+ if (self.isUsed) {
+ log("Alredy used ...");
+ return;
+ }
+ self.isUsed = true;
drone.useBonus();
athlete.useBonus();
self.bonusGraphics.visible = true;
};
self.endBonus = function () {
+ log("BonusManager endBonus...");
self.bonusGraphics.visible = false;
+ self.isUsed = false;
};
});
/****************************************************************************************** */
/************************************** DRONE CLASS ************************************ */
/****************************************************************************************** */
-/*var Drone = Container.expand(function (isEven) {
- var self = Container.call(this);
- self.droneGraphics = self.attachAsset(isEven ? 'drone2' : 'drone', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.speedX = 0;
- self._update_migrated = function () {
- self.x += self.speedX;
- // Reverse direction at screen edges
- if (self.x > 2048 || self.x < 0) {
- self.speedX *= -1;
- }
- };
-});
-*/
var DeliveryDrone = Container.expand(function () {
var self = Container.call(this);
self.speedX = 0;
self.packetSpeed = 0;
self.entered = false;
self.enterTime = 0;
+ self.packetDropped = false;
+ self.packetFalling = false;
self.movePacket = false;
self.droneLeaving = false;
// Create layers for packets and drones
self.packetLayer = new Container();
@@ -510,9 +508,10 @@
self.bonus = self.packetLayer.attachAsset('bonus1', {
anchorX: 0.5,
anchorY: 0.5,
y: 75,
- visible: false
+ visible: false,
+ isUsed: false
});
self.drone1 = self.droneLayer.attachAsset('drone', {
anchorX: 0.5,
anchorY: 0.5
@@ -522,16 +521,23 @@
anchorY: 0.5
});
self.drone1.visible = true; // Visibility based on isEven flag
self.drone2.visible = false; // Visibility based on isEven flag
- // Down works on last layer only
- self.droneLayer.down = function (x, y, obj) {
- if (!self.packetFalling) {
- // Make packet1 fall to the ground
+ self.dropPacket = function () {
+ if (!self.packetDropped) {
+ // Make packet fall to the ground
+ self.packetDropped = true;
self.packetFalling = true;
log("THROW PACKET! self.packet.y < groundLevel : " + self.packet.y + " < " + groundLevel);
}
};
+ self.packetLayer.down = function (x, y, obj) {
+ self.dropPacket();
+ };
+ // Down works on last layer only ?
+ self.droneLayer.down = function (x, y, obj) {
+ self.dropPacket();
+ };
self._update_migrated = function () {
self.x += self.speedX;
// Reverse direction at screen edges
if (self.x < 2048 - 300) {
@@ -553,25 +559,25 @@
if (self.packet.y >= groundLevel - self.packet.height / 2) {
self.packet.y = groundLevel - self.packet.height / 2;
game.removeChild(self.packet);
self.packet.destroy();
+ // Open the packet
self.packet = self.packetLayer.attachAsset('packet2', {
anchorX: 0.5,
anchorY: 0.5,
y: groundLevel - self.packet.height / 2
});
- self.bonus = self.packetLayer.attachAsset('bonus1', {
- anchorX: 0.5,
- anchorY: 0.5,
- y: 75 // Initially set to the same position as the packet
- });
self.packetFalling = false;
self.movePacket = true;
self.droneLeaving = true;
- //self.speedX = 5; // TEMP DEBUG
// Show the bonus
- self.bonus.y = groundLevel - self.packet.height * 1.5;
- self.bonus.visible = true;
+ self.bonus = self.packetLayer.attachAsset('bonus1', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ visible: true,
+ y: groundLevel - self.packet.height * 1.5,
+ isUsed: false
+ });
}
}
self.packetLayer.x = self.x;
self.packetLayer.y = self.y;
@@ -580,8 +586,23 @@
if (self.movePacket && self.x + self.packet.x > -512 && athlete.isRunning) {
self.packet.x += globalSpeedPerLine[0];
self.bonus.x += globalSpeedPerLine[0];
}
+ if (self.droneLeaving) {
+ if (self.drone1.x < 2048 + 512) {
+ self.drone1.x += 5;
+ self.drone2.x += 5;
+ if (!self.packetDropped) {
+ self.packet.x += 5;
+ self.bonus.x += 5;
+ }
+ } else {
+ self.droneLeaving = false;
+ }
+ }
+ if (self.entered && Date.now() - self.enterTime > droneStaySeconds * 1000) {
+ self.droneLeaving = true;
+ }
};
self.prepare = function () {
self.x = 2048 + 300;
self.y = 128;
@@ -598,15 +619,19 @@
self.enter = function () {
if (!self.entered) {
self.visible = true;
self.speedX = -4;
- self.entered = true;
self.enterTime = Date.now();
+ self.entered = true;
}
};
self.useBonus = function () {
- if (self.bonus && self.bonus.visible) {
+ log("Drone useBonus...");
+ if (self.bonus && !self.bonus.isUsed) {
+ self.bonus.isUsed = true;
self.bonus.visible = false;
+ game.removeChild(self.bonus);
+ self.bonus.destroy();
}
};
});
/****************************************************************************************** */
@@ -800,8 +825,10 @@
var drone;
var bonusManager;
var currentFinishPosition = 1;
var difficultyLevel = 1;
+var droneEnrtyObstacleNumber = 5;
+var droneStaySeconds = 3;
var globalBaseSpeed = -20 - 10 * difficultyLevel;
var globalSpeedPerLine = []; // Global speed for tracks and obstacles default -10 / min = -4
var raceFinishTime = 0;
var colorsArray = [0x1188FF, 0xFF0000, 0x00FF00, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF, 0xFF8811];
@@ -1005,9 +1032,9 @@
y: groundLevel + 400 - 215 * i
});
game.addChild(trackLine);
}
- bonusManager = new BonusManager();
+ bonusManager = game.addChild(new BonusManager());
gameState = GAME_STATE.MENU;
initMenuState();
if (isDebug) {
// Debug Marker
@@ -1271,14 +1298,16 @@
finishLine.x = 2048 * obstacleSpawnDistanceRate * (numberOfObstacles + 1) + 1024; // Start from the right edge
finishLine.y = groundLevel + 200;
game.addChild(finishLine);
// Spawn Blockers
+ /*
for (var line = 1; line < numberOfLines; line++) {
- if (line == 3) {
- blockers[line] = new Blocker(startX + 2048, linesGroundLevels[1] - 675); // TODO : Fic index 1
- game.addChild(blockers[line]);
- }
+ if (line == 3) {
+ blockers[line] = new Blocker(startX + 2048, linesGroundLevels[1] - 675); // TODO : Fic index 1
+ game.addChild(blockers[line]);
}
+ }
+ */
}
function updateObstacles() {
// Update obstacles
for (var line = 0; line < numberOfLines; line++) {
@@ -1377,9 +1406,9 @@
globalSpeedPerLine[line] = 0;
}
}
}
- if (numberOfObstacles - obstacles[0].length > 1) {
+ if (drone && !drone.entered && numberOfObstacles - obstacles[0].length > droneEnrtyObstacleNumber) {
drone.enter();
}
}
function checkForCollisions() {
@@ -1431,10 +1460,11 @@
finishLine.cut();
}
}
// Take Bonus
- if (drone && athlete.trunk.intersects(drone.bonus)) {
- bonusManager.endBonus();
+ if (drone && drone.bonus && !drone.bonus.isUsed && athlete.trunk.intersects(drone.bonus)) {
+ log("bonusManager useBonus...");
+ bonusManager.useBonus();
}
}
function handleFallEvent() {
if (athlete.isFalling && !athlete.hasFlashed) {
Elongated elipse with black top half and white bottom half.
full close and front view of empty stands. retro gaming style
delete
delete
Basquettes à ressort futuriste. vue de profile. Retro gaming style
a blue iron man style armor flying. Retro gaming style
a blue iron man style armor flying horizontally. Retro gaming style
round button with a big "up" arrow icon and a small line under it. UI
A big black horizontal arrow pointing left with centred text 'YOU' in capital letters, painted on an orange floor.. horizontal and pointing left
remove
gold athletics medal with ribbon. retro gaming style
a black oval with a crying smiley face.