Code edit (1 edits merged)
Please save this source code
User prompt
If the ev counter is 1 or more, create a new object that can be dragged when clicked
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (loadedCounts) {' Line Number: 405
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'storage.get('tapBoxCounts', function (savedTapCounts) {' Line Number: 404 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('tapBoxCounts', function (savedTapCounts) {' Line Number: 404
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404
User prompt
If the ev counter is 1 or more, when clicked, create a new object and decrease the ev counter
User prompt
If the ev counter is 1 or more, create a new object when clicked
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var savedTapCounts = storage.get('tapBoxCounts');' Line Number: 404 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
save this code
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// Box class 5 (renamed to Asker)
var Asker = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('tapBox5', {
anchorX: 0.5,
anchorY: 0.5
});
self.boxAsset = boxAsset;
self.tapCount = 0;
self.counterTxt = new Text2('0', {
size: 90,
fill: 0x222222
});
self.counterTxt.anchor.set(0.5, 0.5);
self.counterTxt.x = 0;
self.counterTxt.y = 0;
self.addChild(self.counterTxt);
self.down = function (x, y, obj) {
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
self.boxAsset.scaleX = 2.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.boxAsset, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
// Find Et and Odun boxes in tapBoxes
var etBox = null;
var odunBox = null;
for (var i = 0; i < tapBoxes.length; i++) {
if (tapBoxes[i] && tapBoxes[i].constructor === Et) {
etBox = tapBoxes[i];
}
if (tapBoxes[i] && tapBoxes[i].constructor === Odun) {
odunBox = tapBoxes[i];
}
}
// Only allow decrement if requirements are met
if (etBox && odunBox && etBox.tapCount >= 20 && odunBox.tapCount >= 10) {
etBox.tapCount -= 20;
odunBox.tapCount -= 10;
if (etBox.tapCount < 0) {
etBox.tapCount = 0;
}
if (odunBox.tapCount < 0) {
odunBox.tapCount = 0;
}
etBox.counterTxt.setText(etBox.tapCount);
odunBox.counterTxt.setText(odunBox.tapCount);
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
}
};
return self;
});
// Box class 3 (renamed to Et)
var Et = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('tapBox3', {
anchorX: 0.5,
anchorY: 0.5
});
self.boxAsset = boxAsset;
self.tapCount = 0;
self.counterTxt = new Text2('0', {
size: 90,
fill: 0x222222
});
self.counterTxt.anchor.set(0.5, 0.5);
self.counterTxt.x = 0;
self.counterTxt.y = 0;
self.addChild(self.counterTxt);
self.down = function (x, y, obj) {
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
self.boxAsset.scaleX = 1.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.boxAsset, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
};
return self;
});
// Box class 1 (renamed to Odun)
var Odun = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('odun', {
anchorX: 0.5,
anchorY: 0.5
});
self.boxAsset = boxAsset;
self.tapCount = 0;
self.counterTxt = new Text2('0', {
size: 90,
fill: 0x222222
});
self.counterTxt.anchor.set(0.5, 0.5);
self.counterTxt.x = 0;
self.counterTxt.y = 0;
self.addChild(self.counterTxt);
self.down = function (x, y, obj) {
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
self.boxAsset.scaleX = 1.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.boxAsset, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
};
return self;
});
// Box class 6 (renamed to Silah)
var Silah = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('tapBox6', {
anchorX: 0.5,
anchorY: 0.5
});
self.boxAsset = boxAsset;
self.tapCount = 0;
self.counterTxt = new Text2('0', {
size: 90,
fill: 0x222222
});
self.counterTxt.anchor.set(0.5, 0.5);
self.counterTxt.x = 0;
self.counterTxt.y = 0;
self.addChild(self.counterTxt);
self.down = function (x, y, obj) {
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
self.boxAsset.scaleX = 1.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.boxAsset, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
// Find Odun and Tas boxes in tapBoxes
var odunBox = null;
var tasBox = null;
for (var i = 0; i < tapBoxes.length; i++) {
if (tapBoxes[i] && tapBoxes[i].constructor === Odun) {
odunBox = tapBoxes[i];
}
if (tapBoxes[i] && tapBoxes[i].constructor === Tas) {
tasBox = tapBoxes[i];
}
}
// Only allow decrement if requirements are met
if (odunBox && tasBox && odunBox.tapCount >= 20 && tasBox.tapCount >= 10) {
odunBox.tapCount -= 20;
tasBox.tapCount -= 10;
if (odunBox.tapCount < 0) {
odunBox.tapCount = 0;
}
if (tasBox.tapCount < 0) {
tasBox.tapCount = 0;
}
odunBox.counterTxt.setText(odunBox.tapCount);
tasBox.counterTxt.setText(tasBox.tapCount);
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
}
};
return self;
});
// Box class 2 (renamed to Tas)
var Tas = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('tas', {
anchorX: 0.5,
anchorY: 0.5
});
self.boxAsset = boxAsset;
self.tapCount = 0;
self.counterTxt = new Text2('0', {
size: 90,
fill: 0x006400
});
self.counterTxt.anchor.set(0.5, 0.5);
self.counterTxt.x = 0;
self.counterTxt.y = 0;
self.addChild(self.counterTxt);
self.down = function (x, y, obj) {
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
self.boxAsset.scaleX = 1.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.boxAsset, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
};
return self;
});
// Box class 4 (renamed to ev)
var ev = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('ev', {
anchorX: 0.5,
anchorY: 0.5
});
self.boxAsset = boxAsset;
self.tapCount = 0;
self.counterTxt = new Text2('0', {
size: 90,
fill: 0x222222
});
self.counterTxt.anchor.set(0.5, 0.5);
self.counterTxt.x = 0;
self.counterTxt.y = 0;
self.addChild(self.counterTxt);
self.down = function (x, y, obj) {
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
self.boxAsset.scaleX = 1.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self.boxAsset, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
// Find Tas and Odun boxes in tapBoxes
var tasBox = null;
var odunBox = null;
for (var i = 0; i < tapBoxes.length; i++) {
if (tapBoxes[i] && tapBoxes[i].constructor === Tas) {
tasBox = tapBoxes[i];
}
if (tapBoxes[i] && tapBoxes[i].constructor === Odun) {
odunBox = tapBoxes[i];
}
}
// Only allow decrement if requirements are met
if (tasBox && odunBox && tasBox.tapCount >= 20 && odunBox.tapCount >= 10) {
tasBox.tapCount -= 20;
odunBox.tapCount -= 10;
if (tasBox.tapCount < 0) {
tasBox.tapCount = 0;
}
if (odunBox.tapCount < 0) {
odunBox.tapCount = 0;
}
tasBox.counterTxt.setText(tasBox.tapCount);
odunBox.counterTxt.setText(odunBox.tapCount);
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// Box colors for variety
// No global score display needed; each box is fully independent
var boxColors = [0xff5252,
// red
0x40c4ff,
// blue
0x69f0ae,
// green
0xffd740,
// yellow
0xb388ff,
// purple
0xff80ab // pink
];
// Register box asset (all boxes use same size, color is set per instance)
// Layout: 2 rows x 3 columns, centered
var boxSize = 340;
var hGap = 120;
var vGap = 160;
var cols = 3;
var rows = 2;
var totalWidth = cols * boxSize + (cols - 1) * hGap;
var totalHeight = rows * boxSize + (rows - 1) * vGap;
var startX = (2048 - totalWidth) / 2 + boxSize / 2;
var startY = (2732 - totalHeight) / 2 + boxSize / 2;
// Store all boxes for possible future use
var tapBoxes = [];
var boxClasses = [Odun, Tas, Et, ev, Asker, Silah];
var boxIdx = 0;
// Load saved tapCounts if available (sync)
var savedTapCounts = storage.tapBoxCounts;
if (!Array.isArray(savedTapCounts)) {
savedTapCounts = [0, 0, 0, 0, 0, 0];
}
// After loading, initialize boxes
var boxIdx = 0;
for (var row = 0; row < rows; row++) {
for (var col = 0; col < cols; col++) {
var idx = row * cols + col;
var BoxClass = boxClasses[boxIdx];
var box = new BoxClass();
box.x = startX + col * (boxSize + hGap);
box.y = startY + row * (boxSize + vGap);
// Set color per box
if (BoxClass === Odun) {
box.boxAsset.color = 0xff5252; // red
} else {
box.boxAsset.color = boxColors[idx % boxColors.length];
}
game.addChild(box);
tapBoxes.push(box);
// Restore tapCount if available
if (typeof savedTapCounts[boxIdx] === "number" && savedTapCounts[boxIdx] > 0) {
box.tapCount = savedTapCounts[boxIdx];
if (box.counterTxt) {
box.counterTxt.setText(box.tapCount);
}
}
boxIdx++;
}
}
// Save tapCounts on every change
function saveTapBoxCounts() {
var counts = [];
for (var i = 0; i < tapBoxes.length; i++) {
counts.push(tapBoxes[i].tapCount || 0);
}
storage.set('tapBoxCounts', counts);
}
// Patch all box classes to call saveTapBoxCounts after tapCount changes
var _oldDowns = [];
for (var i = 0; i < boxClasses.length; i++) {
(function (idx) {
var Cls = boxClasses[idx];
var proto = Cls.prototype;
if (proto && typeof proto.down === "function") {
if (!_oldDowns[idx]) {
_oldDowns[idx] = proto.down;
}
proto.down = function (x, y, obj) {
_oldDowns[idx].apply(this, arguments);
saveTapBoxCounts();
};
}
})(i);
}
// No dragging or move logic needed; all interaction is per-box
// No update loop needed for this minimal game
// No timer/game over logic for MVP
// End of file ===================================================================
--- original.js
+++ change.js
@@ -28,9 +28,9 @@
tween.stop(self.boxAsset, {
scaleX: true,
scaleY: true
});
- self.boxAsset.scaleX = 1.0;
+ self.boxAsset.scaleX = 2.0;
self.boxAsset.scaleY = 1.0;
tween(self.boxAsset, {
scaleX: 1.2,
scaleY: 1.2
@@ -61,41 +61,22 @@
// Only allow decrement if requirements are met
if (etBox && odunBox && etBox.tapCount >= 20 && odunBox.tapCount >= 10) {
etBox.tapCount -= 20;
odunBox.tapCount -= 10;
- if (etBox.tapCount < 0) etBox.tapCount = 0;
- if (odunBox.tapCount < 0) odunBox.tapCount = 0;
+ if (etBox.tapCount < 0) {
+ etBox.tapCount = 0;
+ }
+ if (odunBox.tapCount < 0) {
+ odunBox.tapCount = 0;
+ }
etBox.counterTxt.setText(etBox.tapCount);
odunBox.counterTxt.setText(odunBox.tapCount);
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
}
};
return self;
});
-// Draggable object class
-var DraggableObj = Container.expand(function () {
- var self = Container.call(this);
- var asset = self.attachAsset('ev', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.asset = asset;
- self.isDragging = false;
- self.offsetX = 0;
- self.offsetY = 0;
- self.down = function (x, y, obj) {
- self.isDragging = true;
- // Store offset from center for smooth dragging
- self.offsetX = self.x - x;
- self.offsetY = self.y - y;
- };
- self.up = function (x, y, obj) {
- self.isDragging = false;
- };
- return self;
-});
-// Track draggable objects
// Box class 3 (renamed to Et)
var Et = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('tapBox3', {
@@ -239,10 +220,14 @@
// Only allow decrement if requirements are met
if (odunBox && tasBox && odunBox.tapCount >= 20 && tasBox.tapCount >= 10) {
odunBox.tapCount -= 20;
tasBox.tapCount -= 10;
- if (odunBox.tapCount < 0) odunBox.tapCount = 0;
- if (tasBox.tapCount < 0) tasBox.tapCount = 0;
+ if (odunBox.tapCount < 0) {
+ odunBox.tapCount = 0;
+ }
+ if (tasBox.tapCount < 0) {
+ tasBox.tapCount = 0;
+ }
odunBox.counterTxt.setText(odunBox.tapCount);
tasBox.counterTxt.setText(tasBox.tapCount);
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
@@ -349,10 +334,14 @@
// Only allow decrement if requirements are met
if (tasBox && odunBox && tasBox.tapCount >= 20 && odunBox.tapCount >= 10) {
tasBox.tapCount -= 20;
odunBox.tapCount -= 10;
- if (tasBox.tapCount < 0) tasBox.tapCount = 0;
- if (odunBox.tapCount < 0) odunBox.tapCount = 0;
+ if (tasBox.tapCount < 0) {
+ tasBox.tapCount = 0;
+ }
+ if (odunBox.tapCount < 0) {
+ odunBox.tapCount = 0;
+ }
tasBox.counterTxt.setText(tasBox.tapCount);
odunBox.counterTxt.setText(odunBox.tapCount);
self.tapCount += 1;
self.counterTxt.setText(self.tapCount);
@@ -370,10 +359,10 @@
/****
* Game Code
****/
-// No global score display needed; each box is fully independent
// Box colors for variety
+// No global score display needed; each box is fully independent
var boxColors = [0xff5252,
// red
0x40c4ff,
// blue
@@ -424,9 +413,11 @@
tapBoxes.push(box);
// Restore tapCount if available
if (typeof savedTapCounts[boxIdx] === "number" && savedTapCounts[boxIdx] > 0) {
box.tapCount = savedTapCounts[boxIdx];
- if (box.counterTxt) box.counterTxt.setText(box.tapCount);
+ if (box.counterTxt) {
+ box.counterTxt.setText(box.tapCount);
+ }
}
boxIdx++;
}
}
@@ -444,68 +435,18 @@
(function (idx) {
var Cls = boxClasses[idx];
var proto = Cls.prototype;
if (proto && typeof proto.down === "function") {
- if (!_oldDowns[idx]) _oldDowns[idx] = proto.down;
+ if (!_oldDowns[idx]) {
+ _oldDowns[idx] = proto.down;
+ }
proto.down = function (x, y, obj) {
_oldDowns[idx].apply(this, arguments);
saveTapBoxCounts();
};
}
})(i);
}
-// Track draggable objects
-var draggableObjs = [];
-// Patch ev.down to create draggable object if tapCount >= 1
-(function () {
- var evIdx = boxClasses.indexOf(ev);
- if (evIdx !== -1) {
- var proto = boxClasses[evIdx].prototype;
- var oldDown = _oldDowns[evIdx];
- proto.down = function (x, y, obj) {
- oldDown.apply(this, arguments);
- saveTapBoxCounts();
- if (this.tapCount >= 1) {
- // Only create one draggable at a time
- if (draggableObjs.length === 0) {
- var dragObj = new DraggableObj();
- // Place at center of ev box
- dragObj.x = this.x;
- dragObj.y = this.y;
- game.addChild(dragObj);
- draggableObjs.push(dragObj);
- }
- }
- };
- }
-})();
-// Drag logic for draggable objects
-var dragTarget = null;
-game.down = function (x, y, obj) {
- // Check if any draggable object is pressed
- for (var i = 0; i < draggableObjs.length; i++) {
- var d = draggableObjs[i];
- // Simple hit test: check if (x, y) is inside asset bounds
- var halfW = d.asset.width / 2;
- var halfH = d.asset.height / 2;
- if (x >= d.x - halfW && x <= d.x + halfW && y >= d.y - halfH && y <= d.y + halfH) {
- dragTarget = d;
- d.down(x, y, obj);
- break;
- }
- }
-};
-game.move = function (x, y, obj) {
- if (dragTarget && dragTarget.isDragging) {
- dragTarget.x = x + dragTarget.offsetX;
- dragTarget.y = y + dragTarget.offsetY;
- }
-};
-game.up = function (x, y, obj) {
- if (dragTarget) {
- dragTarget.up(x, y, obj);
- dragTarget = null;
- }
-};
+// No dragging or move logic needed; all interaction is per-box
// No update loop needed for this minimal game
// No timer/game over logic for MVP
-// End of file;
\ No newline at end of file
+// End of file
\ No newline at end of file