Code edit (5 edits merged)
Please save this source code
User prompt
convert the winningMessage into a WinningMessage class
Code edit (1 edits merged)
Please save this source code
User prompt
After setting the winningTime display a BorderedText message at the bottom of the screen that says: "Congratulations, you win!\nYou reached the gold planet in: " + winningTime
Code edit (1 edits merged)
Please save this source code
User prompt
After setting the winningTick, convert the winningTick into hours, minutes and seconds
Code edit (3 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: button is not defined' in this line: 'button[0].addChild(crosshair);' Line Number: 304
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: PLANET_RADIUS_GOLD is not defined' in this line: 'var self = Planet.call(this, x, y, PLANET_RADIUS_GOLD, 'planetGold');' Line Number: 221
User prompt
Add a new PlanetGold class that has a cost of 3000 after the PlanetOmni class
Code edit (4 edits merged)
Please save this source code
User prompt
When calling transitionPlanets flash the screen black
Code edit (12 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: NAVIGATION[currentPlanet] is not a constructor' in this line: 'planet = planets[currentPlanet] = new NAVIGATION[currentPlanet](GAME_WIDTH / 2, GAME_HEIGHT / 2);' Line Number: 416
Code edit (1 edits merged)
Please save this source code
Code edit (4 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: crosshair.update is not a function' in this line: 'crosshair.update();' Line Number: 377
Code edit (2 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: navigation.setCurrent is not a function' in this line: 'navigation.setCurrent(currentPlanet);' Line Number: 359
User prompt
Fix Bug: 'ReferenceError: centerX is not defined' in this line: 'arrows[i].x = centerX + arrowOffsets[i].x * distance;' Line Number: 225
Code edit (6 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: moneyDisplay is undefined' in this line: 'moneyDisplay.setAmount(money -= button.cost);' Line Number: 275
Code edit (2 edits merged)
Please save this source code
User prompt
add a new CurrencyText in the top-center of the screen, with the settings of: {x:20, y: 100, anchor:{x:0}}, displaying the money variable
/****
* Classes
****/
var BorderedText = Container.expand(function (string, settings) {
var self = Container.call(this);
settings = settings || {};
var textList = [];
var borderSettings = {
fill: settings.border || TEXT_DEFAULT_BORDER,
font: settings.font || TEXT_DEFAULT_FONT,
size: settings.size || TEXT_DEFAULT_SIZE
};
var textSettings = {
fill: settings.fill || TEXT_DEFAULT_FILL,
font: settings.font || TEXT_DEFAULT_FONT,
size: settings.size || TEXT_DEFAULT_SIZE
};
for (var i = 0; i < TEXT_OFFSETS.length; i++) {
var localSettings = i === TEXT_OFFSETS.length - 1 ? textSettings : borderSettings;
var text = self.addChild(new Text2(string, localSettings));
text.x += TEXT_OFFSETS[i][0] * TEXT_BORDER_WEIGHT;
text.y += TEXT_OFFSETS[i][1] * TEXT_BORDER_WEIGHT;
if (settings.anchor) {
text.anchor.set(settings.anchor.x || 0, settings.anchor.y || 0);
}
textList.push(text);
}
;
self.x = settings.x;
self.y = settings.y;
self.setText = setText;
self.setFill = setFill;
;
function setText(string) {
for (var i = 0; i < textList.length; i++) {
textList[i].setText(string);
}
}
function setFill(newFill) {
textList[textList.length - 1].fill = newFill;
}
});
var CurrencySymbol = Container.expand(function (settings) {
var self = Container.call(this);
settings = settings || {};
var mainSymbol;
var anchor = settings.anchor || {
x: .5,
y: .5
};
var anchorX = anchor.x !== undefined ? anchor.x : .5;
var anchorY = anchor.y !== undefined ? anchor.y : .5;
var borderSettings = {
fill: 0x000000,
// fill: settings.border || TEXT_DEFAULT_BORDER,
size: settings.size || TEXT_DEFAULT_SIZE
};
var symbolSettings = {
fill: 0xFFFFFF,
// fill: settings.fill || TEXT_DEFAULT_FILL,
size: settings.size || TEXT_DEFAULT_SIZE
};
for (var i = 0; i < TEXT_OFFSETS.length; i++) {
var localSettings = i === TEXT_OFFSETS.length - 1 ? symbolSettings : borderSettings;
var symbol = self.createAsset('currencySymbol', 'Currency symbol asset', anchorX, anchorY);
symbol.tint = localSettings.fill;
symbol.scale.set(localSettings.size / 100);
symbol.x += TEXT_OFFSETS[i][0] * TEXT_BORDER_WEIGHT;
symbol.y += TEXT_OFFSETS[i][1] * TEXT_BORDER_WEIGHT;
if (i === TEXT_OFFSETS.length - 1) {
mainSymbol = symbol;
}
}
;
self.x = settings.x;
self.y = settings.y;
self.setFill = setFill;
;
function setFill(newFill) {
mainSymbol.tint = newFill;
}
});
var CurrencyText = Container.expand(function (amount, settings) {
var self = Container.call(this);
settings = settings || {};
var anchor = settings.anchor || {
x: .5,
y: .5
};
var anchorX = anchor.x != undefined ? anchor.x : .5;
var anchorY = anchor.y != undefined ? anchor.y : .5;
var margin = settings.margin || CURRENCY_DEFAULT_MARGIN;
var currencySymbol = self.addChild(new CurrencySymbol({
anchor: {
x: 0,
y: anchorY
}
}));
var textAmount = self.addChild(new BorderedText(amount, {
anchor: {
y: anchorY
}
}));
;
self.setAmount = setAmount;
;
function alignText() {
var totalWidth = currencySymbol.width + margin + textAmount.width;
currencySymbol.x = -totalWidth * anchorX;
textAmount.x = currencySymbol.x + currencySymbol.width + margin;
}
function setAmount(newAmount) {
textAmount.setText(newAmount);
alignText();
}
;
alignText();
});
var Farm = Container.expand(function (x, y, rotation) {
var self = Container.call(this);
var farmGraphics = self.createAsset('farm', 'Farm asset', 0.5, 0.65);
farmGraphics.width = PLOT_SIZE;
;
self.x = x;
self.y = y;
self.rotation = rotation;
});
var Ship = Container.expand(function (x, y) {
var self = Container.call(this);
var shipGraphics = self.createAsset('ship', 'Ship asset', 0.35, 0.5);
;
self.x = x;
self.y = y;
self.direction = 0;
self.launch = launch;
;
function launch(direction) {}
});
var Planet = Container.expand(function (x, y, radius, assetName) {
var self = Container.call(this);
var perimeter = 2 * Math.PI * radius;
var numPlots = Math.floor(perimeter / (PLOT_SIZE + PLOT_GAP));
var numNodes = numPlots / 4;
var farms = [];
var ship = self.addChild(new Ship(radius, 0));
var planetGraphics = self.createAsset(assetName, assetName + ' asset', 0.5, 0.5);
planetGraphics.width = radius * 2;
planetGraphics.height = radius * 2;
;
self.update = update;
self.launch = launch;
self.x = x;
self.y = y;
self.rotation = Math.random() * 2 * Math.PI;
self.spin = 0;
;
function update(ticks) {
self.rotation += self.spin;
}
function launch(direction) {}
function createFarms() {
for (var i = 1; i < numPlots; i++) {
var angle = i / numPlots * 2 * Math.PI;
var farmX = radius * Math.cos(angle);
var farmY = radius * Math.sin(angle);
var rotation = angle + Math.PI / 2;
farms.push(self.addChild(new Farm(farmX, farmY, rotation)));
}
}
;
createFarms();
return self;
});
var PlanetGrey = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_GREY, 'planetGrey');
;
self.spin = PLANET_SPIN_GREY;
});
var PlanetRed = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_RED, 'planetRed');
;
self.spin = PLANET_SPIN_RED;
});
var PlanetBlue = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_BLUE, 'planetBlue');
;
self.spin = PLANET_SPIN_BLUE;
});
var PlanetOmni = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_OMNI, 'planetOmni');
;
self.spin = PLANET_SPIN_OMNI;
});
var Crosshair = Container.expand(function (x, y, distance) {
var self = Container.call(this);
var arrows = [];
var arrowOffsets = [{
x: 0,
y: -1
}, {
x: 1,
y: 0
}, {
x: 0,
y: 1
}, {
x: -1,
y: 0
}];
for (var i = 0; i < arrowOffsets.length; i++) {
var arrow = self.createAsset('arrow', 'Arrow asset', 0.5, 0.5);
arrow.rotation = Math.PI / 2 * i;
arrows.push(arrow);
self.addChild(arrow);
}
;
self.setDistance = setDistance;
self.x = x;
self.y = y;
;
function setDistance(distance) {
for (var i = 0; i < arrows.length; i++) {
arrows[i].x = centerX + arrowOffsets[i].x * distance;
arrows[i].y = centerY + arrowOffsets[i].y * distance;
}
}
;
;
setDistance(distance);
});
var NavigationButton = Container.expand(function (x, y, index, callback) {
var self = Container.call(this);
var details = NAVIGATION_BUTTONS[index];
var buttonGraphics = self.createAsset('button', 'Button asset', 0.5, 0.5);
var planetGraphics = self.createAsset(details.planet, 'Planet asset', 0.5, 0.5);
var currencyText = self.addChild(new CurrencyText(details.cost));
buttonGraphics.tint = 0xFFAAAA;
planetGraphics.width = buttonGraphics.width * 0.45;
planetGraphics.height = buttonGraphics.width * 0.45;
;
self.unlock = unlock;
self.x = x;
self.y = y;
self.cost = details.cost;
self.planet = details.planet;
self.unlocked = false;
self.on('down', function () {
callback(index);
});
;
function unlock() {
self.unlocked = true;
buttonGraphics.tint = 0xFFFFFF;
currencyText.destroy();
}
});
var NavigationInterface = Container.expand(function (x, y) {
var self = Container.call(this);
var buttons = [];
for (var i = 0; i < NAVIGATION_BUTTONS.length; i++) {
var buttonX = (-NAVIGATION_BUTTONS.length / 2 + 0.5 + i) * 200;
buttons.push(self.addChild(new NavigationButton(buttonX, 0, i, buttonCallback)));
}
;
self.x = x;
self.y = y;
;
function buttonCallback(index) {
var button = buttons[index];
if (button.unlocked) {
// TODO: navigation
} else if (money >= button.cost) {
money -= button.cost;
button.unlock();
}
}
;
buttonCallback(0);
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
var MATH_2_PI = Math.PI * 2;
var MATH_R3BY2 = Math.sqrt(3) / 2;
;
var GAME_TICKS = 60;
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
var PLANET_RADIUS_GREY = 200;
var PLANET_RADIUS_RED = 400;
var PLANET_RADIUS_BLUE = 350;
var PLANET_RADIUS_OMNI = 500;
var PLANET_SPIN_GREY = 0.001;
var PLANET_SPIN_RED = -0.0002;
var PLANET_SPIN_BLUE = 0.001;
var PLANET_SPIN_OMNI = 0.005;
var ROCKET_DIST_REVERSE = 200;
var ROCKET_DIST_LEAVE = 1200;
var ROCKET_SPEED_BASE = 0.05;
var ROCKET_SPEED_MULTI = 1.5;
var ROCKET_SPEED_MAX = 30;
var ROCKET_SPEED_REVERSE = 5;
var PLOT_SIZE = 100;
var PLOT_GAP = 40;
var TEXT_OFFSETS = [[0, 1], [MATH_R3BY2, 0.5], [MATH_R3BY2, -0.5], [0, -1], [-MATH_R3BY2, -0.5], [-MATH_R3BY2, 0.5], [0, 0]];
var TEXT_BORDER_WEIGHT = 4;
var TEXT_DEFAULT_SIZE = 50;
var TEXT_DEFAULT_FONT = 'Arial';
var TEXT_DEFAULT_FILL = '#FFFFFF';
var TEXT_DEFAULT_BORDER = '#000000';
var CURRENCY_DEFAULT_MARGIN = 0;
var NAVIGATION_BUTTONS = [{
cost: 0,
planet: 'planetGrey',
description: ''
}, {
cost: 100,
planet: 'planetRed',
description: ''
}, {
cost: 250,
planet: 'planetBlue',
description: ''
}, {
cost: 800,
planet: 'planetOmni',
description: ''
}];
;
var money = 10000;
var planet = game.addChild(new PlanetOmni(GAME_WIDTH / 2, GAME_HEIGHT / 2));
var navigation = LK.gui.bottom.addChild(new NavigationInterface(0, -100));
// Add a new CurrencyText in the top-center of the screen with specified settings
var moneyDisplay = LK.gui.top.addChild(new CurrencyText(money, {
x: 20,
y: 100,
anchor: {
x: 0
}
}));
moneyDisplay.setAmount(money);
;
LK.on('tick', function () {
planet.update();
});
pixel art of a tiny planet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a planet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of an alien currency symbol. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a planet made of gold ore. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
plain black background with stars. 2d repeating Texture.
pixel art of a asteroid. Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a cute alien farmer, side view. Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a rocky explosion.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art flame particle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a large white, empty, rectangular, speech bubble. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a red chevron. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Pixel art of yellow grapes. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.