User prompt
Crea una logica para que la zona de aparición de los sistemas se generen dentro de un rango circular
User prompt
siguen apareciendo sistemas con nombres repetidos
User prompt
arregla los nombres de los sistemas para que no se repitan
User prompt
la animación no esta en bucle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
haz que sea en bucle y sea una transición entre 0 a 1 y viceversa ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
agrega una animación de trasparencia para conection line ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
al tocar boton que cambie la escena la principal
User prompt
Desactiva la función de movimiento en la newpage
User prompt
elimina la función reusable de rouch
User prompt
haz que la interacción con boton no se por medio de una función reusable
User prompt
boton no es interactuable
User prompt
boton no funciona
User prompt
cuando se presione button que establezca fuel en 1 y que cambie a la pagina principal
User prompt
haz que boton sea interactuable
User prompt
cuando se colisiona con un sistema cambia pagina a newpage y oculta toda la pagina inicial
User prompt
haz que new page solo sea visible despues de estar en un sistema
User prompt
haz que charge station visible = true cuando se esta en un sistema y cuando no false
User prompt
asignale de nombre a la nueva pagina "charge station"
User prompt
haz que new page solo sea visible al estar en un sistema
User prompt
haz que new page solo tenga boton asset
User prompt
crea una nueva pagina separada de las demás
User prompt
agrega un nuevo objeto con el asset boton en la parte inferior de la pantalla y que funcione como interfaz visible
User prompt
agrega un nuevo objeto con el asset boton en la parte inferior de la pantalla y que funcione como interfaz
User prompt
button no se muestra en escena
/****
* 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,
alpha: 0.3
});
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];
// 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 foregroundContainer = game.addChild(new ForegroundContainer());
var button = LK.gui.bottom.addChild(LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
// Center horizontally
y: 2632 // Position near the bottom of the screen
}));
var fuel = 1; // Initial fuel level set to 1
// Function to check if all solar systems are part of the network
function verifyNetworkCompleteness() {
return network.every(function (solarSystem) {
return solarSystem.visited;
});
}
var initialSolarSystem = {
x: 0,
y: 0
}; // Define initialSolarSystem with default coordinates
// Create a text display to show network connection status
var networkStatusText = new Text2('Network Status: Disconnected', {
size: 50,
fill: 0xFFFFFF
});
networkStatusText.anchor.set(0.5, 0); // Center the text horizontally at the top
LK.gui.top.addChild(networkStatusText); // Add to GUI overlay
// LK.gui.top.center.addChild(networkStatusText); // Center the text at the top
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;
// Update game logic to connect solar systems using BackgroundContainer's methods
backgroundContainer.visitedSolarSystems = visitedSolarSystems;
backgroundContainer.connectVisitedSolarSystems(); // Connect visited solar systems
// Update network status text based on network completeness
if (verifyNetworkCompleteness()) {
networkStatusText.setText('Network Status: Connected');
} else {
networkStatusText.setText('Network Status: Disconnected');
}
// 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)) {
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
}
});
};
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() * 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 < 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", "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 || fuel < 1) {
return;
} // Prevent relocation if already moving or if fuel is insufficient
// 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
fuel = 0; // Set fuel to 0 when spaceship reaches a new solar system
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);
};
});