User prompt
el texto no se actualiza cuando se cumplen los requisitos
User prompt
todos los sistemas estaban conectados pero el texto sigue diciendo disconnected
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'LK.gui.top.center.addChild(networkStatusText); // Center the text at the top' Line Number: 101
User prompt
pon al texto en center-top
User prompt
pon al texto en center
User prompt
Agrega un tex display que diga si toda la red esta conectada o no
User prompt
crea un verificador para ver si todos los sistemas son parte de la red
User prompt
llama a la unión de los sistemas como red
User prompt
haz que el sonido visitedsound cambie su pitc en cada sistema
User prompt
cuando nave llegue a su destino que finalice el audio, si no, que se repita en bucle
User prompt
agrega el sonido movesound mientras la nave se traslada
User prompt
que el sonido sea simultaneo al cambio de asset
User prompt
cuando termine el traslado que suene visitedsound
User prompt
el sonido no se reproduce
User prompt
cuando termine el traslado que suene visitedsound
User prompt
cada que finalice el traslado y el sistema pase a visitado que suene el sonido "visitedSound"
User prompt
optimiza el código de las conexiones para que no consuma muchos recursos y guardalos en una lista
User prompt
crea una logica para que la cara de spaceShip apunte al destino antes de iniciar el traslado
User prompt
en vez del planeta más cercano que sea al planeta a donde se dirige
User prompt
crea una logica para agregarle una rotación a SpaceShip para que al moverse parezca que se dirige al planeta de traslado
User prompt
cuando se haga el translado de area, antes del movimiento que la nave rote ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Antes de empezar el traslado que spaceShip rote a la dirección donde se ubica el sistema solar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Agrega la caracteristica para que spaceship rote
User prompt
Please fix the bug: 'ReferenceError: selectedSolarSystem is not defined' in or related to this line: 'if (selectedSolarSystem) {' Line Number: 95
User prompt
ajusta la rotación de spaceShip para que apunte al sistemaSolar Seleccionado
/****
* 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.5
});
self.addChild(line);
};
// 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];
// Check if a connection already exists
var connectionExists = self.visitedSolarSystems.some(function (system) {
return system.x === previousSystem.x && system.y === previousSystem.y && system.x === currentSystem.x && system.y === currentSystem.y;
});
if (!connectionExists) {
self.drawLine(previousSystem.x, previousSystem.y, currentSystem.x, currentSystem.y);
}
}
};
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 = [];
// 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;
// Calculate the angle to the selected solar system
if (selectedSolarSystem) {
var dx = selectedSolarSystem.x - spaceShip.x;
var dy = selectedSolarSystem.y - spaceShip.y;
spaceShip.rotation = Math.atan2(dy, dx);
}
// 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
solarSystems.forEach(function (solarSystem) {
if (spaceShip.intersects(solarSystem)) {
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
}
});
};
solarSystems.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 solarSystems = [];
var solarSystemList = []; // New list to store solar systems
for (var i = 0; i < Math.floor(Math.random() * 6) + 15; i++) {
var x, y, validPosition;
do {
x = Math.random() * (2048 - 300) + 150; // Increase range by 50%
y = Math.random() * (2732 - 300) + 150; // Increase range by 50%
validPosition = true;
for (var j = 0; j < solarSystems.length; j++) {
var existingSystem = solarSystems[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
}));
solarSystems.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", "Pavo", "Phoenix", "Pictor", "Reticulum", "Scutum", "Volans"];
var shuffledNames = solarSystemNames.sort(function () {
return Math.random() - 0.5;
}); // Shuffle the names array
var solarSystemName = shuffledNames[i]; // 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
var speed = 0.15; // Set a fixed speed for the movement
var duration = distance / speed; // Calculate duration based on distance and speed
tween(area, {
x: solarSystem.x,
y: solarSystem.y
}, {
duration: duration,
easing: tween.easeInOut,
onFinish: function onFinish() {
area.isMoving = false; // Reset moving flag
}
});
}
// Apply changeAreaLocation to the SolarSystem object
// Apply changeAreaLocation to each SolarSystem object
solarSystems.forEach(function (solarSystem) {
solarSystem.down = function (x, y, touchedObj) {
changeAreaLocation(solarSystem, area);
};
});