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 = 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 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; }); // 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', { 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 ****/ // No global score display needed; each box is fully independent // Box colors for variety 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); } // 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 update loop needed for this minimal game // No timer/game over logic for MVP // End of file;
===================================================================
--- original.js
+++ change.js
@@ -71,8 +71,31 @@
}
};
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', {
@@ -429,8 +452,60 @@
};
}
})(i);
}
-// No dragging or move logic needed; all interaction is per-box
+// 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 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