Code edit (2 edits merged)
Please save this source code
User prompt
haz que el texto siempre sea visible
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'foregroundContainer.addChild(solarSystemCountText);' Line Number: 75
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'var solarSystemCountText = new Text2('Solar Systems: ' + network.length, {' Line Number: 67
User prompt
agrega un texto que diga la cantidad de sistemas
Code edit (2 edits merged)
Please save this source code
User prompt
galaxymotion fuction excluye Guicontainer
User prompt
haz que menuinterfaz sea arrastrable
User prompt
invierte el movimiento de galaxymotion
User prompt
galaxu motion no funciona
User prompt
ahora nada se mueve
User prompt
Please fix the bug: 'line is not defined' in or related to this line: 'enableGalaxyMotion(line);' Line Number: 352
User prompt
Please fix the bug: 'systemA is not defined' in or related to this line: 'enableGalaxyMotion(systemA);' Line Number: 347
User prompt
galaxymotion que solo afecte sistemas, line, ship, area y galaxy
User prompt
arregla el bug que hace que interfaz se mueva
User prompt
menuinterfaz siempre esta visible en la pantalla
Code edit (1 edits merged)
Please save this source code
User prompt
los objeto de gui no se mueven con la funcion galaxymotion
Code edit (3 edits merged)
Please save this source code
User prompt
haz que menuinterfaz no sea afectado por el movimiento de galaxia
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
agrega el asset menuinterfaz como parte de Guicontainer
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Gui is not defined' in or related to this line: 'var guiContainer = game.addChild(new Gui());' Line Number: 135
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BackgroundContainer = Container.expand(function () {
var self = Container.call(this);
// Array to keep track of visited solar systems
self.visitedSolarSystems = [];
return self;
});
var ForegroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
var Gui = Container.expand(function () {
var self = Container.call(this);
return self;
});
var GuiContainer = 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
****/
// Function to connect two solar systems with a line
function connectSolarSystems(systemA, systemB) {
// Check if a line already exists between these systems
if (systemA.connectedSystems && systemA.connectedSystems.includes(systemB)) {
return;
}
// Create a line between the two systems
var randomLineIndex = Math.floor(Math.random() * 5) + 1; // Randomly select an asset index between 1 and 5
var line = backgroundContainer.addChild(LK.getAsset('line' + randomLineIndex, {
anchorX: 0.5,
anchorY: 0.5,
x: (systemA.x + systemB.x) / 2,
y: (systemA.y + systemB.y) / 2,
scaleX: Math.sqrt(Math.pow(systemA.x - systemB.x, 2) + Math.pow(systemA.y - systemB.y, 2)) / 100,
scaleY: 0.1,
rotation: Math.atan2(systemB.y - systemA.y, systemB.x - systemA.x)
}));
// Add a continuous transparency pulse effect to the line
function pulseLine(line) {
tween(line, {
alpha: 0.3
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(line, {
alpha: 0.8
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
pulseLine(line); // Recursively call to continue the pulse effect
}
});
}
});
}
pulseLine(line);
// Store the connection to avoid duplicate lines
if (!systemA.connectedSystems) {
systemA.connectedSystems = [];
}
systemA.connectedSystems.push(systemB);
}
// Function to make a solar system pulse smoothly
function pulseSolarSystem(solarSystem) {
tween(solarSystem, {
scaleX: solarSystem.scaleX * 1.1,
scaleY: solarSystem.scaleY * 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(solarSystem, {
scaleX: solarSystem.scaleX / 1.1,
scaleY: solarSystem.scaleY / 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
pulseSolarSystem(solarSystem);
}
});
}
});
}
// Define foregroundContainer before using it
var foregroundContainer = game.addChild(new ForegroundContainer());
var guiContainer = game.addChild(new Gui());
// Define galaxySpace object
var galaxySpace = foregroundContainer.addChild(LK.getAsset('area', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
alpha: 0.3,
scaleX: 4.5,
scaleY: 4.5
}));
// Function to add a smooth rotation to the galaxySpace object in a loop
function rotateGalaxySpace() {
tween(galaxySpace, {
rotation: galaxySpace.rotation + Math.PI * 2
}, {
duration: 600000,
easing: tween.linear,
onFinish: rotateGalaxySpace
});
}
rotateGalaxySpace();
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());
var GuiContainer = game.addChild(new GuiContainer());
game.update = function () {
spaceShip.x = area.x;
spaceShip.y = area.y;
// Iterate over each solar system to check for nearby systems
for (var i = 0; i < network.length; i++) {
var systemA = network[i];
for (var j = i + 1; j < network.length; j++) {
var systemB = network[j];
var dx = systemA.x - systemB.x;
var dy = systemA.y - systemB.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// If the distance is less than 600 pixels, connect them
if (distance < 900) {
connectSolarSystems(systemA, systemB);
}
}
}
};
// Add multiple solar system objects
var network = [];
var solarSystemList = []; // New list to store solar systems
for (var i = 0; i < Math.floor(Math.random() * 30) + 45; i++) {
var x, y, validPosition;
do {
var angle = Math.random() * Math.PI * 2; // Random angle
var radius = Math.random() * 2200 + 500; // Random radius between 350 and 1850
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 < 500) {
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 randomAssetIndex = Math.floor(Math.random() * 3) + 1; // Randomly select an asset index between 1 and 3
var randomScale = Math.random() * 0.3 + 1; // Random scale between 0.75 and 1.25
var solarSystem = midgroundContainer.addChild(LK.getAsset('solarSystem' + randomAssetIndex, {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y,
scaleX: randomScale,
scaleY: randomScale
}));
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", "Lynx", "Lynx Minor", "Lynx Major", "Lynx Prime", "Lynx Alpha", "Lynx Beta", "Lynx Gamma", "Lynx Delta", "Lynx Epsilon", "Lynx Zeta", "Lynx Eta", "Lynx Theta", "Lynx Iota", "Lynx Kappa", "Lynx Lambda", "Lynx Mu", "Lynx Nu", "Lynx Xi", "Lynx Omicron", "Lynx Pi", "Lynx Rho", "Lynx Sigma", "Lynx Tau", "Lynx Upsilon", "Lynx Phi", "Lynx Chi", "Lynx Psi", "Lynx Omega", "Lynx Alpha Prime", "Lynx Beta Prime", "Lynx Gamma Prime", "Lynx Delta Prime", "Lynx Epsilon Prime", "Lynx Zeta Prime", "Lynx Eta Prime", "Lynx Theta Prime", "Lynx Iota Prime", "Lynx Kappa Prime", "Lynx Lambda Prime", "Lynx Mu Prime", "Lynx Nu Prime", "Lynx Xi Prime", "Lynx Omicron Prime", "Lynx Pi Prime", "Lynx Rho Prime", "Lynx Sigma Prime", "Lynx Tau Prime", "Lynx Upsilon Prime", "Lynx Phi Prime", "Lynx Chi Prime", "Lynx Psi Prime", "Lynx Omega Prime", "Lynx Alpha Major", "Lynx Beta Major", "Lynx Gamma Major", "Lynx Delta Major", "Lynx Epsilon Major", "Lynx Zeta Major", "Lynx Eta Major", "Lynx Theta Major", "Lynx Iota Major", "Lynx Kappa Major", "Lynx Lambda Major", "Lynx Mu Major", "Lynx Nu Major", "Lynx Xi Major", "Lynx Omicron Major", "Lynx Pi Major", "Lynx Rho Major", "Lynx Sigma Major", "Lynx Tau Major", "Lynx Upsilon Major", "Lynx Phi Major", "Lynx Chi Major", "Lynx Psi Major", "Lynx Omega Major", "Lynx Alpha Minor", "Lynx Beta Minor", "Lynx Gamma Minor", "Lynx Delta Minor", "Lynx Epsilon Minor", "Lynx Zeta Minor", "Lynx Eta Minor", "Lynx Theta Minor", "Lynx Iota Minor", "Lynx Kappa Minor", "Lynx Lambda Minor", "Lynx Mu Minor", "Lynx Nu Minor", "Lynx Xi Minor", "Lynx Omicron Minor", "Lynx Pi Minor", "Lynx Rho Minor", "Lynx Sigma Minor", "Lynx Tau Minor", "Lynx Upsilon Minor", "Lynx Phi Minor", "Lynx Chi Minor", "Lynx Psi Minor", "Lynx Omega Minor"];
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.6, 1.2); // 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);
pulseSolarSystem(solarSystem);
// Apply changeSizeOnTouch to each SolarSystem object
solarSystem.down = function (x, y, touchedObj) {
changeAreaLocation(solarSystem, area);
};
}
// 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
}));
// Create a new object with the asset of area called 'Galaxy space'
var galaxySpace = foregroundContainer.addChild(LK.getAsset('area', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
alpha: 0,
scaleX: 4.5,
// Increase the scale on the X-axis
scaleY: 4.5
// Increase the scale on the Y-axis
}));
// Add a new object called areaPunter
var spaceShip = midgroundContainer.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 || solarSystem.x === area.x && solarSystem.y === area.y) {
return;
} // Prevent relocation if already moving or if the spaceship is already at the solar system
// 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);
};
});