User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'name')' in or related to this line: 'nowPlayingTrack.setText(track.name);' Line Number: 462
User prompt
delete rythem nation
User prompt
hop4 play on concrete jungle
User prompt
hiphop3 play on urban groove
User prompt
play hiphoptrack2 when you press play on street flow
User prompt
make it so the first track plays when you press the middle button
User prompt
make it so the first track plays immedatly
Code edit (1 edits merged)
Please save this source code
User prompt
Hip-Hop Radio Mixer
Initial prompt
make a game were you play hiphop music on a radio. Alow players to pick songs ,play them, pause them,skip them.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { currentTrack: 0, volume: 0.7, playlistOrder: [0, 1, 2, 3, 4] }); /**** * Classes ****/ var PlaybackControls = Container.expand(function () { var self = Container.call(this); var isPlaying = false; var playButton = self.attachAsset('playButton', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); var pauseButton = self.attachAsset('pauseButton', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); pauseButton.visible = false; var prevButton = self.attachAsset('skipButton', { anchorX: 0.5, anchorY: 0.5, x: -150, y: 0 }); var nextButton = self.attachAsset('skipButton', { anchorX: 0.5, anchorY: 0.5, x: 150, y: 0 }); self.setPlayingState = function (playing) { isPlaying = playing; playButton.visible = !isPlaying; pauseButton.visible = isPlaying; }; playButton.interactive = true; playButton.down = function (x, y, obj) { tween(playButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; playButton.up = function (x, y, obj) { tween(playButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); LK.getSound('button_click').play(); self.setPlayingState(true); if (typeof self.onPlay === 'function') { self.onPlay(); } }; pauseButton.interactive = true; pauseButton.down = function (x, y, obj) { tween(pauseButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; pauseButton.up = function (x, y, obj) { tween(pauseButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); LK.getSound('button_click').play(); self.setPlayingState(false); if (typeof self.onPause === 'function') { self.onPause(); } }; prevButton.interactive = true; prevButton.down = function (x, y, obj) { tween(prevButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; prevButton.up = function (x, y, obj) { tween(prevButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); LK.getSound('button_click').play(); if (typeof self.onPrevious === 'function') { self.onPrevious(); } }; nextButton.interactive = true; nextButton.down = function (x, y, obj) { tween(nextButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; nextButton.up = function (x, y, obj) { tween(nextButton, { scaleX: 1, scaleY: 1 }, { duration: 100 }); LK.getSound('button_click').play(); if (typeof self.onNext === 'function') { self.onNext(); } }; return self; }); var TrackButton = Container.expand(function (trackId, trackName, artist) { var self = Container.call(this); self.trackId = trackId; self.trackName = trackName; self.artist = artist; var background = self.attachAsset('trackButton', { anchorX: 0, anchorY: 0 }); var trackText = new Text2(trackName, { size: 40, fill: 0xFFFFFF }); trackText.anchor.set(0, 0); trackText.x = 20; trackText.y = 20; self.addChild(trackText); var artistText = new Text2(artist, { size: 30, fill: 0xCCCCCC }); artistText.anchor.set(0, 0); artistText.x = 20; artistText.y = 80; self.addChild(artistText); self.setHighlight = function (isHighlighted) { if (isHighlighted) { background.tint = 0x555555; } else { background.tint = 0x333333; } }; self.down = function (x, y, obj) { self.setHighlight(true); }; self.up = function (x, y, obj) { self.setHighlight(false); LK.getSound('button_click').play(); if (typeof self.onSelect === 'function') { self.onSelect(self.trackId); } }; return self; }); var Visualizer = Container.expand(function (numBars) { var self = Container.call(this); var bars = []; var numBars = numBars || 16; var gapSize = 10; var barWidth = 30; var maxBarHeight = 300; for (var i = 0; i < numBars; i++) { var bar = self.attachAsset('visualizer', { anchorX: 0.5, anchorY: 1, x: i * (barWidth + gapSize) - numBars * (barWidth + gapSize) / 2 + barWidth / 2 + gapSize / 2, y: 0, scaleY: 0.1 }); bars.push(bar); } self.update = function () { for (var i = 0; i < bars.length; i++) { var targetHeight = Math.random(); tween(bars[i], { scaleY: 0.1 + targetHeight * 0.9 }, { duration: 200, easing: tween.easeOut }); } }; self.pulse = function () { for (var i = 0; i < bars.length; i++) { var delay = i * 20; var bar = bars[i]; var originalScale = bar.scaleY; LK.setTimeout(function () { tween(bar, { scaleY: originalScale * 1.5 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(bar, { scaleY: originalScale }, { duration: 300, easing: tween.easeIn }); } }); }, delay); } }; return self; }); var VolumeControl = Container.expand(function () { var self = Container.call(this); var volumeBar = self.attachAsset('volumeBar', { anchorX: 0, anchorY: 0.5, x: 0, y: 0 }); var volumeIndicator = self.attachAsset('volumeIndicator', { anchorX: 0.5, anchorY: 0.5, x: 280, y: 0 }); var volumeLabel = new Text2("VOLUME", { size: 30, fill: 0xFFFFFF }); volumeLabel.anchor.set(0, 0.5); volumeLabel.x = -120; volumeLabel.y = 0; self.addChild(volumeLabel); var isDragging = false; self.volume = storage.volume; self.updateIndicatorPosition = function () { volumeIndicator.x = volumeBar.width * self.volume; }; self.updateIndicatorPosition(); self.setVolume = function (volume) { self.volume = Math.max(0, Math.min(1, volume)); storage.volume = self.volume; self.updateIndicatorPosition(); if (typeof self.onVolumeChange === 'function') { self.onVolumeChange(self.volume); } }; volumeBar.interactive = true; volumeBar.down = function (x, y, obj) { isDragging = true; var localX = x - volumeBar.x; var volume = Math.max(0, Math.min(1, localX / volumeBar.width)); self.setVolume(volume); }; volumeBar.up = function (x, y, obj) { isDragging = false; }; volumeBar.move = function (x, y, obj) { if (isDragging) { var localX = x - volumeBar.x; var volume = Math.max(0, Math.min(1, localX / volumeBar.width)); self.setVolume(volume); } }; volumeIndicator.interactive = true; volumeIndicator.down = function (x, y, obj) { isDragging = true; }; volumeIndicator.up = function (x, y, obj) { isDragging = false; }; volumeIndicator.move = function (x, y, obj) { if (isDragging) { var localX = x; var volume = Math.max(0, Math.min(1, localX / volumeBar.width)); self.setVolume(volume); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x111111 }); /**** * Game Code ****/ // Game state variables var currentTrack = storage.currentTrack; var isPlaying = false; var tracks = [{ id: 'hiphop_track_1', name: "Old School Beats", artist: "DJ Smooth" }, { id: 'hiphop_track_2', name: "Street Flow", artist: "MC Rapids" }, { id: 'hiphop_track_3', name: "Urban Groove", artist: "Lyrical Giants" }, { id: 'hiphop_track_4', name: "Concrete Jungle", artist: "City Dwellers" }]; var playlistOrder = storage.playlistOrder; var visualizerUpdateTimer; // Create background game.setBackgroundColor(0x111111); // Create title var titleText = new Text2("HIP-HOP RADIO MIXER", { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); titleText.x = 2048 / 2; titleText.y = 100; game.addChild(titleText); // Create playlist container var playlistContainer = game.addChild(LK.getAsset('playlist', { anchorX: 0.5, anchorY: 0, x: 2048 / 2, y: 220 })); var playlistLabel = new Text2("TRACKS", { size: 50, fill: 0xFFFFFF }); playlistLabel.anchor.set(0.5, 0); playlistLabel.x = 0; playlistLabel.y = 20; playlistContainer.addChild(playlistLabel); // Add track buttons to playlist var trackButtons = []; for (var i = 0; i < tracks.length; i++) { var track = tracks[i]; var trackButton = new TrackButton(i, track.name, track.artist); trackButton.x = -250; trackButton.y = 100 + i * 170; trackButton.onSelect = function (trackId) { selectTrack(trackId); }; playlistContainer.addChild(trackButton); trackButtons.push(trackButton); } // Create controls var controls = new PlaybackControls(); controls.x = 2048 / 2; controls.y = 2732 - 400; game.addChild(controls); controls.onPlay = function () { playCurrentTrack(); }; controls.onPause = function () { pauseCurrentTrack(); }; controls.onNext = function () { playNextTrack(); }; controls.onPrevious = function () { playPreviousTrack(); }; // Create volume control var volumeControl = new VolumeControl(); volumeControl.x = 2048 / 2 - 200; volumeControl.y = 2732 - 300; game.addChild(volumeControl); volumeControl.onVolumeChange = function (volume) { updateVolume(volume); }; // Create now playing info var nowPlayingLabel = new Text2("NOW PLAYING", { size: 40, fill: 0x999999 }); nowPlayingLabel.anchor.set(0.5, 0); nowPlayingLabel.x = 2048 / 2; nowPlayingLabel.y = 2732 - 600; game.addChild(nowPlayingLabel); var nowPlayingTrack = new Text2("", { size: 60, fill: 0xFFFFFF }); nowPlayingTrack.anchor.set(0.5, 0); nowPlayingTrack.x = 2048 / 2; nowPlayingTrack.y = 2732 - 550; game.addChild(nowPlayingTrack); var nowPlayingArtist = new Text2("", { size: 40, fill: 0xCCCCCC }); nowPlayingArtist.anchor.set(0.5, 0); nowPlayingArtist.x = 2048 / 2; nowPlayingArtist.y = 2732 - 490; game.addChild(nowPlayingArtist); // Create visualizer var visualizer = new Visualizer(16); visualizer.x = 2048 / 2; visualizer.y = 2732 - 650; game.addChild(visualizer); // Functions function selectTrack(trackId) { currentTrack = trackId; storage.currentTrack = currentTrack; updateNowPlaying(); if (isPlaying) { playCurrentTrack(); } // Update track button highlights for (var i = 0; i < trackButtons.length; i++) { trackButtons[i].setHighlight(i === currentTrack); } visualizer.pulse(); } function updateNowPlaying() { var track = tracks[currentTrack]; if (track) { nowPlayingTrack.setText(track.name); nowPlayingArtist.setText(track.artist); } else { nowPlayingTrack.setText("No Track Selected"); nowPlayingArtist.setText(""); } } function playCurrentTrack() { var track = tracks[currentTrack]; LK.stopMusic(); // Check if the selected track is "Street Flow" and play hiphoptrack2 instead if (track.name === "Street Flow") { LK.playMusic("hiphoptrack2", { fade: { start: 0, end: volumeControl.volume, duration: 500 } }); // Check if the selected track is "Urban Groove" and play hiphop3 instead } else if (track.name === "Urban Groove") { LK.playMusic("hiphop3", { fade: { start: 0, end: volumeControl.volume, duration: 500 } }); // Check if the selected track is "Concrete Jungle" and play hop4 instead } else if (track.name === "Concrete Jungle") { LK.playMusic("hop4", { fade: { start: 0, end: volumeControl.volume, duration: 500 } }); } else { LK.playMusic(track.id, { fade: { start: 0, end: volumeControl.volume, duration: 500 } }); } isPlaying = true; controls.setPlayingState(true); // Highlight current track in playlist for (var i = 0; i < trackButtons.length; i++) { trackButtons[i].setHighlight(i === currentTrack); } // Start visualizer if (visualizerUpdateTimer) { LK.clearInterval(visualizerUpdateTimer); } visualizerUpdateTimer = LK.setInterval(function () { visualizer.update(); }, 300); } function pauseCurrentTrack() { LK.stopMusic(); isPlaying = false; controls.setPlayingState(false); // Stop visualizer updates if (visualizerUpdateTimer) { LK.clearInterval(visualizerUpdateTimer); visualizerUpdateTimer = null; } } function playNextTrack() { currentTrack = (currentTrack + 1) % tracks.length; storage.currentTrack = currentTrack; updateNowPlaying(); if (isPlaying) { playCurrentTrack(); } visualizer.pulse(); } function playPreviousTrack() { currentTrack = (currentTrack - 1 + tracks.length) % tracks.length; storage.currentTrack = currentTrack; updateNowPlaying(); if (isPlaying) { playCurrentTrack(); } visualizer.pulse(); } function updateVolume(volume) { if (isPlaying) { LK.stopMusic(); var track = tracks[currentTrack]; LK.playMusic(track.id, { volume: volume }); } } // Initialize game state updateNowPlaying(); updateVolume(volumeControl.volume); // The first track will play when the middle button is pressed // Track starts paused, waiting for user interaction isPlaying = false; controls.setPlayingState(false); // No automatic playback - removed playCurrentTrack() call // Make playlist draggable var dragStartY = 0; var initialY = 0; var isDraggingPlaylist = false; game.down = function (x, y, obj) { // Check if touch is on playlist var playlistBounds = { x: playlistContainer.x - playlistContainer.width / 2, y: playlistContainer.y, width: playlistContainer.width, height: playlistContainer.height }; if (x >= playlistBounds.x && x <= playlistBounds.x + playlistBounds.width && y >= playlistBounds.y && y <= playlistBounds.y + playlistBounds.height) { isDraggingPlaylist = true; dragStartY = y; initialY = playlistContainer.y; } }; game.up = function (x, y, obj) { isDraggingPlaylist = false; }; game.move = function (x, y, obj) { if (isDraggingPlaylist) { var deltaY = y - dragStartY; var newY = initialY + deltaY; // Limit scrolling newY = Math.max(220, Math.min(newY, 220)); playlistContainer.y = newY; } }; // Score tracking (number of tracks played) var tracksPlayed = 0; // Update game state game.update = function () { // Increment score when tracks are played if (isPlaying) { if (LK.ticks % 600 === 0) { // Every 10 seconds tracksPlayed++; LK.setScore(tracksPlayed); } } }; // Initialize score LK.setScore(tracksPlayed);
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
currentTrack: 0,
volume: 0.7,
playlistOrder: [0, 1, 2, 3, 4]
});
/****
* Classes
****/
var PlaybackControls = Container.expand(function () {
var self = Container.call(this);
var isPlaying = false;
var playButton = self.attachAsset('playButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0
});
var pauseButton = self.attachAsset('pauseButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0
});
pauseButton.visible = false;
var prevButton = self.attachAsset('skipButton', {
anchorX: 0.5,
anchorY: 0.5,
x: -150,
y: 0
});
var nextButton = self.attachAsset('skipButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 150,
y: 0
});
self.setPlayingState = function (playing) {
isPlaying = playing;
playButton.visible = !isPlaying;
pauseButton.visible = isPlaying;
};
playButton.interactive = true;
playButton.down = function (x, y, obj) {
tween(playButton, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
playButton.up = function (x, y, obj) {
tween(playButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
LK.getSound('button_click').play();
self.setPlayingState(true);
if (typeof self.onPlay === 'function') {
self.onPlay();
}
};
pauseButton.interactive = true;
pauseButton.down = function (x, y, obj) {
tween(pauseButton, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
pauseButton.up = function (x, y, obj) {
tween(pauseButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
LK.getSound('button_click').play();
self.setPlayingState(false);
if (typeof self.onPause === 'function') {
self.onPause();
}
};
prevButton.interactive = true;
prevButton.down = function (x, y, obj) {
tween(prevButton, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
prevButton.up = function (x, y, obj) {
tween(prevButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
LK.getSound('button_click').play();
if (typeof self.onPrevious === 'function') {
self.onPrevious();
}
};
nextButton.interactive = true;
nextButton.down = function (x, y, obj) {
tween(nextButton, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
nextButton.up = function (x, y, obj) {
tween(nextButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
LK.getSound('button_click').play();
if (typeof self.onNext === 'function') {
self.onNext();
}
};
return self;
});
var TrackButton = Container.expand(function (trackId, trackName, artist) {
var self = Container.call(this);
self.trackId = trackId;
self.trackName = trackName;
self.artist = artist;
var background = self.attachAsset('trackButton', {
anchorX: 0,
anchorY: 0
});
var trackText = new Text2(trackName, {
size: 40,
fill: 0xFFFFFF
});
trackText.anchor.set(0, 0);
trackText.x = 20;
trackText.y = 20;
self.addChild(trackText);
var artistText = new Text2(artist, {
size: 30,
fill: 0xCCCCCC
});
artistText.anchor.set(0, 0);
artistText.x = 20;
artistText.y = 80;
self.addChild(artistText);
self.setHighlight = function (isHighlighted) {
if (isHighlighted) {
background.tint = 0x555555;
} else {
background.tint = 0x333333;
}
};
self.down = function (x, y, obj) {
self.setHighlight(true);
};
self.up = function (x, y, obj) {
self.setHighlight(false);
LK.getSound('button_click').play();
if (typeof self.onSelect === 'function') {
self.onSelect(self.trackId);
}
};
return self;
});
var Visualizer = Container.expand(function (numBars) {
var self = Container.call(this);
var bars = [];
var numBars = numBars || 16;
var gapSize = 10;
var barWidth = 30;
var maxBarHeight = 300;
for (var i = 0; i < numBars; i++) {
var bar = self.attachAsset('visualizer', {
anchorX: 0.5,
anchorY: 1,
x: i * (barWidth + gapSize) - numBars * (barWidth + gapSize) / 2 + barWidth / 2 + gapSize / 2,
y: 0,
scaleY: 0.1
});
bars.push(bar);
}
self.update = function () {
for (var i = 0; i < bars.length; i++) {
var targetHeight = Math.random();
tween(bars[i], {
scaleY: 0.1 + targetHeight * 0.9
}, {
duration: 200,
easing: tween.easeOut
});
}
};
self.pulse = function () {
for (var i = 0; i < bars.length; i++) {
var delay = i * 20;
var bar = bars[i];
var originalScale = bar.scaleY;
LK.setTimeout(function () {
tween(bar, {
scaleY: originalScale * 1.5
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bar, {
scaleY: originalScale
}, {
duration: 300,
easing: tween.easeIn
});
}
});
}, delay);
}
};
return self;
});
var VolumeControl = Container.expand(function () {
var self = Container.call(this);
var volumeBar = self.attachAsset('volumeBar', {
anchorX: 0,
anchorY: 0.5,
x: 0,
y: 0
});
var volumeIndicator = self.attachAsset('volumeIndicator', {
anchorX: 0.5,
anchorY: 0.5,
x: 280,
y: 0
});
var volumeLabel = new Text2("VOLUME", {
size: 30,
fill: 0xFFFFFF
});
volumeLabel.anchor.set(0, 0.5);
volumeLabel.x = -120;
volumeLabel.y = 0;
self.addChild(volumeLabel);
var isDragging = false;
self.volume = storage.volume;
self.updateIndicatorPosition = function () {
volumeIndicator.x = volumeBar.width * self.volume;
};
self.updateIndicatorPosition();
self.setVolume = function (volume) {
self.volume = Math.max(0, Math.min(1, volume));
storage.volume = self.volume;
self.updateIndicatorPosition();
if (typeof self.onVolumeChange === 'function') {
self.onVolumeChange(self.volume);
}
};
volumeBar.interactive = true;
volumeBar.down = function (x, y, obj) {
isDragging = true;
var localX = x - volumeBar.x;
var volume = Math.max(0, Math.min(1, localX / volumeBar.width));
self.setVolume(volume);
};
volumeBar.up = function (x, y, obj) {
isDragging = false;
};
volumeBar.move = function (x, y, obj) {
if (isDragging) {
var localX = x - volumeBar.x;
var volume = Math.max(0, Math.min(1, localX / volumeBar.width));
self.setVolume(volume);
}
};
volumeIndicator.interactive = true;
volumeIndicator.down = function (x, y, obj) {
isDragging = true;
};
volumeIndicator.up = function (x, y, obj) {
isDragging = false;
};
volumeIndicator.move = function (x, y, obj) {
if (isDragging) {
var localX = x;
var volume = Math.max(0, Math.min(1, localX / volumeBar.width));
self.setVolume(volume);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111
});
/****
* Game Code
****/
// Game state variables
var currentTrack = storage.currentTrack;
var isPlaying = false;
var tracks = [{
id: 'hiphop_track_1',
name: "Old School Beats",
artist: "DJ Smooth"
}, {
id: 'hiphop_track_2',
name: "Street Flow",
artist: "MC Rapids"
}, {
id: 'hiphop_track_3',
name: "Urban Groove",
artist: "Lyrical Giants"
}, {
id: 'hiphop_track_4',
name: "Concrete Jungle",
artist: "City Dwellers"
}];
var playlistOrder = storage.playlistOrder;
var visualizerUpdateTimer;
// Create background
game.setBackgroundColor(0x111111);
// Create title
var titleText = new Text2("HIP-HOP RADIO MIXER", {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.x = 2048 / 2;
titleText.y = 100;
game.addChild(titleText);
// Create playlist container
var playlistContainer = game.addChild(LK.getAsset('playlist', {
anchorX: 0.5,
anchorY: 0,
x: 2048 / 2,
y: 220
}));
var playlistLabel = new Text2("TRACKS", {
size: 50,
fill: 0xFFFFFF
});
playlistLabel.anchor.set(0.5, 0);
playlistLabel.x = 0;
playlistLabel.y = 20;
playlistContainer.addChild(playlistLabel);
// Add track buttons to playlist
var trackButtons = [];
for (var i = 0; i < tracks.length; i++) {
var track = tracks[i];
var trackButton = new TrackButton(i, track.name, track.artist);
trackButton.x = -250;
trackButton.y = 100 + i * 170;
trackButton.onSelect = function (trackId) {
selectTrack(trackId);
};
playlistContainer.addChild(trackButton);
trackButtons.push(trackButton);
}
// Create controls
var controls = new PlaybackControls();
controls.x = 2048 / 2;
controls.y = 2732 - 400;
game.addChild(controls);
controls.onPlay = function () {
playCurrentTrack();
};
controls.onPause = function () {
pauseCurrentTrack();
};
controls.onNext = function () {
playNextTrack();
};
controls.onPrevious = function () {
playPreviousTrack();
};
// Create volume control
var volumeControl = new VolumeControl();
volumeControl.x = 2048 / 2 - 200;
volumeControl.y = 2732 - 300;
game.addChild(volumeControl);
volumeControl.onVolumeChange = function (volume) {
updateVolume(volume);
};
// Create now playing info
var nowPlayingLabel = new Text2("NOW PLAYING", {
size: 40,
fill: 0x999999
});
nowPlayingLabel.anchor.set(0.5, 0);
nowPlayingLabel.x = 2048 / 2;
nowPlayingLabel.y = 2732 - 600;
game.addChild(nowPlayingLabel);
var nowPlayingTrack = new Text2("", {
size: 60,
fill: 0xFFFFFF
});
nowPlayingTrack.anchor.set(0.5, 0);
nowPlayingTrack.x = 2048 / 2;
nowPlayingTrack.y = 2732 - 550;
game.addChild(nowPlayingTrack);
var nowPlayingArtist = new Text2("", {
size: 40,
fill: 0xCCCCCC
});
nowPlayingArtist.anchor.set(0.5, 0);
nowPlayingArtist.x = 2048 / 2;
nowPlayingArtist.y = 2732 - 490;
game.addChild(nowPlayingArtist);
// Create visualizer
var visualizer = new Visualizer(16);
visualizer.x = 2048 / 2;
visualizer.y = 2732 - 650;
game.addChild(visualizer);
// Functions
function selectTrack(trackId) {
currentTrack = trackId;
storage.currentTrack = currentTrack;
updateNowPlaying();
if (isPlaying) {
playCurrentTrack();
}
// Update track button highlights
for (var i = 0; i < trackButtons.length; i++) {
trackButtons[i].setHighlight(i === currentTrack);
}
visualizer.pulse();
}
function updateNowPlaying() {
var track = tracks[currentTrack];
if (track) {
nowPlayingTrack.setText(track.name);
nowPlayingArtist.setText(track.artist);
} else {
nowPlayingTrack.setText("No Track Selected");
nowPlayingArtist.setText("");
}
}
function playCurrentTrack() {
var track = tracks[currentTrack];
LK.stopMusic();
// Check if the selected track is "Street Flow" and play hiphoptrack2 instead
if (track.name === "Street Flow") {
LK.playMusic("hiphoptrack2", {
fade: {
start: 0,
end: volumeControl.volume,
duration: 500
}
});
// Check if the selected track is "Urban Groove" and play hiphop3 instead
} else if (track.name === "Urban Groove") {
LK.playMusic("hiphop3", {
fade: {
start: 0,
end: volumeControl.volume,
duration: 500
}
});
// Check if the selected track is "Concrete Jungle" and play hop4 instead
} else if (track.name === "Concrete Jungle") {
LK.playMusic("hop4", {
fade: {
start: 0,
end: volumeControl.volume,
duration: 500
}
});
} else {
LK.playMusic(track.id, {
fade: {
start: 0,
end: volumeControl.volume,
duration: 500
}
});
}
isPlaying = true;
controls.setPlayingState(true);
// Highlight current track in playlist
for (var i = 0; i < trackButtons.length; i++) {
trackButtons[i].setHighlight(i === currentTrack);
}
// Start visualizer
if (visualizerUpdateTimer) {
LK.clearInterval(visualizerUpdateTimer);
}
visualizerUpdateTimer = LK.setInterval(function () {
visualizer.update();
}, 300);
}
function pauseCurrentTrack() {
LK.stopMusic();
isPlaying = false;
controls.setPlayingState(false);
// Stop visualizer updates
if (visualizerUpdateTimer) {
LK.clearInterval(visualizerUpdateTimer);
visualizerUpdateTimer = null;
}
}
function playNextTrack() {
currentTrack = (currentTrack + 1) % tracks.length;
storage.currentTrack = currentTrack;
updateNowPlaying();
if (isPlaying) {
playCurrentTrack();
}
visualizer.pulse();
}
function playPreviousTrack() {
currentTrack = (currentTrack - 1 + tracks.length) % tracks.length;
storage.currentTrack = currentTrack;
updateNowPlaying();
if (isPlaying) {
playCurrentTrack();
}
visualizer.pulse();
}
function updateVolume(volume) {
if (isPlaying) {
LK.stopMusic();
var track = tracks[currentTrack];
LK.playMusic(track.id, {
volume: volume
});
}
}
// Initialize game state
updateNowPlaying();
updateVolume(volumeControl.volume);
// The first track will play when the middle button is pressed
// Track starts paused, waiting for user interaction
isPlaying = false;
controls.setPlayingState(false);
// No automatic playback - removed playCurrentTrack() call
// Make playlist draggable
var dragStartY = 0;
var initialY = 0;
var isDraggingPlaylist = false;
game.down = function (x, y, obj) {
// Check if touch is on playlist
var playlistBounds = {
x: playlistContainer.x - playlistContainer.width / 2,
y: playlistContainer.y,
width: playlistContainer.width,
height: playlistContainer.height
};
if (x >= playlistBounds.x && x <= playlistBounds.x + playlistBounds.width && y >= playlistBounds.y && y <= playlistBounds.y + playlistBounds.height) {
isDraggingPlaylist = true;
dragStartY = y;
initialY = playlistContainer.y;
}
};
game.up = function (x, y, obj) {
isDraggingPlaylist = false;
};
game.move = function (x, y, obj) {
if (isDraggingPlaylist) {
var deltaY = y - dragStartY;
var newY = initialY + deltaY;
// Limit scrolling
newY = Math.max(220, Math.min(newY, 220));
playlistContainer.y = newY;
}
};
// Score tracking (number of tracks played)
var tracksPlayed = 0;
// Update game state
game.update = function () {
// Increment score when tracks are played
if (isPlaying) {
if (LK.ticks % 600 === 0) {
// Every 10 seconds
tracksPlayed++;
LK.setScore(tracksPlayed);
}
}
};
// Initialize score
LK.setScore(tracksPlayed);