User prompt
no cambia de color
User prompt
no funciona
User prompt
haz que los planetas visitados su texto de nombre sea verde
User prompt
crea un marcador para los planetas visitados
User prompt
Crea un marcado que aparezca en la parte inferior derecha de los planetas para diferenciarlos de los no visitados
User prompt
agrega una logica para que tambien cambien su tamaño
User prompt
Crea una logica para que los sistemas puedan aparecer con un asset aleatorio desde el 1 al 3
User prompt
rename all solarsistem asset para que tengan un nombre escalonado
User prompt
rename SolarSysten1 -> solarsystem2
User prompt
rename solarSystem asset para que se llamen de solarsistem 1->3
User prompt
haz que cada sistema pueda aparecer con un diseño distinto
User prompt
elimina el codigo para la transición de visited solar system
User prompt
cambia el nombre de los asset visitedSolarSystem a SolarSystem1 y agrega solarsistem 3
User prompt
haz que button se elimine cuando spaceship no este más en el sistema
User prompt
El boton se sigue mostrando
User prompt
el boton se sigue mostrando despues de salir de su sistema
User prompt
haz que el botondialog desaaprezca despues de salir de su sistema
User prompt
haz que show dialog text se muestre inside del boton
User prompt
haz que al estar en un sistema aparezca un boton que salte un dialogo
User prompt
arregla el bug que nunca mestra el button dialogo
User prompt
el boton dialogo nunca aparece
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'var dialogButton = foregroundContainer.addChild(new DialogButton());' Line Number: 124
User prompt
haz que al estar en un sistema aparezca un boton que salte un dialogo. Cuando no se este en el sistema desaparezca
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'foregroundContainer.addChild(solarSystemButton);' Line Number: 126
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'foregroundContainer.addChild(solarSystemButton);' Line Number: 126
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BackgroundContainer = Container.expand(function () {
var self = Container.call(this);
// Function to draw a line between two points
self.drawLine = function (x1, y1, x2, y2) {
var line = LK.getAsset('connectSolarSystem', {
x: x1,
y: y1,
width: Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),
height: LK.getAsset('connectSolarSystem', {}).height,
rotation: Math.atan2(y2 - y1, x2 - x1),
anchorX: 0,
anchorY: 0,
alpha: 0.5
});
self.addChild(line);
tween(line, {
alpha: 0.1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(line, {
alpha: 0.5
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(line, {
alpha: 0.1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.drawLine(x1, y1, x2, y2);
}
});
}
});
}
});
};
// Array to keep track of visited solar systems
self.visitedSolarSystems = [];
// Function to connect visited solar systems
self.connectVisitedSolarSystems = function () {
if (self.visitedSolarSystems.length < 1) {
return;
}
if (self.visitedSolarSystems.length > 1) {
var previousSystem = self.visitedSolarSystems[self.visitedSolarSystems.length - 2];
var currentSystem = self.visitedSolarSystems[self.visitedSolarSystems.length - 1];
// Store connections in a list to optimize resource usage
self.connections = self.connections || [];
var connectionKey = previousSystem.x + ',' + previousSystem.y + '-' + currentSystem.x + ',' + currentSystem.y;
if (!self.connections.includes(connectionKey)) {
self.drawLine(previousSystem.x, previousSystem.y, currentSystem.x, currentSystem.y);
self.connections.push(connectionKey);
}
}
};
return self;
});
var ForegroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
var MidgroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
var SolarSystem = Container.expand(function () {
var self = Container.call(this);
var solarSystemGraphics = self.attachAsset('solarSystem', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000010
});
/****
* Game Code
****/
var initialSolarSystem = {
x: 0,
y: 0
}; // Define initialSolarSystem with default coordinates
var punterPreviousSystem = 0; // Variable to store the planet number where the router is located
var visitedSolarSystems = [];
// Create a button that will appear when in a solar system
var solarSystemButton = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2500,
// Position at the bottom of the screen
alpha: 0 // Initially hidden
});
foregroundContainer.addChild(solarSystemButton);
// Add text to the button
var buttonText = new Text2('Interact', {
size: 50,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
buttonText.x = solarSystemButton.x;
buttonText.y = solarSystemButton.y;
foregroundContainer.addChild(buttonText);
// Function to show the button
function showButton() {
solarSystemButton.alpha = 1;
buttonText.alpha = 1;
}
// Function to hide the button
function hideButton() {
solarSystemButton.alpha = 0;
buttonText.alpha = 0;
}
// Add interaction to the button
solarSystemButton.down = function (x, y, touchedObj) {
// Show a dialog or perform an action
console.log("Button pressed! Show dialog or perform action.");
};
// Removed global connectVisitedSolarSystems function and use BackgroundContainer's method
var backgroundContainer = game.addChild(new BackgroundContainer());
var midgroundContainer = game.addChild(new MidgroundContainer());
var foregroundContainer = game.addChild(new ForegroundContainer());
game.update = function () {
spaceShip.x = area.x;
spaceShip.y = area.y;
// Update game logic to connect solar systems using BackgroundContainer's methods
backgroundContainer.visitedSolarSystems = visitedSolarSystems;
backgroundContainer.connectVisitedSolarSystems();
// Update game logic to connect solar systems
game.update = function () {
spaceShip.x = area.x;
spaceShip.y = area.y;
// Check for collision between areaPunter and each solarSystem
network.forEach(function (solarSystem) {
if (spaceShip.intersects(solarSystem)) {
showButton(); // Show the button when in a solar system
punterPreviousSystem = solarSystemList.find(function (system) {
return system.solarSystem === solarSystem;
}).id; // Update punterSystem with the ID
// Change the sprite to visitedSolarSystem
tween(solarSystem.children[0], {
alpha: 0
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
solarSystem.removeChild(solarSystem.children[0]);
solarSystem.attachAsset('visitedSolarSystem', {
anchorX: 0.5,
anchorY: 0.5
});
tween(solarSystem.children[0], {
alpha: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
backgroundContainer.connectVisitedSolarSystems(); // Connect visited solar systems after animation
}
});
}
});
solarSystem.visited = true; // Mark as visited
visitedSolarSystems.push(solarSystem); // Add to visited list
backgroundContainer.connectVisitedSolarSystems(); // Connect visited solar systems by area
} else {
hideButton(); // Hide the button when not in a solar system
}
});
};
network.forEach(function (solarSystem) {
if (spaceShip.intersects(solarSystem)) {
// Change the sprite to visitedSolarSystem
tween(solarSystem.children[0], {
alpha: 0
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
solarSystem.removeChild(solarSystem.children[0]);
solarSystem.attachAsset('visitedSolarSystem', {
anchorX: 0.5,
anchorY: 0.5
});
tween(solarSystem.children[0], {
alpha: 1
}, {
duration: 1000,
easing: tween.easeInOut
});
}
});
solarSystem.visited = true; // Mark as visited
}
});
};
// Add multiple solar system objects
var network = [];
var solarSystemList = []; // New list to store solar systems
for (var i = 0; i < Math.floor(Math.random() * 11) + 30; i++) {
var x, y, validPosition;
do {
var angle = Math.random() * Math.PI * 2; // Random angle
var radius = Math.random() * 1500 + 500; // Random radius between 300 and 1100
x = 1024 + Math.cos(angle) * radius; // Centered around 1024
y = 1366 + Math.sin(angle) * radius; // Centered around 1366
validPosition = true;
for (var j = 0; j < network.length; j++) {
var existingSystem = network[j];
var dx = existingSystem.x - x;
var dy = existingSystem.y - y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 400) {
validPosition = false;
break;
}
}
// Ensure solar systems do not appear within 600 pixels of the initial solar system
var dxInitial = initialSolarSystem.x - x;
var dyInitial = initialSolarSystem.y - y;
var distanceInitial = Math.sqrt(dxInitial * dxInitial + dyInitial * dyInitial);
if (distanceInitial < 600) {
validPosition = false;
}
} while (!validPosition);
var solarSystem = midgroundContainer.addChild(LK.getAsset('solarSystem', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y
}));
network.push(solarSystem);
solarSystemList.push({
id: i,
solarSystem: solarSystem
});
// Generate a unique name for each solar system
var solarSystemNames = ["Andromeda", "Orion", "Pegasus", "Phoenix", "Lyra", "Draco", "Cassiopeia", "Hercules", "Perseus", "Cygnus", "Aquarius", "Taurus", "Gemini", "Leo", "Virgo", "Libra", "Scorpius", "Sagittarius", "Capricornus", "Pisces", "Aries", "Cancer", "Ophiuchus", "Ursa Major", "Ursa Minor", "Bootes", "Canis Major", "Canis Minor", "Centaurus", "Cetus", "Corona Borealis", "Corvus", "Crater", "Delphinus", "Equuleus", "Eridanus", "Fornax", "Grus", "Hydra", "Hydrus", "Indus", "Lacerta", "Leo Minor", "Lepus", "Lupus", "Lynx", "Microscopium", "Monoceros", "Musca", "Norma", "Octans", "Pavo", "Pictor", "Puppis", "Pyxis", "Reticulum", "Sagitta", "Sculptor", "Serpens", "Sextans", "Telescopium", "Triangulum", "Triangulum Australe", "Tucana", "Vela", "Volans", "Vulpecula", "Antlia", "Apus", "Ara", "Caelum", "Camelopardalis", "Carina", "Chamaeleon", "Circinus", "Columba", "Coma Berenices", "Crux", "Dorado", "Horologium", "Mensa", "Scutum"];
var shuffledNames = solarSystemNames.slice().sort(function () {
return Math.random() - 0.5;
}); // Shuffle the names array
var solarSystemName = shuffledNames[i % shuffledNames.length]; // Assign a unique name from the shuffled list
var solarSystemText = new Text2(solarSystemName, {
size: 50,
fill: 0xFFFFFF
});
solarSystemText.anchor.set(0.5, 1); // Center the text horizontally above the solar system
solarSystemText.x = solarSystem.x;
solarSystemText.y = solarSystem.y - solarSystem.height / 2 - 10; // Position above the solar system
midgroundContainer.addChild(solarSystemText);
// Apply changeSizeOnTouch to each SolarSystem object
solarSystem.down = function (x, y, touchedObj) {
changeAreaLocation(solarSystem, area);
changeSizeOnTouch(solarSystem, 0.9);
};
}
// Function to change the size of an object when touched and restore it when released
// Also, mark the SolarSystem as visited when touched
function changeSizeOnTouch(obj, scale) {
var originalScaleX = obj.scaleX;
var originalScaleY = obj.scaleY;
obj.down = function (x, y, touchedObj) {
this.scaleX = originalScaleX * scale;
this.scaleY = originalScaleY * scale;
};
obj.up = function (x, y, touchedObj) {
this.scaleX = originalScaleX;
this.scaleY = originalScaleY;
};
}
// Function to enable optimized galaxy motion for a given object
function enableGalaxyMotion(obj) {
var dragNode = null;
var velocity = {
x: 0,
y: 0
};
var lastPosition = {
x: 0,
y: 0
};
obj.down = function (x, y, touchedObj) {
dragNode = obj;
lastPosition.x = x;
lastPosition.y = y;
};
obj.move = function (x, y, touchedObj) {
if (dragNode) {
velocity.x = (x - lastPosition.x) * 0.6 + velocity.x * 0.8;
velocity.y = (y - lastPosition.y) * 0.6 + velocity.y * 0.8;
dragNode.x += velocity.x;
dragNode.y += velocity.y;
lastPosition.x = x;
lastPosition.y = y;
}
};
obj.up = function (x, y, touchedObj) {
dragNode = null;
};
}
// Add an area to the galaxy
var area = foregroundContainer.addChild(LK.getAsset('area', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
alpha: 0.6 // Add transparency to the area
}));
// Add a new object called areaPunter
var spaceShip = backgroundContainer.addChild(LK.getAsset('spaceShip', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
// Add a smooth rotation to the area object in a loop
function rotateArea() {
tween(area, {
rotation: area.rotation + Math.PI * 2
}, {
duration: 35000,
easing: tween.linear,
onFinish: rotateArea
});
}
rotateArea();
// Function to make the area pulse smoothly
function pulseArea() {
tween(area, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(area, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: pulseArea
});
}
});
}
pulseArea();
// Apply galaxy motion to the entire game area
enableGalaxyMotion(game);
// Function to change the area's location to the touched solar system
function changeAreaLocation(solarSystem, area) {
if (area.isMoving) {
return;
} // Prevent relocation if already moving
// Check if the solar system is within the area
var dx = solarSystem.x - area.x;
var dy = solarSystem.y - area.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > area.width / 2) {
return; // Do not move if the solar system is outside the area
}
area.isMoving = true; // Set moving flag
// Calculate the angle to the destination
var angleToDestination = Math.atan2(dy, dx);
spaceShip.rotation = angleToDestination; // Rotate spaceShip to face the destination
var speed = 0.15; // Set a fixed speed for the movement
var duration = distance / speed; // Calculate duration based on distance and speed
LK.getSound('movesound').play({
loop: true
}); // Loop movesound while the spaceship is moving
tween(area, {
x: solarSystem.x,
y: solarSystem.y
}, {
duration: duration,
easing: tween.easeInOut,
onFinish: function onFinish() {
area.isMoving = false; // Reset moving flag
LK.getSound('movesound').stop(); // Stop movesound when the spaceship reaches its destination
// Calculate a unique pitch based on the solar system's ID
var pitch = 1 + punterPreviousSystem % 10 * 0.1; // Example: vary pitch between 1.0 and 2.0
LK.getSound('visitedsound').play({
pitch: pitch
}); // Play visitedsound with varying pitch when the area finishes moving
}
});
}
// Apply changeAreaLocation to the SolarSystem object
// Apply changeAreaLocation to each SolarSystem object
network.forEach(function (solarSystem) {
solarSystem.down = function (x, y, touchedObj) {
changeAreaLocation(solarSystem, area);
};
});