/****
* Classes
****/
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = 900;
self.angle = 0;
self.jump = function () {
currentOrbitIndex++;
var targetOrbit = orbits[currentOrbitIndex];
self.angle = Math.atan2(self.y - 2732 / 2, self.x - 2048 / 2);
if (targetOrbit) {
//self.radius = (targetOrbit.width - 100) / 2;
self.radius = targetOrbit.width / 2;
//console.log('self.radius after setting it to targetOrbits: ' + self.radius);
} else {
self.radius = 0; // Fallback radius if targetOrbit is not defined
}
self.x = 2048 / 2 + self.radius * Math.cos(self.angle);
self.y = 2732 / 2 + self.radius * Math.sin(self.angle);
//self.scale.x = 0.70;
//self.scale.y = 0.70;
self.width = 70;
self.height = self.width;
scaling = true;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
/*
var orbit = game.addChild(new Orbit());
orbit.positionOrbit(4);
orbits.push(orbit);
// Move player to the topmost z-index
game.setChildIndex(player, game.children.length - 1);
*/
};
self.update = function () {
var centerX = 2048 / 2;
var centerY = 2732 / 2;
self.angleSpeed = 0.01;
self.angle = (self.angle || 0) + self.angleSpeed;
self.x = centerX + self.radius * Math.cos(self.angle);
self.y = centerY + self.radius * Math.sin(self.angle);
// Calculate the rotation angle to face the center
var dx = centerX - self.x;
var dy = centerY - self.y;
self.rotation = Math.atan2(dy, dx) + Math.PI / 2;
};
});
// Obstacle class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
//self.angleSpeed = 0.01;
self.orbitSpeed = -0.01;
self.move = function () {
// Obstacle move logic
//var angleSpeed = -0.01 * self.parent.direction; //self.orbitSpeed;
//self.radius = self.parent.width / 2 - self.width / 2;
self.radius = self.parent.width / 2 * (1900 / self.parent.width) - self.width / 2 * (100 / self.width);
self.angle = (self.angle || 0) + self.orbitSpeed;
self.angle %= Math.PI * 2;
self.x = self.radius * Math.cos(self.angle);
self.y = self.radius * Math.sin(self.angle);
};
});
// Powerup class
var Powerup1 = Container.expand(function () {
var self = Container.call(this);
var powerup1Graphics = self.attachAsset('powerup1', {
anchorX: 0.5,
anchorY: 0.5
});
//self.angleSpeed = 0.01;
self.orbitSpeed = 0.03;
self.move = function () {
self.radius = self.parent.width / 2 * (1900 / self.parent.width) - self.width / 2 * (100 / self.width) + 10;
self.angle = (self.angle || 0) + self.orbitSpeed;
self.x = self.radius * Math.cos(self.angle);
self.y = self.radius * Math.sin(self.angle);
};
});
// Orbit class
var Orbit = Container.expand(function () {
var self = Container.call(this);
var orbitGraphics = self.attachAsset('orbit1', {
anchorX: 0.5,
anchorY: 0.5,
//tint: Math.floor(Math.random() * 16777215)
tint: rainbowColors[orbitsCreated % rainbowColors.length]
});
orbitsCreated++;
orbitGraphics.alpha = 0.5;
self.direction = Math.random() < 0.5 ? 1 : -1;
self.positionOrbit = function (i) {
self.x = 2048 / 2;
self.y = 2732 / 2;
this.width = 1900 - i * 500;
this.height = 1900 - i * 500;
if (i !== 0) {
this.numBarriers = 1 + Math.floor(Math.random() * (i + currentOrbitIndex));
if (this.numBarriers > 12) {
this.numBarriers = 12;
}
// Add powerup to some orbits
if (orbitsCreated % 17 == 0) {
this.numBarriers = 0;
self.addPowerup(0);
}
//self.barrierSpeed = Math.random() * currentOrbitIndex + 1 / 20;
self.barrierSpeed = 0.01 + Math.random() * 0.015 * self.direction;
for (var j = 0; j < this.numBarriers; j++) {
self.addBarrier(self.barrierSpeed, j);
//console.log('adding barrier: ', j);
}
}
};
var orbitGraphicsMask = self.attachAsset('blackSphere', {
anchorX: 0.5,
anchorY: 0.5,
tint: 0x000000
//tint: rainbowColors[(orbitsCreated + 1) % rainbowColors.length]
});
//orbitGraphicsMask.alpha = 0.1;
orbitGraphicsMask.width = self.width - 200;
orbitGraphicsMask.height = self.height - 200;
self.addBarrier = function (speed, index) {
var barrier = new Obstacle();
barrier.orbitSpeed = speed;
//barrier.angle = index * (Math.PI * 2 / 20);
barrier.angle = Math.random() * (Math.PI * 2);
/*
barrier.move = function () {
barrier.angle += barrier.orbitSpeed * (self.direction === 1 ? 1 : -1);
barrier.x = self.x + (self.width - barrier.width) / 2 * Math.cos(barrier.angle);
barrier.y = self.y + (self.height - barrier.height) / 2 * Math.sin(barrier.angle);
};*/
self.addChild(barrier);
obstacles.push(barrier);
};
self.addPowerup = function (index) {
var powerup = new Powerup1();
powerup.angle = Math.PI * 1.5;
self.addChild(powerup);
obstacles.push(powerup);
};
});
/****
* Initialize Game
****/
// Star class
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Star class
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) {
descriptor.writable = true;
}
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) {
_defineProperties(Constructor.prototype, protoProps);
}
if (staticProps) {
_defineProperties(Constructor, staticProps);
}
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : String(i);
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) {
return t;
}
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) {
return i;
}
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) {
_setPrototypeOf(subClass, superClass);
}
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) {
return false;
}
if (Reflect.construct.sham) {
return false;
}
if (typeof Proxy === "function") {
return true;
}
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
var Star = /*#__PURE__*/function (_Container) {
_inherits(Star, _Container);
var _super = _createSuper(Star);
function Star() {
var _this;
_classCallCheck(this, Star);
_this = _super.call(this);
var starGraphics = _this.attachAsset('blackSphere', {
anchorX: 0.5,
anchorY: 0.5,
width: Math.random() * 10 + 1,
height: Math.random() * 10 + 1
});
starGraphics.alpha = Math.random() * 0.5 + 0.5;
_this.speed = Math.random() * 2 + 1;
_this.z = Math.random() * 500 + 50; // Z position for depth effect
return _this;
}
_createClass(Star, [{
key: "move",
value: function move() {
this.z -= this.speed;
var scale = 500 / this.z;
this.scale.x = this.scale.y = scale > 1 ? 1 : scale; // Ensure scale does not exceed 1
this.alpha = scale; // Fade out as it moves closer
if (this.z <= 0) {
this.x = Math.random() * 2048;
this.y = Math.random() * 2732;
this.z = Math.random() * 500 + 50;
}
}
}]);
return Star;
}(Container);
function hsvToHex(h, s, v) {
var r, g, b, i, f, p, q, t;
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0:
r = v, g = t, b = p;
break;
case 1:
r = q, g = v, b = p;
break;
case 2:
r = p, g = v, b = t;
break;
case 3:
r = p, g = q, b = v;
break;
case 4:
r = t, g = p, b = v;
break;
case 5:
r = v, g = p, b = q;
break;
}
var toHex = function toHex(x) {
var hex = Math.round(x * 255).toString(16);
return hex.length === 1 ? '0' + hex : hex;
};
return '0x' + toHex(r) + toHex(g) + toHex(b);
}
//console.log(rainbowColors);
// A for our purposes optimized hitdetection, based on orbit layer and angle.
var radIntersects = function radIntersects(p, t) {
if (t.parent == orbits[currentOrbitIndex]) {
var pa = (p.angle * (180 / Math.PI) + 180) % 360;
var ta = (t.angle * (180 / Math.PI) + 180) % 360;
if (Math.abs(pa - ta) < 6) {
return true;
} else {
return false;
}
} else {
return false;
}
};
var powerupText;
var showPowerupText = function showPowerupText() {
powerupText = new Text2('Hyperjump Activated!\nThere are no obstacles for you!\nTap to continue', {
size: 100,
fill: "#bbbbbb",
align: 'center'
});
powerupText.y = 2700 / 2;
powerupText.x = 2048 / 2;
powerupText.anchor.set(0.5, 0.5);
//instructionText.x = 2048 / 2; // Center horizontally
//instructionText.y = 2732 - instructionText.height / 2; // Position at the bottom
game.addChild(powerupText);
LK.setTimeout(function () {
var fadeDuration = 3000;
var fadeStep = 30;
var fadeInterval = fadeDuration / fadeStep;
var currentStep = 0;
var fadeOutInterval = LK.setInterval(function () {
if (powerupText) {
powerupText.alpha -= 1 / fadeStep;
}
currentStep++;
if (currentStep >= fadeStep) {
LK.clearInterval(fadeOutInterval);
game.removeChild(powerupText);
powerupText = null;
}
}, fadeInterval);
}, 0);
};
// Initialize assets used in this game.
// Game variables
var player;
var orbits = [];
var obstacles = [];
var currentOrbitIndex = 0;
var scaling = false;
var scalingCounter = 0;
var scalingSpeed = 50; //25;
var scalingTarget = 500;
var numColors = 18;
var orbitsCreated = Math.floor(Math.random() * numColors); //0;
var rainbowColors = function () {
var colors = [];
for (var i = 0; i < numColors; i++) {
var hue = i * (360 / numColors) % 360;
colors.push(hsvToHex(hue / 360, 1, 1));
}
return colors;
}();
var powerup1Activated = false;
// Initialize player
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
LK.gui.top.addChild(scoreTxt);
// Initialize orbits
function createOrbits() {
for (var i = 0; i < 5; i++) {
var orbit = game.addChild(new Orbit());
orbit.positionOrbit(i);
orbits.push(orbit);
}
}
createOrbits();
// Add instruction text at the bottom of the screen
var instructionText = new Text2('Tap to activate jet engine.\nDon\'t crash into space objects.', {
size: 50,
fill: "#bbbbbb",
align: 'center'
});
instructionText.y = 163;
instructionText.x = 50;
instructionText.anchor.set(0.5, 0);
//instructionText.x = 2048 / 2; // Center horizontally
//instructionText.y = 2732 - instructionText.height / 2; // Position at the bottom
LK.gui.top.addChild(instructionText);
//game.setBackgroundColor(rainbowColors[7] + 0xdddddd);
player = game.addChild(new Player());
//player.x = 2048 / 2;
//player.y = 2732 / 2 - 200; // Start the player 200px above the center
/*
console.log('Player radius is now: ' + player.radius);
console.log('Orbits.length is now: ' + orbits.length);
console.log('CurrentOrbitIndex is now: ' + currentOrbitIndex);
console.log('width of currentorbit is now: ' + orbits[currentOrbitIndex].width);
*/
// Game logic
game.on('down', function (obj) {
if (powerupText) {
game.removeChild(powerupText);
powerupText = null;
//return;
}
if (!scaling) {
player.jump(currentOrbitIndex);
LK.gui.top.removeChild(instructionText);
}
});
LK.on('tick', function () {
player.update();
// Move stars
for (var i = game.children.length - 1; i >= 0; i--) {
var child = game.children[i];
if (child instanceof Star) {
child.move();
}
}
if (powerup1Activated) {
powerup1Activated = false;
for (var i = obstacles.length - 1; i > 0; i--) {
obstacles[i].destroy();
obstacles[i]._destroyed = true;
}
}
if (scaling) {
scalingCounter++;
for (var i = 0; i < orbits.length; i++) {
orbits[i].width += scalingSpeed;
orbits[i].height += scalingSpeed;
//player.radius += scalingSpeed * 0.1;
}
player.radius = orbits[currentOrbitIndex].width / 2 - 50;
if (player.width < 100) {
player.width += 0.3;
player.height = player.width;
}
//player.scale.x = player.scale.y =
if (scalingCounter == scalingTarget / scalingSpeed) {
scaling = false;
scalingCounter = 0;
var orbit = game.addChild(new Orbit());
orbit.positionOrbit(4);
orbits.push(orbit);
game.setChildIndex(player, game.children.length - 1);
player.width = 100;
player.height = 100;
//game.setBackgroundColor(rainbowColors[(10 + currentOrbitIndex) % 15] + 0xdddddd);
/*
console.log('Player radius is now: ' + player.radius);
console.log('Orbits.length is now: ' + orbits.length);
console.log('CurrentOrbitIndex is now: ' + currentOrbitIndex);
console.log('width of currentorbit is now: ' + orbits[currentOrbitIndex].width);
*/
}
}
// Update orbits
for (var i = orbits.length - 1; i > 0; i--) {
//orbits[i].positionOrbit(i);
var orb = orbits[i];
//if (orb && orb.width > 2700) {
if (orb && orb.width > 3500) {
for (var j = 0; j < orb.children.length; j++) {
var child = orb.children[j];
if (child instanceof Obstacle || child instanceof Powerup1) {
// child is an instance of YourClass, do something with it
child._destroyed = true;
}
}
orbits[i].destroy();
// Splice alters jump logic, so alter currentTargetOrbit too.
orbits.splice(i, 1);
currentOrbitIndex--;
}
}
// Update obstacles
for (var i = obstacles.length - 1; i > 0; i--) {
if (obstacles[i] && !obstacles[i]._destroyed) {
obstacles[i].move();
//if (player.intersects(obstacles[i])) {
if (radIntersects(player, obstacles[i])) {
var t = obstacles[i];
//console.log('collision occurred: (obstacle:', t.radius, t.angle % (Math.PI * 2), ') , (player: ', player.radius, player.angle % (Math.PI * 2));
var ta = (t.angle * (180 / Math.PI) + 180) % 360;
var pa = (player.angle * (180 / Math.PI) + 180) % 360;
//console.log(ta, pa);
//if (radIntersects(player, obstacles[i], 100)) {
if (obstacles[i] instanceof Powerup1) {
obstacles[i].destroy();
obstacles[i]._destroyed = true;
LK.effects.flashScreen(0xffffff, 1000);
//LK.effects.flashScreen(rainbowColors[Math.floor(Math.random() * numColors)], 1000);
powerup1Activated = true;
showPowerupText();
} else {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
} else {
obstacles.splice(i, 1);
//console.log('obstacles.length is now: ' + obstacles.length);
}
}
});
// Star creation logic
if (LK.ticks % 10 == 0) {
var newStar = new Star();
newStar.x = 2048 / 2;
newStar.y = 2732 / 2;
game.addChild(newStar);
}
астероид. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Контейнер с энергией. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
черный круг с белыми точками. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.