From 46e0619034eaecc7d079feb9d5979da09b51bd10 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 26 Nov 2023 23:23:16 +0900 Subject: [PATCH 01/17] Added skip button for iOS --- TODO.md | 3 ++ src/icons/dark/fast-forward-button.png | Bin 0 -> 4794 bytes src/icons/light/fast-forward-button.png | Bin 0 -> 4791 bytes src/theory.ts | 37 ++++++++++++++++++++---- theory.js | 33 +++++++++++++++++---- 5 files changed, 63 insertions(+), 10 deletions(-) create mode 100644 src/icons/dark/fast-forward-button.png create mode 100644 src/icons/light/fast-forward-button.png diff --git a/TODO.md b/TODO.md index c5acd06..9468f81 100644 --- a/TODO.md +++ b/TODO.md @@ -112,6 +112,9 @@ do nothing. Do you feel like it could be more interesting? - Calendula - [x] Nerf spread rate to 1/3? Sum equals 1.5 making the pub mult coefficient 2 instead of 1.8 +- [ ] Button that skips tutorial for iOS players +- [ ] Dedicated save file for playtesting + - [ ] Change /sec indicators to /hr (in-game) and display 5x the value - Counter-argument: all parameters display /sec diff --git a/src/icons/dark/fast-forward-button.png b/src/icons/dark/fast-forward-button.png new file mode 100644 index 0000000000000000000000000000000000000000..c56a6e6fa1aa981b8e20579aab9a55be4c8676ef GIT binary patch literal 4794 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 A82|tP literal 0 HcmV?d00001 diff --git a/src/icons/light/fast-forward-button.png b/src/icons/light/fast-forward-button.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1a195fe2c09c2cc19579bb2646b666e29b431e GIT binary patch literal 4791 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 literal 0 HcmV?d00001 diff --git a/src/theory.ts b/src/theory.ts index e14a57f..d8e558e 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -93,6 +93,7 @@ const LOC_STRINGS = {3} (plot {1}, {2}).\\\\\n\n\\\\{4}`, labelSave: 'Last saved: {0}s', + labelSkip: 'Skip tutorial', labelWater: 'Water', labelActions: ['Harvest', 'Prune'], labelFilter: 'Filter: ', @@ -649,7 +650,7 @@ Well then, welcome to... class.` Can't even bear to look at this soil... Go till it, we'll start in the morning. -And, if you ever get lost, go peek at my bookshelf.` +And well, if you ever get lost, go peek at my bookshelf.` } ], basil: @@ -4528,8 +4529,7 @@ const settingsLabel = ui.createLatexLabel margin: new Thickness(0, 9), text: () => { - let multiplier = game.isRewardActive ? 1.5 : 1; - let dt = (time - lastSave) / multiplier; + let dt = (time - lastSave) / speeds[speedIdx]; if(dt < 30) return Localization.get('SettingsPopupTitle'); return Localization.format(getLoc('labelSave'), dt.toFixed(1)); @@ -4539,12 +4539,35 @@ const settingsLabel = ui.createLatexLabel }); const settingsFrame = createFramedButton ({ - column: 0, + row: 0, column: 0, horizontalOptions: LayoutOptions.START }, 2, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/spoted-flower.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/spoted-flower.png')); +const skipLabel = ui.createLatexLabel +({ + row: 1, column: 1, + isVisible: !finishedTutorial, + verticalTextAlignment: TextAlignment.START, + margin: new Thickness(0, 9), + text: getLoc('labelSkip'), + fontSize: 10, + textColor: Color.TEXT_MEDIUM +}); +const skipFrame = createFramedButton +({ + row: 1, column: 0, + isVisible: !finishedTutorial, + horizontalOptions: LayoutOptions.START +}, 2, () => +{ + plotPerma.buy(1); + updateAvailability(); +}, game.settings.theme == Theme.LIGHT ? +ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/fast-forward-button.png') : +ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/fast-forward-button.png')); + var switchPlant: Upgrade; var viewColony: Upgrade; var switchColony: Upgrade; @@ -4908,6 +4931,8 @@ var updateAvailability = () => switchPlant.isAvailable = !manager.colonies[plotIdx].length; viewColony.isAvailable = manager.colonies[plotIdx].length >= 1; switchColony.isAvailable = manager.colonies[plotIdx].length > 1; + skipLabel.isVisible = !finishedTutorial; + skipFrame.isVisible = !finishedTutorial; } for(let i = 0; i < plotPerma.level; ++i) { @@ -5030,7 +5055,9 @@ var getEquationOverlay = () => children: [ settingsFrame, - settingsLabel + settingsLabel, + skipFrame, + skipLabel ] }), ui.createGrid diff --git a/theory.js b/theory.js index 9b30a8e..4e6b76f 100644 --- a/theory.js +++ b/theory.js @@ -71,6 +71,7 @@ const LOC_STRINGS = { actionConfirmDialogue: `You are about to perform a {0} on\\\\ {3} (plot {1}, {2}).\\\\\n\n\\\\{4}`, labelSave: 'Last saved: {0}s', + labelSkip: 'Skip tutorial', labelWater: 'Water', labelActions: ['Harvest', 'Prune'], labelFilter: 'Filter: ', @@ -564,7 +565,7 @@ Well then, welcome to... class.` Can't even bear to look at this soil... Go till it, we'll start in the morning. -And, if you ever get lost, go peek at my bookshelf.` +And well, if you ever get lost, go peek at my bookshelf.` } ], basil: { @@ -3490,8 +3491,7 @@ const settingsLabel = ui.createLatexLabel({ verticalTextAlignment: TextAlignment.START, margin: new Thickness(0, 9), text: () => { - let multiplier = game.isRewardActive ? 1.5 : 1; - let dt = (time - lastSave) / multiplier; + let dt = (time - lastSave) / speeds[speedIdx]; if (dt < 30) return Localization.get('SettingsPopupTitle'); return Localization.format(getLoc('labelSave'), dt.toFixed(1)); @@ -3500,11 +3500,30 @@ const settingsLabel = ui.createLatexLabel({ textColor: Color.TEXT_MEDIUM }); const settingsFrame = createFramedButton({ - column: 0, + row: 0, column: 0, horizontalOptions: LayoutOptions.START }, 2, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/spoted-flower.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/spoted-flower.png')); +const skipLabel = ui.createLatexLabel({ + row: 1, column: 1, + isVisible: !finishedTutorial, + verticalTextAlignment: TextAlignment.START, + margin: new Thickness(0, 9), + text: getLoc('labelSkip'), + fontSize: 10, + textColor: Color.TEXT_MEDIUM +}); +const skipFrame = createFramedButton({ + row: 1, column: 0, + isVisible: !finishedTutorial, + horizontalOptions: LayoutOptions.START +}, 2, () => { + plotPerma.buy(1); + updateAvailability(); +}, game.settings.theme == Theme.LIGHT ? + ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/fast-forward-button.png') : + ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/fast-forward-button.png')); var switchPlant; var viewColony; var switchColony; @@ -3794,6 +3813,8 @@ var updateAvailability = () => { switchPlant.isAvailable = !manager.colonies[plotIdx].length; viewColony.isAvailable = manager.colonies[plotIdx].length >= 1; switchColony.isAvailable = manager.colonies[plotIdx].length > 1; + skipLabel.isVisible = !finishedTutorial; + skipFrame.isVisible = !finishedTutorial; } for (let i = 0; i < plotPerma.level; ++i) { for (let j = 0; j < plantUnlocks.length; ++j) @@ -3898,7 +3919,9 @@ var getEquationOverlay = () => { cascadeInputTransparent: false, children: [ settingsFrame, - settingsLabel + settingsLabel, + skipFrame, + skipLabel ] }), ui.createGrid({ From 5a50deb5debba5dd0d13ad24f27b1bed007e8c5f Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 26 Nov 2023 23:37:24 +0900 Subject: [PATCH 02/17] Added apple icons --- src/icons/dark/apple-seeds.png | Bin 0 -> 9775 bytes src/icons/dark/shiny-apple.png | Bin 0 -> 8737 bytes src/icons/light/apple-seeds.png | Bin 0 -> 8241 bytes src/icons/light/shiny-apple.png | Bin 0 -> 8734 bytes src/theory.ts | 4 ++-- theory.js | 4 ++-- 6 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 src/icons/dark/apple-seeds.png create mode 100644 src/icons/dark/shiny-apple.png create mode 100644 src/icons/light/apple-seeds.png create mode 100644 src/icons/light/shiny-apple.png diff --git a/src/icons/dark/apple-seeds.png b/src/icons/dark/apple-seeds.png new file mode 100644 index 0000000000000000000000000000000000000000..8705c514b9b0a9d84bde0698fd93e33cdd7e43f5 GIT binary patch literal 9775 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 literal 0 HcmV?d00001 diff --git a/src/icons/light/apple-seeds.png b/src/icons/light/apple-seeds.png new file mode 100644 index 0000000000000000000000000000000000000000..15a63c1fb76cd9053f7cb0d625acae3dc34b9eac GIT binary patch literal 8241 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 C7ymc_ literal 0 HcmV?d00001 diff --git a/src/icons/light/shiny-apple.png b/src/icons/light/shiny-apple.png new file mode 100644 index 0000000000000000000000000000000000000000..13b07775a537d3c4544932ac3539db4f5d5e38a6 GIT binary patch literal 8734 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 Date: Sun, 26 Nov 2023 23:57:34 +0900 Subject: [PATCH 03/17] Changed switches' toggle update method --- src/theory.ts | 28 ++++++++++++++++------------ theory.js | 27 +++++++++++++++------------ 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 9eedfee..3ada8f6 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -5046,6 +5046,10 @@ var getEquationOverlay = () => horizontalOptions: LayoutOptions.START, verticalOptions: () => actionPanelOnTop ? LayoutOptions.END : LayoutOptions.START, + rowDefinitions: + [ + 'auto', 'auto' + ], columnDefinitions: [ 'auto', 'auto' @@ -5640,8 +5644,8 @@ let createColonyViewMenu = (colony: Colony) => let paramSwitch = ui.createSwitch ({ column: 3, - isToggled: colonyViewConfig[colony.id].params, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => colonyViewConfig[colony.id].params, onTouched: (e: TouchEvent) => { if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -5650,7 +5654,7 @@ let createColonyViewMenu = (colony: Colony) => Sound.playClick(); colonyViewConfig[colony.id].params = !colonyViewConfig[colony.id].params; - paramSwitch.isToggled = colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = colonyViewConfig[colony.id].params; reconstructionTask = { start: 0 @@ -6347,9 +6351,9 @@ let createWorldMenu = () => }); let GM3Switch = ui.createSwitch ({ - isToggled: graphMode3D, row: 7, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => graphMode3D, onTouched: (e: TouchEvent) => { if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -6357,7 +6361,7 @@ let createWorldMenu = () => { Sound.playClick(); graphMode3D = !graphMode3D; - GM3Switch.isToggled = graphMode3D; + // GM3Switch.isToggled = graphMode3D; } } }); @@ -6415,9 +6419,9 @@ let createWorldMenu = () => }); let APSwitch = ui.createSwitch ({ - isToggled: actionPanelOnTop, row: 3, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => actionPanelOnTop, onTouched: (e: TouchEvent) => { if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -6425,7 +6429,7 @@ let createWorldMenu = () => { Sound.playClick(); actionPanelOnTop = !actionPanelOnTop; - APSwitch.isToggled = actionPanelOnTop; + // APSwitch.isToggled = actionPanelOnTop; APLabel.text = getLoc('actionPanelLocations')[ Number(actionPanelOnTop)]; } @@ -6439,9 +6443,9 @@ let createWorldMenu = () => }); let PTSwitch = ui.createSwitch ({ - isToggled: fancyPlotTitle, row: 2, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => fancyPlotTitle, onTouched: (e: TouchEvent) => { if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -6449,7 +6453,7 @@ let createWorldMenu = () => { Sound.playClick(); fancyPlotTitle = !fancyPlotTitle; - PTSwitch.isToggled = fancyPlotTitle; + // PTSwitch.isToggled = fancyPlotTitle; PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; theory.invalidatePrimaryEquation(); } @@ -6463,9 +6467,9 @@ let createWorldMenu = () => }); let ACSwitch = ui.createSwitch ({ - isToggled: actionConfirm, row: 1, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => actionConfirm, onTouched: (e: TouchEvent) => { if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -6473,7 +6477,7 @@ let createWorldMenu = () => { Sound.playClick(); actionConfirm = !actionConfirm; - ACSwitch.isToggled = actionConfirm; + // ACSwitch.isToggled = actionConfirm; } } }); @@ -6503,9 +6507,9 @@ let createWorldMenu = () => }); // let QBSwitch = ui.createSwitch // ({ - // isToggled: quatBoard, // row: 2, column: 1, // horizontalOptions: LayoutOptions.CENTER, + // isToggled: () => quatBoard, // onTouched: (e: TouchEvent) => // { // if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -6513,7 +6517,7 @@ let createWorldMenu = () => // { // Sound.playClick(); // quatBoard = !quatBoard; - // QBSwitch.isToggled = quatBoard; + // // QBSwitch.isToggled = quatBoard; // QBLabel.text = getLoc('quatModes')[Number(quatBoard)]; // theory.invalidateQuaternaryValues(); // } diff --git a/theory.js b/theory.js index 1e329ba..f28c3f7 100644 --- a/theory.js +++ b/theory.js @@ -3912,6 +3912,9 @@ var getEquationOverlay = () => { horizontalOptions: LayoutOptions.START, verticalOptions: () => actionPanelOnTop ? LayoutOptions.END : LayoutOptions.START, + rowDefinitions: [ + 'auto', 'auto' + ], columnDefinitions: [ 'auto', 'auto' ], @@ -4392,15 +4395,15 @@ let createColonyViewMenu = (colony) => { }); let paramSwitch = ui.createSwitch({ column: 3, - isToggled: colonyViewConfig[colony.id].params, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => colonyViewConfig[colony.id].params, onTouched: (e) => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); colonyViewConfig[colony.id].params = !colonyViewConfig[colony.id].params; - paramSwitch.isToggled = colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = colonyViewConfig[colony.id].params; reconstructionTask = { start: 0 @@ -4949,15 +4952,15 @@ let createWorldMenu = () => { ] }); let GM3Switch = ui.createSwitch({ - isToggled: graphMode3D, row: 7, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => graphMode3D, onTouched: (e) => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); graphMode3D = !graphMode3D; - GM3Switch.isToggled = graphMode3D; + // GM3Switch.isToggled = graphMode3D; } } }); @@ -5005,15 +5008,15 @@ let createWorldMenu = () => { verticalTextAlignment: TextAlignment.CENTER }); let APSwitch = ui.createSwitch({ - isToggled: actionPanelOnTop, row: 3, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => actionPanelOnTop, onTouched: (e) => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); actionPanelOnTop = !actionPanelOnTop; - APSwitch.isToggled = actionPanelOnTop; + // APSwitch.isToggled = actionPanelOnTop; APLabel.text = getLoc('actionPanelLocations')[Number(actionPanelOnTop)]; } } @@ -5024,15 +5027,15 @@ let createWorldMenu = () => { verticalTextAlignment: TextAlignment.CENTER }); let PTSwitch = ui.createSwitch({ - isToggled: fancyPlotTitle, row: 2, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => fancyPlotTitle, onTouched: (e) => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); fancyPlotTitle = !fancyPlotTitle; - PTSwitch.isToggled = fancyPlotTitle; + // PTSwitch.isToggled = fancyPlotTitle; PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; theory.invalidatePrimaryEquation(); } @@ -5044,15 +5047,15 @@ let createWorldMenu = () => { verticalTextAlignment: TextAlignment.CENTER }); let ACSwitch = ui.createSwitch({ - isToggled: actionConfirm, row: 1, column: 1, horizontalOptions: LayoutOptions.CENTER, + isToggled: () => actionConfirm, onTouched: (e) => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); actionConfirm = !actionConfirm; - ACSwitch.isToggled = actionConfirm; + // ACSwitch.isToggled = actionConfirm; } } }); @@ -5078,9 +5081,9 @@ let createWorldMenu = () => { }); // let QBSwitch = ui.createSwitch // ({ - // isToggled: quatBoard, // row: 2, column: 1, // horizontalOptions: LayoutOptions.CENTER, + // isToggled: () => quatBoard, // onTouched: (e: TouchEvent) => // { // if(e.type == TouchType.SHORTPRESS_RELEASED || @@ -5088,7 +5091,7 @@ let createWorldMenu = () => { // { // Sound.playClick(); // quatBoard = !quatBoard; - // QBSwitch.isToggled = quatBoard; + // // QBSwitch.isToggled = quatBoard; // QBLabel.text = getLoc('quatModes')[Number(quatBoard)]; // theory.invalidateQuaternaryValues(); // } From 61ae7f106b8949e7cd23098a56f53f7a6cf25014 Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 1 Dec 2023 06:30:40 +0900 Subject: [PATCH 04/17] Changed implementation of toggles to match TC; Sliders no longer snap on release --- src/theory.ts | 38 ++++++++++++++++++++++---------------- theory.js | 38 ++++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 3ada8f6..e0a2f32 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -5648,8 +5648,9 @@ let createColonyViewMenu = (colony: Colony) => isToggled: () => colonyViewConfig[colony.id].params, onTouched: (e: TouchEvent) => { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if(e.type == TouchType.PRESSED) { Sound.playClick(); colonyViewConfig[colony.id].params = @@ -6320,7 +6321,7 @@ let createWorldMenu = () => onDragCompleted: () => { Sound.playClick(); - speedSlider.value = speedIdx; + // speedSlider.value = speedIdx; } }); let GM3Label = ui.createLatexLabel @@ -6356,8 +6357,9 @@ let createWorldMenu = () => isToggled: () => graphMode3D, onTouched: (e: TouchEvent) => { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if(e.type == TouchType.PRESSED) { Sound.playClick(); graphMode3D = !graphMode3D; @@ -6385,7 +6387,7 @@ let createWorldMenu = () => onDragCompleted: () => { Sound.playClick(); - GM2Slider.value = graphMode2D; + // GM2Slider.value = graphMode2D; } }); let CMLabel = ui.createLatexLabel @@ -6408,7 +6410,7 @@ let createWorldMenu = () => onDragCompleted: () => { Sound.playClick(); - CMSlider.value = colonyMode; + // CMSlider.value = colonyMode; } }); let APLabel = ui.createLatexLabel @@ -6424,8 +6426,9 @@ let createWorldMenu = () => isToggled: () => actionPanelOnTop, onTouched: (e: TouchEvent) => { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if(e.type == TouchType.PRESSED) { Sound.playClick(); actionPanelOnTop = !actionPanelOnTop; @@ -6448,8 +6451,9 @@ let createWorldMenu = () => isToggled: () => fancyPlotTitle, onTouched: (e: TouchEvent) => { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if(e.type == TouchType.PRESSED) { Sound.playClick(); fancyPlotTitle = !fancyPlotTitle; @@ -6472,8 +6476,9 @@ let createWorldMenu = () => isToggled: () => actionConfirm, onTouched: (e: TouchEvent) => { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if(e.type == TouchType.PRESSED) { Sound.playClick(); actionConfirm = !actionConfirm; @@ -6501,7 +6506,7 @@ let createWorldMenu = () => onDragCompleted: () => { Sound.playClick(); - QBSlider.value = quatMode; + // QBSlider.value = quatMode; theory.invalidateQuaternaryValues(); } }); @@ -6512,8 +6517,9 @@ let createWorldMenu = () => // isToggled: () => quatBoard, // onTouched: (e: TouchEvent) => // { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) + // // if(e.type == TouchType.SHORTPRESS_RELEASED || + // // e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.PRESSED) // { // Sound.playClick(); // quatBoard = !quatBoard; diff --git a/theory.js b/theory.js index f28c3f7..10c432e 100644 --- a/theory.js +++ b/theory.js @@ -4398,8 +4398,9 @@ let createColonyViewMenu = (colony) => { horizontalOptions: LayoutOptions.CENTER, isToggled: () => colonyViewConfig[colony.id].params, onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if (e.type == TouchType.PRESSED) { Sound.playClick(); colonyViewConfig[colony.id].params = !colonyViewConfig[colony.id].params; @@ -4927,7 +4928,7 @@ let createWorldMenu = () => { }, onDragCompleted: () => { Sound.playClick(); - speedSlider.value = speedIdx; + // speedSlider.value = speedIdx; } }); let GM3Label = ui.createLatexLabel({ @@ -4956,8 +4957,9 @@ let createWorldMenu = () => { horizontalOptions: LayoutOptions.CENTER, isToggled: () => graphMode3D, onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if (e.type == TouchType.PRESSED) { Sound.playClick(); graphMode3D = !graphMode3D; // GM3Switch.isToggled = graphMode3D; @@ -4980,7 +4982,7 @@ let createWorldMenu = () => { }, onDragCompleted: () => { Sound.playClick(); - GM2Slider.value = graphMode2D; + // GM2Slider.value = graphMode2D; } }); let CMLabel = ui.createLatexLabel({ @@ -4999,7 +5001,7 @@ let createWorldMenu = () => { }, onDragCompleted: () => { Sound.playClick(); - CMSlider.value = colonyMode; + // CMSlider.value = colonyMode; } }); let APLabel = ui.createLatexLabel({ @@ -5012,8 +5014,9 @@ let createWorldMenu = () => { horizontalOptions: LayoutOptions.CENTER, isToggled: () => actionPanelOnTop, onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if (e.type == TouchType.PRESSED) { Sound.playClick(); actionPanelOnTop = !actionPanelOnTop; // APSwitch.isToggled = actionPanelOnTop; @@ -5031,8 +5034,9 @@ let createWorldMenu = () => { horizontalOptions: LayoutOptions.CENTER, isToggled: () => fancyPlotTitle, onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if (e.type == TouchType.PRESSED) { Sound.playClick(); fancyPlotTitle = !fancyPlotTitle; // PTSwitch.isToggled = fancyPlotTitle; @@ -5051,8 +5055,9 @@ let createWorldMenu = () => { horizontalOptions: LayoutOptions.CENTER, isToggled: () => actionConfirm, onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { + // if(e.type == TouchType.SHORTPRESS_RELEASED || + // e.type == TouchType.LONGPRESS_RELEASED) + if (e.type == TouchType.PRESSED) { Sound.playClick(); actionConfirm = !actionConfirm; // ACSwitch.isToggled = actionConfirm; @@ -5075,7 +5080,7 @@ let createWorldMenu = () => { }, onDragCompleted: () => { Sound.playClick(); - QBSlider.value = quatMode; + // QBSlider.value = quatMode; theory.invalidateQuaternaryValues(); } }); @@ -5086,8 +5091,9 @@ let createWorldMenu = () => { // isToggled: () => quatBoard, // onTouched: (e: TouchEvent) => // { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) + // // if(e.type == TouchType.SHORTPRESS_RELEASED || + // // e.type == TouchType.LONGPRESS_RELEASED) + // if(e.type == TouchType.PRESSED) // { // Sound.playClick(); // quatBoard = !quatBoard; From 79fa46c773084812efbcf484c27fec11830f2701 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 3 Dec 2023 04:25:15 +0900 Subject: [PATCH 05/17] Converted switch onTouched to onToggled --- TODO.md | 3 +- src/theory.ts | 136 +++++++++++++++++--------------------------------- theory.js | 124 ++++++++++++++++----------------------------- 3 files changed, 92 insertions(+), 171 deletions(-) diff --git a/TODO.md b/TODO.md index 9468f81..8f73059 100644 --- a/TODO.md +++ b/TODO.md @@ -112,8 +112,9 @@ do nothing. Do you feel like it could be more interesting? - Calendula - [x] Nerf spread rate to 1/3? Sum equals 1.5 making the pub mult coefficient 2 instead of 1.8 -- [ ] Button that skips tutorial for iOS players +- [x] Button that skips tutorial for iOS players - [ ] Dedicated save file for playtesting +- [ ] Replace 'view L-system' button with almanac access - [ ] Change /sec indicators to /hr (in-game) and display 5x the value - Counter-argument: all parameters display /sec diff --git a/src/theory.ts b/src/theory.ts index e0a2f32..4fe0f12 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -166,7 +166,7 @@ Profit\\colon\\enspace {5}p\\\\{6}`, labelSpeed: 'Game speed: {0}x', labelGM3D: '3D graph: ', labelActionConfirm: 'Confirmation dialogues: ', - graphModes2D: + lineGraphModes: [ '2D graph: Off', '2D graph: Photo-synthesis', @@ -179,7 +179,7 @@ Profit\\colon\\enspace {5}p\\\\{6}`, 'Colony view: Simple', 'Colony view: List' ], - actionPanelLocations: + actionPanelModes: [ 'Time display: Top', 'Time display: Bottom' @@ -4224,21 +4224,21 @@ let growthCoord = 0; let insolationIntegral = 0; let growthIntegral = 0; let plotIdx = 0; -let colonyIdx = new Array(nofPlots).fill(0); -let plantIdx = new Array(nofPlots).fill(0); +let colonyIdx: number[] = new Array(nofPlots).fill(0); +let plantIdx: number[] = new Array(nofPlots).fill(0); let selectedColony: Colony = null; let finishedTutorial = false; let actuallyPlanting = true; let speedIdx = 1; -const enum GraphModes2D +const enum LineGraphModes { OFF, INSOLATION, GROWTH, _SIZE } -let graphMode2D = GraphModes2D.INSOLATION; +let graphMode2D = LineGraphModes.INSOLATION; let graphMode3D = true; const enum ColonyModes { @@ -4920,6 +4920,10 @@ var updateAvailability = () => { perfs[Profilers.AVAILABILITY].exec(() => { + let x = plotIdx; + let y = colonyIdx; + let p = plantIdx; + if(!finishedTutorial) { finishedTutorial = plotPerma.level > 0; @@ -4928,18 +4932,19 @@ var updateAvailability = () => else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = !manager.colonies[plotIdx].length; - viewColony.isAvailable = manager.colonies[plotIdx].length >= 1; - switchColony.isAvailable = manager.colonies[plotIdx].length > 1; + switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; + viewColony.isAvailable = manager.colonies[x].length >= 1; + switchColony.isAvailable = manager.colonies[x].length > 1; skipLabel.isVisible = !finishedTutorial; skipFrame.isVisible = !finishedTutorial; } + for(let i = 0; i < plotPerma.level; ++i) { for(let j = 0; j < plantUnlocks.length; ++j) plants[i][plantUnlocks[j]].isAvailable = plants[i][plantUnlocks[j]].level > 0 || - (j == plantIdx[i] && j <= plantPerma.level); + (j == p[i] && j <= plantPerma.level); } }); } @@ -5646,21 +5651,16 @@ let createColonyViewMenu = (colony: Colony) => column: 3, horizontalOptions: LayoutOptions.CENTER, isToggled: () => colonyViewConfig[colony.id].params, - onTouched: (e: TouchEvent) => + onToggled: () => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if(e.type == TouchType.PRESSED) + Sound.playClick(); + colonyViewConfig[colony.id].params = + !colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = colonyViewConfig[colony.id].params; + reconstructionTask = { - Sound.playClick(); - colonyViewConfig[colony.id].params = - !colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = colonyViewConfig[colony.id].params; - reconstructionTask = - { - start: 0 - }; - } + start: 0 + }; } }); let updateReconstruction = () => @@ -6355,21 +6355,15 @@ let createWorldMenu = () => row: 7, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => graphMode3D, - onTouched: (e: TouchEvent) => + onToggled: () => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if(e.type == TouchType.PRESSED) - { - Sound.playClick(); - graphMode3D = !graphMode3D; - // GM3Switch.isToggled = graphMode3D; - } + Sound.playClick(); + graphMode3D = !graphMode3D; } }); let GM2Label = ui.createLatexLabel ({ - text: getLoc('graphModes2D')[graphMode2D], + text: getLoc('lineGraphModes')[graphMode2D], row: 6, column: 0, verticalTextAlignment: TextAlignment.CENTER }); @@ -6377,12 +6371,12 @@ let createWorldMenu = () => ({ row: 6, column: 1, minimum: 0, - maximum: GraphModes2D._SIZE - 1, + maximum: LineGraphModes._SIZE - 1, value: graphMode2D, onValueChanged: () => { graphMode2D = Math.round(GM2Slider.value); - GM2Label.text = getLoc('graphModes2D')[graphMode2D]; + GM2Label.text = getLoc('lineGraphModes')[graphMode2D]; }, onDragCompleted: () => { @@ -6415,7 +6409,7 @@ let createWorldMenu = () => }); let APLabel = ui.createLatexLabel ({ - text: getLoc('actionPanelLocations')[Number(actionPanelOnTop)], + text: getLoc('actionPanelModes')[Number(actionPanelOnTop)], row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER }); @@ -6424,18 +6418,12 @@ let createWorldMenu = () => row: 3, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => actionPanelOnTop, - onTouched: (e: TouchEvent) => + onToggled: () => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if(e.type == TouchType.PRESSED) - { - Sound.playClick(); - actionPanelOnTop = !actionPanelOnTop; - // APSwitch.isToggled = actionPanelOnTop; - APLabel.text = getLoc('actionPanelLocations')[ - Number(actionPanelOnTop)]; - } + Sound.playClick(); + actionPanelOnTop = !actionPanelOnTop; + // APSwitch.isToggled = actionPanelOnTop; + APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; } }); let PTLabel = ui.createLatexLabel @@ -6449,18 +6437,13 @@ let createWorldMenu = () => row: 2, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => fancyPlotTitle, - onTouched: (e: TouchEvent) => + onToggled: () => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if(e.type == TouchType.PRESSED) - { - Sound.playClick(); - fancyPlotTitle = !fancyPlotTitle; - // PTSwitch.isToggled = fancyPlotTitle; - PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; - theory.invalidatePrimaryEquation(); - } + Sound.playClick(); + fancyPlotTitle = !fancyPlotTitle; + // PTSwitch.isToggled = fancyPlotTitle; + PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; + theory.invalidatePrimaryEquation(); } }); let ACLabel = ui.createLatexLabel @@ -6474,16 +6457,10 @@ let createWorldMenu = () => row: 1, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => actionConfirm, - onTouched: (e: TouchEvent) => + onToggled: () => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if(e.type == TouchType.PRESSED) - { - Sound.playClick(); - actionConfirm = !actionConfirm; - // ACSwitch.isToggled = actionConfirm; - } + Sound.playClick(); + actionConfirm = !actionConfirm; } }); let QBLabel = ui.createLatexLabel @@ -6510,25 +6487,6 @@ let createWorldMenu = () => theory.invalidateQuaternaryValues(); } }); - // let QBSwitch = ui.createSwitch - // ({ - // row: 2, column: 1, - // horizontalOptions: LayoutOptions.CENTER, - // isToggled: () => quatBoard, - // onTouched: (e: TouchEvent) => - // { - // // if(e.type == TouchType.SHORTPRESS_RELEASED || - // // e.type == TouchType.LONGPRESS_RELEASED) - // if(e.type == TouchType.PRESSED) - // { - // Sound.playClick(); - // quatBoard = !quatBoard; - // // QBSwitch.isToggled = quatBoard; - // QBLabel.text = getLoc('quatModes')[Number(quatBoard)]; - // theory.invalidateQuaternaryValues(); - // } - // } - // }); let menu = ui.createPopup ({ @@ -6878,11 +6836,11 @@ var get2DGraphValue = () => { switch(graphMode2D) { - case GraphModes2D.OFF: + case LineGraphModes.OFF: return 0; - case GraphModes2D.INSOLATION: // Insolation + case LineGraphModes.INSOLATION: // Insolation return insolationCoord; - case GraphModes2D.GROWTH: // Growth + case LineGraphModes.GROWTH: // Growth return growthCoord / 2; } }; diff --git a/theory.js b/theory.js index 10c432e..8dffe36 100644 --- a/theory.js +++ b/theory.js @@ -137,7 +137,7 @@ Profit\\colon\\enspace {5}p\\\\{6}`, labelSpeed: 'Game speed: {0}x', labelGM3D: '3D graph: ', labelActionConfirm: 'Confirmation dialogues: ', - graphModes2D: [ + lineGraphModes: [ '2D graph: Off', '2D graph: Photo-synthesis', '2D graph: Growth' @@ -148,7 +148,7 @@ Profit\\colon\\enspace {5}p\\\\{6}`, 'Colony view: Simple', 'Colony view: List' ], - actionPanelLocations: [ + actionPanelModes: [ 'Time display: Top', 'Time display: Bottom' ], @@ -3282,7 +3282,7 @@ let selectedColony = null; let finishedTutorial = false; let actuallyPlanting = true; let speedIdx = 1; -let graphMode2D = 1 /* GraphModes2D.INSOLATION */; +let graphMode2D = 1 /* LineGraphModes.INSOLATION */; let graphMode3D = true; let colonyMode = 1 /* ColonyModes.VERBOSE */; let fancyPlotTitle = true; @@ -3804,15 +3804,18 @@ var init = () => { }; var updateAvailability = () => { perfs[5 /* Profilers.AVAILABILITY */].exec(() => { + let x = plotIdx; + let y = colonyIdx; + let p = plantIdx; if (!finishedTutorial) { finishedTutorial = plotPerma.level > 0; shelfPerma.isAvailable = finishedTutorial; } else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = !manager.colonies[plotIdx].length; - viewColony.isAvailable = manager.colonies[plotIdx].length >= 1; - switchColony.isAvailable = manager.colonies[plotIdx].length > 1; + switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; + viewColony.isAvailable = manager.colonies[x].length >= 1; + switchColony.isAvailable = manager.colonies[x].length > 1; skipLabel.isVisible = !finishedTutorial; skipFrame.isVisible = !finishedTutorial; } @@ -3820,7 +3823,7 @@ var updateAvailability = () => { for (let j = 0; j < plantUnlocks.length; ++j) plants[i][plantUnlocks[j]].isAvailable = plants[i][plantUnlocks[j]].level > 0 || - (j == plantIdx[i] && j <= plantPerma.level); + (j == p[i] && j <= plantPerma.level); } }); }; @@ -4397,19 +4400,15 @@ let createColonyViewMenu = (colony) => { column: 3, horizontalOptions: LayoutOptions.CENTER, isToggled: () => colonyViewConfig[colony.id].params, - onTouched: (e) => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if (e.type == TouchType.PRESSED) { - Sound.playClick(); - colonyViewConfig[colony.id].params = - !colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = colonyViewConfig[colony.id].params; - reconstructionTask = - { - start: 0 - }; - } + onToggled: () => { + Sound.playClick(); + colonyViewConfig[colony.id].params = + !colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = colonyViewConfig[colony.id].params; + reconstructionTask = + { + start: 0 + }; } }); let updateReconstruction = () => { @@ -4956,29 +4955,24 @@ let createWorldMenu = () => { row: 7, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => graphMode3D, - onTouched: (e) => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if (e.type == TouchType.PRESSED) { - Sound.playClick(); - graphMode3D = !graphMode3D; - // GM3Switch.isToggled = graphMode3D; - } + onToggled: () => { + Sound.playClick(); + graphMode3D = !graphMode3D; } }); let GM2Label = ui.createLatexLabel({ - text: getLoc('graphModes2D')[graphMode2D], + text: getLoc('lineGraphModes')[graphMode2D], row: 6, column: 0, verticalTextAlignment: TextAlignment.CENTER }); let GM2Slider = ui.createSlider({ row: 6, column: 1, minimum: 0, - maximum: 3 /* GraphModes2D._SIZE */ - 1, + maximum: 3 /* LineGraphModes._SIZE */ - 1, value: graphMode2D, onValueChanged: () => { graphMode2D = Math.round(GM2Slider.value); - GM2Label.text = getLoc('graphModes2D')[graphMode2D]; + GM2Label.text = getLoc('lineGraphModes')[graphMode2D]; }, onDragCompleted: () => { Sound.playClick(); @@ -5005,7 +4999,7 @@ let createWorldMenu = () => { } }); let APLabel = ui.createLatexLabel({ - text: getLoc('actionPanelLocations')[Number(actionPanelOnTop)], + text: getLoc('actionPanelModes')[Number(actionPanelOnTop)], row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER }); @@ -5013,15 +5007,11 @@ let createWorldMenu = () => { row: 3, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => actionPanelOnTop, - onTouched: (e) => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if (e.type == TouchType.PRESSED) { - Sound.playClick(); - actionPanelOnTop = !actionPanelOnTop; - // APSwitch.isToggled = actionPanelOnTop; - APLabel.text = getLoc('actionPanelLocations')[Number(actionPanelOnTop)]; - } + onToggled: () => { + Sound.playClick(); + actionPanelOnTop = !actionPanelOnTop; + // APSwitch.isToggled = actionPanelOnTop; + APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; } }); let PTLabel = ui.createLatexLabel({ @@ -5033,16 +5023,12 @@ let createWorldMenu = () => { row: 2, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => fancyPlotTitle, - onTouched: (e) => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if (e.type == TouchType.PRESSED) { - Sound.playClick(); - fancyPlotTitle = !fancyPlotTitle; - // PTSwitch.isToggled = fancyPlotTitle; - PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; - theory.invalidatePrimaryEquation(); - } + onToggled: () => { + Sound.playClick(); + fancyPlotTitle = !fancyPlotTitle; + // PTSwitch.isToggled = fancyPlotTitle; + PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; + theory.invalidatePrimaryEquation(); } }); let ACLabel = ui.createLatexLabel({ @@ -5054,14 +5040,9 @@ let createWorldMenu = () => { row: 1, column: 1, horizontalOptions: LayoutOptions.CENTER, isToggled: () => actionConfirm, - onTouched: (e) => { - // if(e.type == TouchType.SHORTPRESS_RELEASED || - // e.type == TouchType.LONGPRESS_RELEASED) - if (e.type == TouchType.PRESSED) { - Sound.playClick(); - actionConfirm = !actionConfirm; - // ACSwitch.isToggled = actionConfirm; - } + onToggled: () => { + Sound.playClick(); + actionConfirm = !actionConfirm; } }); let QBLabel = ui.createLatexLabel({ @@ -5084,25 +5065,6 @@ let createWorldMenu = () => { theory.invalidateQuaternaryValues(); } }); - // let QBSwitch = ui.createSwitch - // ({ - // row: 2, column: 1, - // horizontalOptions: LayoutOptions.CENTER, - // isToggled: () => quatBoard, - // onTouched: (e: TouchEvent) => - // { - // // if(e.type == TouchType.SHORTPRESS_RELEASED || - // // e.type == TouchType.LONGPRESS_RELEASED) - // if(e.type == TouchType.PRESSED) - // { - // Sound.playClick(); - // quatBoard = !quatBoard; - // // QBSwitch.isToggled = quatBoard; - // QBLabel.text = getLoc('quatModes')[Number(quatBoard)]; - // theory.invalidateQuaternaryValues(); - // } - // } - // }); let menu = ui.createPopup({ isPeekable: true, title: Localization.get('SettingsPopupTitle'), @@ -5384,11 +5346,11 @@ var setInternalState = (stateStr) => { }; var get2DGraphValue = () => { switch (graphMode2D) { - case 0 /* GraphModes2D.OFF */: + case 0 /* LineGraphModes.OFF */: return 0; - case 1 /* GraphModes2D.INSOLATION */: // Insolation + case 1 /* LineGraphModes.INSOLATION */: // Insolation return insolationCoord; - case 2 /* GraphModes2D.GROWTH */: // Growth + case 2 /* LineGraphModes.GROWTH */: // Growth return growthCoord / 2; } }; From c20125ba6cfd567f8fcbd2a3b75229108ee23c15 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 3 Dec 2023 16:37:22 +0900 Subject: [PATCH 06/17] Changed switch toggle methods again; QoL changes to switch colour and slider snapping; All singular upgrades now displayed at once --- TODO.md | 2 + src/theory.ts | 169 +++++++++++++++++++++++++++++++------------------- theory.js | 160 +++++++++++++++++++++++++++++------------------ 3 files changed, 206 insertions(+), 125 deletions(-) diff --git a/TODO.md b/TODO.md index 8f73059..8775816 100644 --- a/TODO.md +++ b/TODO.md @@ -115,6 +115,8 @@ do nothing. Do you feel like it could be more interesting? - [x] Button that skips tutorial for iOS players - [ ] Dedicated save file for playtesting - [ ] Replace 'view L-system' button with almanac access +- [ ] Rework singular upgrade logic + - Turn switch plant into regular upgrade - [ ] Change /sec indicators to /hr (in-game) and display 5x the value - Counter-argument: all parameters display /sec diff --git a/src/theory.ts b/src/theory.ts index 4fe0f12..06c8ffb 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -4593,28 +4593,6 @@ var init = () => currency = theory.createCurrency('p', 'p'); taxCurrency = theory.createCurrency(getLoc('currencyTax')); - /* Switch plant - Moduloose - */ - { - switchPlant = theory.createSingularUpgrade(0, currency, new FreeCost); - switchPlant.getDescription = () => Localization.format( - getLoc('switchPlant'), plotIdx + 1); - switchPlant.info = getLoc('switchPlantInfo'); - switchPlant.bought = (_) => - { - switchPlant.level = 0; - if(manager.colonies[plotIdx].length) - return; - plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = - false; - plantIdx[plotIdx] = (plantIdx[plotIdx] + 1) % - (plantPerma.level + 1); - plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = true; - // updateAvailability(); - }; - switchPlant.isAvailable = false; - } /* Switch colony Modulow */ @@ -4700,6 +4678,34 @@ var init = () => plants[i][plantUnlocks[j]].isAvailable = false; } } + /* Switch plant + Moduloes + */ + { + switchPlant = theory.createUpgrade(-1, currency, new FreeCost); + switchPlant.getDescription = () => Localization.format( + getLoc('switchPlant'), plotIdx + 1); + switchPlant.info = getLoc('switchPlantInfo'); + switchPlant.bought = (_) => + { + switchPlant.level = 0; + if(switchPlant.isAutoBuyable) + { + switchPlant.isAutoBuyable = false; + return; + } + if(plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].level) + return; + plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = + false; + plantIdx[plotIdx] = (plantIdx[plotIdx] + 1) % + (plantPerma.level + 1); + plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = true; + // updateAvailability(); + }; + switchPlant.isAvailable = false; + switchPlant.isAutoBuyable = false; + } /* Notebook Unlocks when acquiring Buy All. @@ -4932,9 +4938,9 @@ var updateAvailability = () => else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; - viewColony.isAvailable = manager.colonies[x].length >= 1; - switchColony.isAvailable = manager.colonies[x].length > 1; + switchPlant.isAvailable = true; + viewColony.isAvailable = true; + switchColony.isAvailable = true; skipLabel.isVisible = !finishedTutorial; skipFrame.isVisible = !finishedTutorial; } @@ -5650,17 +5656,24 @@ let createColonyViewMenu = (colony: Colony) => ({ column: 3, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => colonyViewConfig[colony.id].params, - onToggled: () => + onColor: Color.BORDER, + isToggled: colonyViewConfig[colony.id].params, + onTouched: (e: TouchEvent) => { - Sound.playClick(); - colonyViewConfig[colony.id].params = - !colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = colonyViewConfig[colony.id].params; - reconstructionTask = + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { - start: 0 - }; + Sound.playClick(); + // colonyViewConfig[colony.id].params = + // !colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = colonyViewConfig[colony.id].params; + paramSwitch.isToggled = !paramSwitch.isToggled; + colonyViewConfig[colony.id].params = paramSwitch.isToggled; + reconstructionTask = + { + start: 0 + }; + } } }); let updateReconstruction = () => @@ -6309,8 +6322,8 @@ let createWorldMenu = () => let speedSlider = ui.createSlider ({ row: 0, column: 1, - minimum: 0, - maximum: speeds.length - 1, + minimum: -0.25, + maximum: speeds.length - 0.75, value: speedIdx, onValueChanged: () => { @@ -6354,11 +6367,18 @@ let createWorldMenu = () => ({ row: 7, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => graphMode3D, - onToggled: () => + onColor: Color.BORDER, + isToggled: graphMode3D, + onTouched: (e: TouchEvent) => { - Sound.playClick(); - graphMode3D = !graphMode3D; + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + // graphMode3D = !graphMode3D; + GM3Switch.isToggled = !GM3Switch.isToggled; + graphMode3D = GM3Switch.isToggled; + } } }); let GM2Label = ui.createLatexLabel @@ -6370,8 +6390,8 @@ let createWorldMenu = () => let GM2Slider = ui.createSlider ({ row: 6, column: 1, - minimum: 0, - maximum: LineGraphModes._SIZE - 1, + minimum: -0.25, + maximum: LineGraphModes._SIZE - 0.75, value: graphMode2D, onValueChanged: () => { @@ -6393,8 +6413,8 @@ let createWorldMenu = () => let CMSlider = ui.createSlider ({ row: 4, column: 1, - minimum: 0, - maximum: ColonyModes._SIZE - 1, + minimum: -0.25, + maximum: ColonyModes._SIZE - 0.75, value: colonyMode, onValueChanged: () => { @@ -6417,13 +6437,21 @@ let createWorldMenu = () => ({ row: 3, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => actionPanelOnTop, - onToggled: () => + onColor: Color.BORDER, + isToggled: actionPanelOnTop, + onTouched: (e: TouchEvent) => { - Sound.playClick(); - actionPanelOnTop = !actionPanelOnTop; - // APSwitch.isToggled = actionPanelOnTop; - APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + // actionPanelOnTop = !actionPanelOnTop; + // APSwitch.isToggled = actionPanelOnTop; + APSwitch.isToggled = !APSwitch.isToggled; + actionPanelOnTop = APSwitch.isToggled; + APLabel.text = getLoc('actionPanelModes')[ + Number(actionPanelOnTop)]; + } } }); let PTLabel = ui.createLatexLabel @@ -6436,14 +6464,21 @@ let createWorldMenu = () => ({ row: 2, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => fancyPlotTitle, - onToggled: () => + onColor: Color.BORDER, + isToggled: fancyPlotTitle, + onTouched: (e: TouchEvent) => { - Sound.playClick(); - fancyPlotTitle = !fancyPlotTitle; - // PTSwitch.isToggled = fancyPlotTitle; - PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; - theory.invalidatePrimaryEquation(); + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + // fancyPlotTitle = !fancyPlotTitle; + // PTSwitch.isToggled = fancyPlotTitle; + PTSwitch.isToggled = !PTSwitch.isToggled; + fancyPlotTitle = PTSwitch.isToggled; + PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; + theory.invalidatePrimaryEquation(); + } } }); let ACLabel = ui.createLatexLabel @@ -6456,11 +6491,19 @@ let createWorldMenu = () => ({ row: 1, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => actionConfirm, - onToggled: () => + onColor: Color.BORDER, + isToggled: actionConfirm, + onTouched: (e: TouchEvent) => { - Sound.playClick(); - actionConfirm = !actionConfirm; + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + // actionConfirm = !actionConfirm; + // ACSwitch.isToggled = actionConfirm; + ACSwitch.isToggled = !ACSwitch.isToggled; + actionConfirm = ACSwitch.isToggled; + } } }); let QBLabel = ui.createLatexLabel @@ -6472,8 +6515,8 @@ let createWorldMenu = () => let QBSlider = ui.createSlider ({ row: 5, column: 1, - minimum: 0, - maximum: QuaternaryModes._SIZE - 1, + minimum: -0.25, + maximum: QuaternaryModes._SIZE - 0.75, value: quatMode, onValueChanged: () => { diff --git a/theory.js b/theory.js index 8dffe36..db7824d 100644 --- a/theory.js +++ b/theory.js @@ -3542,26 +3542,6 @@ var taxCurrency; var init = () => { currency = theory.createCurrency('p', 'p'); taxCurrency = theory.createCurrency(getLoc('currencyTax')); - /* Switch plant - Moduloose - */ - { - switchPlant = theory.createSingularUpgrade(0, currency, new FreeCost); - switchPlant.getDescription = () => Localization.format(getLoc('switchPlant'), plotIdx + 1); - switchPlant.info = getLoc('switchPlantInfo'); - switchPlant.bought = (_) => { - switchPlant.level = 0; - if (manager.colonies[plotIdx].length) - return; - plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = - false; - plantIdx[plotIdx] = (plantIdx[plotIdx] + 1) % - (plantPerma.level + 1); - plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = true; - // updateAvailability(); - }; - switchPlant.isAvailable = false; - } /* Switch colony Modulow */ @@ -3631,6 +3611,31 @@ var init = () => { plants[i][plantUnlocks[j]].isAvailable = false; } } + /* Switch plant + Moduloes + */ + { + switchPlant = theory.createUpgrade(-1, currency, new FreeCost); + switchPlant.getDescription = () => Localization.format(getLoc('switchPlant'), plotIdx + 1); + switchPlant.info = getLoc('switchPlantInfo'); + switchPlant.bought = (_) => { + switchPlant.level = 0; + if (switchPlant.isAutoBuyable) { + switchPlant.isAutoBuyable = false; + return; + } + if (plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].level) + return; + plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = + false; + plantIdx[plotIdx] = (plantIdx[plotIdx] + 1) % + (plantPerma.level + 1); + plants[plotIdx][plantUnlocks[plantIdx[plotIdx]]].isAvailable = true; + // updateAvailability(); + }; + switchPlant.isAvailable = false; + switchPlant.isAutoBuyable = false; + } /* Notebook Unlocks when acquiring Buy All. */ @@ -3813,9 +3818,9 @@ var updateAvailability = () => { } else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; - viewColony.isAvailable = manager.colonies[x].length >= 1; - switchColony.isAvailable = manager.colonies[x].length > 1; + switchPlant.isAvailable = true; + viewColony.isAvailable = true; + switchColony.isAvailable = true; skipLabel.isVisible = !finishedTutorial; skipFrame.isVisible = !finishedTutorial; } @@ -4399,16 +4404,22 @@ let createColonyViewMenu = (colony) => { let paramSwitch = ui.createSwitch({ column: 3, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => colonyViewConfig[colony.id].params, - onToggled: () => { - Sound.playClick(); - colonyViewConfig[colony.id].params = - !colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = colonyViewConfig[colony.id].params; - reconstructionTask = - { - start: 0 - }; + onColor: Color.BORDER, + isToggled: colonyViewConfig[colony.id].params, + onTouched: (e) => { + if (e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { + Sound.playClick(); + // colonyViewConfig[colony.id].params = + // !colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = colonyViewConfig[colony.id].params; + paramSwitch.isToggled = !paramSwitch.isToggled; + colonyViewConfig[colony.id].params = paramSwitch.isToggled; + reconstructionTask = + { + start: 0 + }; + } } }); let updateReconstruction = () => { @@ -4918,8 +4929,8 @@ let createWorldMenu = () => { }); let speedSlider = ui.createSlider({ row: 0, column: 1, - minimum: 0, - maximum: speeds.length - 1, + minimum: -0.25, + maximum: speeds.length - 0.75, value: speedIdx, onValueChanged: () => { speedIdx = Math.round(speedSlider.value); @@ -4954,10 +4965,16 @@ let createWorldMenu = () => { let GM3Switch = ui.createSwitch({ row: 7, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => graphMode3D, - onToggled: () => { - Sound.playClick(); - graphMode3D = !graphMode3D; + onColor: Color.BORDER, + isToggled: graphMode3D, + onTouched: (e) => { + if (e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { + Sound.playClick(); + // graphMode3D = !graphMode3D; + GM3Switch.isToggled = !GM3Switch.isToggled; + graphMode3D = GM3Switch.isToggled; + } } }); let GM2Label = ui.createLatexLabel({ @@ -4967,8 +4984,8 @@ let createWorldMenu = () => { }); let GM2Slider = ui.createSlider({ row: 6, column: 1, - minimum: 0, - maximum: 3 /* LineGraphModes._SIZE */ - 1, + minimum: -0.25, + maximum: 3 /* LineGraphModes._SIZE */ - 0.75, value: graphMode2D, onValueChanged: () => { graphMode2D = Math.round(GM2Slider.value); @@ -4986,8 +5003,8 @@ let createWorldMenu = () => { }); let CMSlider = ui.createSlider({ row: 4, column: 1, - minimum: 0, - maximum: 4 /* ColonyModes._SIZE */ - 1, + minimum: -0.25, + maximum: 4 /* ColonyModes._SIZE */ - 0.75, value: colonyMode, onValueChanged: () => { colonyMode = Math.round(CMSlider.value); @@ -5006,12 +5023,18 @@ let createWorldMenu = () => { let APSwitch = ui.createSwitch({ row: 3, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => actionPanelOnTop, - onToggled: () => { - Sound.playClick(); - actionPanelOnTop = !actionPanelOnTop; - // APSwitch.isToggled = actionPanelOnTop; - APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; + onColor: Color.BORDER, + isToggled: actionPanelOnTop, + onTouched: (e) => { + if (e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { + Sound.playClick(); + // actionPanelOnTop = !actionPanelOnTop; + // APSwitch.isToggled = actionPanelOnTop; + APSwitch.isToggled = !APSwitch.isToggled; + actionPanelOnTop = APSwitch.isToggled; + APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; + } } }); let PTLabel = ui.createLatexLabel({ @@ -5022,13 +5045,19 @@ let createWorldMenu = () => { let PTSwitch = ui.createSwitch({ row: 2, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => fancyPlotTitle, - onToggled: () => { - Sound.playClick(); - fancyPlotTitle = !fancyPlotTitle; - // PTSwitch.isToggled = fancyPlotTitle; - PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; - theory.invalidatePrimaryEquation(); + onColor: Color.BORDER, + isToggled: fancyPlotTitle, + onTouched: (e) => { + if (e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { + Sound.playClick(); + // fancyPlotTitle = !fancyPlotTitle; + // PTSwitch.isToggled = fancyPlotTitle; + PTSwitch.isToggled = !PTSwitch.isToggled; + fancyPlotTitle = PTSwitch.isToggled; + PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; + theory.invalidatePrimaryEquation(); + } } }); let ACLabel = ui.createLatexLabel({ @@ -5039,10 +5068,17 @@ let createWorldMenu = () => { let ACSwitch = ui.createSwitch({ row: 1, column: 1, horizontalOptions: LayoutOptions.CENTER, - isToggled: () => actionConfirm, - onToggled: () => { - Sound.playClick(); - actionConfirm = !actionConfirm; + onColor: Color.BORDER, + isToggled: actionConfirm, + onTouched: (e) => { + if (e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { + Sound.playClick(); + // actionConfirm = !actionConfirm; + // ACSwitch.isToggled = actionConfirm; + ACSwitch.isToggled = !ACSwitch.isToggled; + actionConfirm = ACSwitch.isToggled; + } } }); let QBLabel = ui.createLatexLabel({ @@ -5052,8 +5088,8 @@ let createWorldMenu = () => { }); let QBSlider = ui.createSlider({ row: 5, column: 1, - minimum: 0, - maximum: 4 /* QuaternaryModes._SIZE */ - 1, + minimum: -0.25, + maximum: 4 /* QuaternaryModes._SIZE */ - 0.75, value: quatMode, onValueChanged: () => { quatMode = Math.round(QBSlider.value); From 9a807442112d24802f0fbab71bf3ac8b10fa3f28 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 4 Dec 2023 00:24:31 +0900 Subject: [PATCH 07/17] Redesigned currency bar; More QoL changes --- src/theory.ts | 497 +++++++++++++++++++++++++++++++++++--------------- theory.js | 442 ++++++++++++++++++++++++++++++-------------- 2 files changed, 656 insertions(+), 283 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 06c8ffb..1e4f557 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -27,6 +27,10 @@ import { View } from './api/ui/View'; import { Easing } from './api/ui/properties/Easing'; import { StackOrientation } from './api/ui/properties/StackOrientation'; import { Profiler, profilers } from './api/Profiler'; +import { LatexLabel } from './api/ui/LatexLabel'; +import { Frame } from './api/ui/Frame'; +import { StackLayout } from './api/ui/StackLayout'; +import { Grid } from './api/ui/Grid'; var id = 'lemmas_garden'; var getName = (language: string): string => @@ -53,7 +57,7 @@ Welcome to Lemma's Garden, an idle botanical theory built on the grammar of ` + return descs[language] ?? descs.en; } var authors = 'propfeds\n\nThanks to:\ngame-icons.net, for the icons'; -var version = 0.21; +var version = 0.22; // Numbers are often converted into 32-bit signed integers in JINT. const INT_MAX = 0x7fffffff; @@ -73,7 +77,7 @@ const LOC_STRINGS = { en: { - versionName: `Version: 0.2.1, 'Less Dry'`, + versionName: `Version: 0.2.2, 'Less Unhinged'`, wip: 'Work in Progress', currencyTax: 'p (tax)', @@ -90,7 +94,7 @@ const LOC_STRINGS = btnPage: 'p. {0}', actionConfirmDialogue: `You are about to perform a {0} on\\\\ -{3} (plot {1}, {2}).\\\\\n\n\\\\{4}`, +{3} (plot {1}:{2}).\\\\\n\n\\\\{4}`, labelSave: 'Last saved: {0}s', labelSkip: 'Skip tutorial', @@ -138,10 +142,11 @@ symbol is drawn depending on its parameters.`, labelHarvestStage: 'Harvest stage', colony: `{0} of {1}, stage {2}`, + colonyWMaxStg: `{0} of {1}, stage {2}/{3}`, colonyProg: '{0} of {1}, stg. {2} ({3}\\%)', colonyStats: `Energy\\colon\\enspace {0} +{1}/s\\\\ Growth\\colon\\enspace {2}/{3} +{4}/s\\\\ -Profit\\colon\\enspace {5}p\\\\{6}`, +Profit\\colon\\enspace {5}p\\\\({6}/{7}) {8}`, dateTime: 'Year {0} week {1}/{2}\\\\{3}:{4}\\\\{5}', dateTimeBottom: '{3}:{4}\\\\Year {0} week {1}/{2}\\\\{5}', hacks: 'Hax', @@ -158,18 +163,18 @@ Profit\\colon\\enspace {5}p\\\\{6}`, switchPlant: 'Switch plant (plot {0})', switchPlantInfo: 'Cycles through the list of plants', plotPlant: 'Plot {0}: {1}', - viewColony: 'Examine colony', + viewColony: 'Examine', viewColonyInfo: 'Displays details about the colony', switchColony: 'Switch colony ({0}/{1})', switchColonyInfo: 'Cycles through the list of colonies', labelSpeed: 'Game speed: {0}x', - labelGM3D: '3D graph: ', - labelActionConfirm: 'Confirmation dialogues: ', + labelGM3D: '3D illustration: ', + labelActionConfirm: 'Confirmation dialogue: ', lineGraphModes: [ '2D graph: Off', - '2D graph: Photo-synthesis', + '2D graph: Photosynthesis', '2D graph: Growth' ], colonyModes: @@ -181,8 +186,8 @@ Profit\\colon\\enspace {5}p\\\\{6}`, ], actionPanelModes: [ - 'Time display: Top', - 'Time display: Bottom' + 'Action panel: Bottom', + 'Action panel: Top' ], plotTitleModes: [ @@ -191,10 +196,10 @@ Profit\\colon\\enspace {5}p\\\\{6}`, ], quatModes: [ - 'Quaternary: Potential profit', - 'Quaternary: Colony grid', - 'Quaternary: Perf (instant/avg)', - 'Quaternary: Perf (min/max)' + 'Account: Expected revenue', + 'Account: Colonies', + 'Account: Performance (latest/avg)', + 'Account: Performance (min/max)' ], plants: @@ -204,11 +209,12 @@ Profit\\colon\\enspace {5}p\\\\{6}`, name: 'Calendula', nameShort: 'C', info: 'A classic flower to start the month.', - LsDetails: `A(r, t): apex (stem shoot) providing r energy/sec. -t stages left until it splits.\\\\F(l, lim): internode of length l (grows up to -lim).\\\\I(t): flower stem. Grows a leaf every stage until t reaches 0.\\\\K(p): -flower of size p.\\\\L(r, lim): leaf providing r energy/s (grows up to lim). -\\\\—\\\\Harvest returns profit as the sum of all K sizes.`, + LsDetails: `A(r, t): apex (stem shoot) providing r energy/s. Has +t stages left until it splits.\\\\F(l, lim): internode of length l, growing up +to lim.\\\\I(t): flower stem. Grows a leaf every stage until t reaches 0, when +it turns into K.\\\\K(p): flower of size p.\\\\L(r, lim): leaf providing r +energy/s, growing up to lim. \\\\—\\\\Harvest returns profit as the sum of all K +sizes.`, stages: { index: @@ -236,8 +242,8 @@ known as the golden angle.`, 27: 'A second flower bud appears!', 28: 'The third and final flower appears.', 30: 'My wife used to munch on these flowers, raw.', - 31: `Try it!\\\\No, ;) I'm jesting. We'll sell them, for a -little profit.`, + 31: `Try it!\\\\Naw, only teasing you ;). Sell them later +for a little profit.`, 35: 'The first flower matures.', 39: 'The second flower matures.', 40: 'All flowers have reached maturity.', @@ -331,9 +337,9 @@ friend of all mathematicians.` } }, }, - plantStats: `({0}) {1}\\\\—\\\\Max. stage: {2}\\\\Synthesis rate: ` + -`{3}/s (noon)\\\\Growth rate: {4}/s\\\\Growth cost: {5} × {6} ` + -`symbols\\\\—\\\\Sequence:`, + plantStats: `({0}) {1}\\\\—\\\\Photosynthesis ` + +`rate: {3}/s (noon)\\\\Growth rate: {4}/s\\\\Growth cost: {5} × {6} symbols` + +`\\\\—\\\\Sequence:`, noCommentary: 'No commentary.', noLsDetails: 'No explanations.', @@ -823,15 +829,6 @@ let binarySearch = (arr: number[], target: number): number => let saturate = (x: number | BigNumber, min: number | BigNumber, max: number | BigNumber) => x > max ? max : x < min ? min : x; -const yearStartLookup = [0]; - -for(let i = 1; i <= 400; ++i) -{ - let leap = !(i%4) && (!!(i%100) || !(i%400)); - let offset = leap ? 366 : 365; - yearStartLookup[i] = yearStartLookup[i-1] + offset; -} - /** * Converts a number into a Unicode compliant subscripted string. */ @@ -856,6 +853,14 @@ let getCoordString = (x: number): string => x.toFixed(x >= -0.01 ? (x < -9.99 ? (x < -99.9 ? 0 : 1) : 2) ); +/** + * Returns a C-style formatted string from a BigNumber. Note that it can only + * handle up to the Number limit. + * @param {BigNumber} x the number. + * @returns {string} + */ +let getCString = (x: BigNumber): string => parseFloat(x.toString(6)).toString(); + /** * Purge a string array of empty lines. * @param {string[]} arr the array. @@ -877,6 +882,15 @@ let purgeEmpty = (arr: string[]): string[] => return result; } +const yearStartLookup = [0]; + +for(let i = 1; i <= 400; ++i) +{ + let leap = !(i%4) && (!!(i%100) || !(i%400)); + let offset = leap ? 366 : 365; + yearStartLookup[i] = yearStartLookup[i-1] + offset; +} + // Classes interface QueueInput @@ -2172,8 +2186,7 @@ class LSystem { let paramStrings: string[] = []; for(let j = 0; j < params[i].length; ++j) - paramStrings[j] = parseFloat(params[i][j].toString(6)) - .toString(); + paramStrings[j] = getCString(params[i][j]); result += `(${paramStrings.join(', ')})`; } @@ -3197,8 +3210,13 @@ class ColonyManager if(!c.propagated && plantUnlocks.includes(c.id)) plants[plot][c.id].level -= Math.min(plants[plot][c.id].level, c.population); - if(index == this.colonies[plot].length - 1) - switchColony.buy(1); + if(index == this.colonies[plot].length - 1 && plot == plotIdx) + { + let len = this.colonies[plotIdx].length; + colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; + selectedColony = this.colonies[plotIdx][colonyIdx[plotIdx]]; + renderer.colony = selectedColony; + } if(this.gangsta && plot == this.gangsta[0]) { if(this.gangsta[1] > index) @@ -3810,7 +3828,7 @@ const nofPlots = 6; const maxColoniesPerPlot = 4; const waterAmount = BigNumber.ONE; -const plotCosts = new FirstFreeCost(new ExponentialCost(900, Math.log2(120))); +const plotCosts = new FirstFreeCost(new ExponentialCost(800, Math.log2(120))); const plantUnlocks = ['calendula', 'basil', 'campion']; const plantUnlockCosts = new CompositeCost(1, new ConstantCost(2100), @@ -4292,10 +4310,6 @@ let quaternaryEntries = new QuaternaryEntry('p_5', null), new QuaternaryEntry('p_6', null), ]; -let taxQuaternaryEntry = -[ - new QuaternaryEntry('T_{\\text{p}}', null) -]; let perfNames = [ @@ -4545,32 +4559,50 @@ const settingsFrame = createFramedButton ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/spoted-flower.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/spoted-flower.png')); -const skipLabel = ui.createLatexLabel +// const skipLabel = ui.createLatexLabel +// ({ +// row: 1, column: 1, +// isVisible: !finishedTutorial, +// verticalTextAlignment: TextAlignment.START, +// margin: new Thickness(0, 9), +// text: getLoc('labelSkip'), +// fontSize: 10, +// textColor: Color.TEXT_MEDIUM +// }); +// const skipFrame = createFramedButton +// ({ +// row: 1, column: 0, +// isVisible: !finishedTutorial, +// horizontalOptions: LayoutOptions.START +// }, 2, () => +// { +// plotPerma.buy(1); +// updateAvailability(); +// }, game.settings.theme == Theme.LIGHT ? +// ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/shiny-apple.png') : +// ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/shiny-apple.png')); + +var controlStack = ui.createStackLayout ({ - row: 1, column: 1, - isVisible: !finishedTutorial, - verticalTextAlignment: TextAlignment.START, - margin: new Thickness(0, 9), - text: getLoc('labelSkip'), - fontSize: 10, - textColor: Color.TEXT_MEDIUM + isVisible: false, + padding: new Thickness(6, 0, 6, 8), + orientation: StackOrientation.VERTICAL, + children: + [ + ui.createGrid + ({ + columnSpacing: 8, + rowSpacing: 6, + rowDefinitions: ['auto'], + columnDefinitions: ['50*', '50*'] + }) + ] }); -const skipFrame = createFramedButton -({ - row: 1, column: 0, - isVisible: !finishedTutorial, - horizontalOptions: LayoutOptions.START -}, 2, () => -{ - plotPerma.buy(1); - updateAvailability(); -}, game.settings.theme == Theme.LIGHT ? -ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/shiny-apple.png') : -ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/shiny-apple.png')); var switchPlant: Upgrade; -var viewColony: Upgrade; -var switchColony: Upgrade; +// var viewColony: Upgrade; +// var switchColony: Upgrade; +// var switchbackColony: Upgrade; var plants = Array.from({length: nofPlots}, (_) => {return {};}); @@ -4593,48 +4625,8 @@ var init = () => currency = theory.createCurrency('p', 'p'); taxCurrency = theory.createCurrency(getLoc('currencyTax')); - /* Switch colony - Modulow - */ - { - switchColony = theory.createSingularUpgrade(2, currency, new FreeCost); - switchColony.getDescription = () => Localization.format( - getLoc('switchColony'), colonyIdx[plotIdx] + 1, - manager.colonies[plotIdx].length); - switchColony.info = getLoc('switchColonyInfo'); - switchColony.bought = (_) => - { - switchColony.level = 0; - if(manager.colonies[plotIdx].length < 2) - return; - - colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % - manager.colonies[plotIdx].length; - selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; - renderer.colony = selectedColony; - }; - switchColony.isAvailable = false; - } - /* View colony - Essential in learning the game. - */ - { - viewColony = theory.createSingularUpgrade(1, currency, new FreeCost); - viewColony.description = getLoc('viewColony'); - viewColony.info = getLoc('viewColonyInfo'); - viewColony.bought = (_) => - { - viewColony.level = 0; - selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; - if(!selectedColony) - return; - let seqMenu = createColonyViewMenu(selectedColony); - seqMenu.show(); - }; - viewColony.isAvailable = false; - } - - /* Plants & switch plants + /* Plants + No zombies. */ for(let i = 0; i < nofPlots; ++i) { @@ -4678,6 +4670,7 @@ var init = () => plants[i][plantUnlocks[j]].isAvailable = false; } } + /* Switch plant Moduloes */ @@ -4706,6 +4699,68 @@ var init = () => switchPlant.isAvailable = false; switchPlant.isAutoBuyable = false; } + /* Switchback colony + Too late to look back. + */ + // { + // switchbackColony = theory.createUpgrade(-3, currency, new FreeCost); + // switchbackColony.getDescription = () => Localization.format( + // getLoc('switchColony'), colonyIdx[plotIdx] + 1, + // manager.colonies[plotIdx].length); + // switchbackColony.info = getLoc('switchColonyInfo'); + // switchbackColony.bought = (_) => + // { + // switchbackColony.level = 0; + // let len = manager.colonies[plotIdx].length; + // if(len < 2) + // return; + + // colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; + // selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + // renderer.colony = selectedColony; + // }; + // switchbackColony.isAvailable = false; + // } + /* Switch colony + Modulow + */ + // { + // switchColony = theory.createUpgrade(-2, currency, new FreeCost); + // switchColony.getDescription = () => Localization.format( + // getLoc('switchColony'), colonyIdx[plotIdx] + 1, + // manager.colonies[plotIdx].length); + // switchColony.info = getLoc('switchColonyInfo'); + // switchColony.bought = (_) => + // { + // switchColony.level = 0; + // let len = manager.colonies[plotIdx].length; + // if(len < 2) + // return; + + // colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; + // selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + // renderer.colony = selectedColony; + // }; + // switchColony.isAvailable = false; + // } + /* View colony + Essential in learning the game. + */ + // { + // viewColony = theory.createUpgrade(-4, currency, new FreeCost); + // viewColony.description = getLoc('viewColony'); + // viewColony.info = getLoc('viewColonyInfo'); + // viewColony.bought = (_) => + // { + // viewColony.level = 0; + // selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + // if(!selectedColony) + // return; + // let seqMenu = createColonyViewMenu(selectedColony); + // seqMenu.show(); + // }; + // viewColony.isAvailable = false; + // } /* Notebook Unlocks when acquiring Buy All. @@ -4938,11 +4993,10 @@ var updateAvailability = () => else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = true; - viewColony.isAvailable = true; - switchColony.isAvailable = true; - skipLabel.isVisible = !finishedTutorial; - skipFrame.isVisible = !finishedTutorial; + switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; + controlStack.isVisible = true; + // skipLabel.isVisible = !finishedTutorial; + // skipFrame.isVisible = !finishedTutorial; } for(let i = 0; i < plotPerma.level; ++i) @@ -5071,8 +5125,8 @@ var getEquationOverlay = () => [ settingsFrame, settingsLabel, - skipFrame, - skipLabel + // skipFrame, + // skipLabel ] }), ui.createGrid @@ -5115,24 +5169,174 @@ var getEquationOverlay = () => // actionsLabel, ] }) - ] }); return result; } +let createLSRButton = (callback: () => void, text: string, +height: number = getBtnSize(ui.screenWidth), fontSize: number = 14): Frame => +{ + let frame = ui.createFrame + ({ + row: 0, column: 1, + heightRequest: height, + cornerRadius: 1, + // padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel + ({ + text, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + textColor: Color.TEXT, + fontSize + }), + borderColor: Color.BORDER + }); + frame.onTouched = (e: TouchEvent) => + { + if(e.type == TouchType.PRESSED) + { + frame.borderColor = Color.TRANSPARENT; + (frame.content).textColor = Color.TEXT_MEDIUM; + } + else if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + frame.borderColor = Color.BORDER; + (frame.content).textColor = Color.TEXT; + callback(); + } + else if(e.type == TouchType.CANCELLED) + { + frame.borderColor = Color.BORDER; + (frame.content).textColor = Color.TEXT; + } + }; + return frame; +} + +var getCurrencyBarDelegate = () => +{ + // let currencyBar = ui.createFrame + // ({ + // heightRequest: getImageSize(ui.screenWidth), + // cornerRadius: 1, + // // padding: new Thickness(0, 2), + // content: ui.createLatexLabel + // ({ + // text: () => Utils.getMath(`${currency.value} + // \\text{${currency.symbol}}\\enspace + // (${theory.latexSymbol} = ${theory.tau})`), + // margin: new Thickness(0, 6), + // fontSize: 11, + // horizontalTextAlignment: TextAlignment.CENTER, + // verticalTextAlignment: TextAlignment.CENTER + // }), + // borderColor: Color.BORDER + // }); + let tauLabel = ui.createLatexLabel + ({ + row: 0, column: 0, + text: () => Utils.getMath(`${theory.tau}${theory.latexSymbol}`), + heightRequest: getImageSize(ui.screenWidth), + margin: new Thickness(0, 2, 0, 0), + fontSize: 12, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }) + let pennyLabel = ui.createLatexLabel + ({ + row: 0, column: 1, + text: () => + { + if(theory.publicationUpgrade.level && theory.canPublish) + { + // @ts-expect-error + taxCurrency.value = getCurrencyFromTau(theory.tau)[0] * taxRate; + return Utils.getMath(`${currency.value} + \\text{${currency.symbol}}\\enspace (${taxCurrency.symbol} = + ${taxCurrency.value}\\text{${currency.symbol}})`); + } + return Utils.getMath(`${currency.value}\\text{${currency.symbol}}`); + }, + heightRequest: getImageSize(ui.screenWidth), + margin: new Thickness(0, 2, 0, 0), + fontSize: 12, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }); + + let examineFrame = createLSRButton(() => + { + selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + if(!selectedColony) + return; + let seqMenu = createColonyViewMenu(selectedColony); + seqMenu.show(); + }, getLoc('viewColony'), getSmallBtnSize(ui.screenWidth), 12); + examineFrame.row = 0; + examineFrame.column = 1; + let switchbackBtn = createLSRButton(() => + { + let len = manager.colonies[plotIdx].length; + colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; + selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + renderer.colony = selectedColony; + }, '↑', getSmallBtnSize(ui.screenWidth)); + switchbackBtn.column = 0; + let switchBtn = createLSRButton(() => + { + let len = manager.colonies[plotIdx].length; + colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; + selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + renderer.colony = selectedColony; + }, '↓', getSmallBtnSize(ui.screenWidth)); + switchBtn.column = 1; + + (controlStack.children[0]).children = + [ + examineFrame, + ui.createGrid + ({ + row: 0, + column: 0, + columnSpacing: 7, + columnDefinitions: ['50*', '50*'], + children: + [ + switchbackBtn, + switchBtn + ] + }) + ]; + let currencyGrid = ui.createGrid + ({ + // columnDefinitions: ['auto', 'auto'], + // horizontalOptions: LayoutOptions.CENTER, + children: [tauLabel, pennyLabel] + }) + return ui.createStackLayout + ({ + children: [currencyGrid, controlStack] + }); +} + /** * Returns the colony title for representation. */ -let getColonyTitleString = (colony: Colony, prog = false, escapeHash = false) => -Localization.format(getLoc(prog ? 'colonyProg' : 'colony'), -colony.propagated ? `+${colony.population}` : colony.population, +let getColonyTitleString = (colony: Colony, prog = false, maxStage = false, +escapeHash = false) => +Localization.format(getLoc(prog ? 'colonyProg' : (maxStage ? 'colonyWMaxStg': +'colony')), colony.propagated ? `+${colony.population}` : colony.population, getLoc('plants')[colony.id]?.name ?? `${escapeHash ? '\\' : ''}#${colony.id}`, // @ts-expect-error colony.stage, prog ? colony.growth * BigNumber.HUNDRED / // @ts-expect-error (plantData[colony.id].growthCost * BigNumber.from(colony.sequence.length)) : -''); +plantData[colony.id].maxStage ?? '∞'); var getPrimaryEquation = () => { @@ -5178,7 +5382,8 @@ var getSecondaryEquation = () => plantData[c.id].growthCost * BigNumber.from(c.sequence.length), // @ts-expect-error plantData[c.id].growthRate * BigNumber.from(growthCoord), - c.profit, status)}}`; + c.profit, colonyIdx[plotIdx] + 1, + manager.colonies[plotIdx].length, status)}}`; break; case ColonyModes.SIMPLE: result = `\\text{${getColonyTitleString(c)}}\\\\E=${c.energy}, @@ -5286,13 +5491,6 @@ var getQuaternaryEntries = () => break; } - if(theory.publicationUpgrade.level && theory.canPublish) - { - // @ts-expect-error - taxCurrency.value = getCurrencyFromTau(theory.tau)[0] * taxRate; - taxQuaternaryEntry[0].value = taxCurrency.value; - return quaternaryEntries.concat(taxQuaternaryEntry); - } return quaternaryEntries; //.slice(0, plotPerma.level); } @@ -5664,11 +5862,11 @@ let createColonyViewMenu = (colony: Colony) => e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // colonyViewConfig[colony.id].params = - // !colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = colonyViewConfig[colony.id].params; - paramSwitch.isToggled = !paramSwitch.isToggled; - colonyViewConfig[colony.id].params = paramSwitch.isToggled; + colonyViewConfig[colony.id].params = + !colonyViewConfig[colony.id].params; + paramSwitch.isToggled = colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = !paramSwitch.isToggled; + // colonyViewConfig[colony.id].params = paramSwitch.isToggled; reconstructionTask = { start: 0 @@ -5690,7 +5888,7 @@ let createColonyViewMenu = (colony: Colony) => return reconstructionTask.result; } - let tmpTitle = getColonyTitleString(colony); + let tmpTitle = getColonyTitleString(colony, false, true); let tmpStage = colony.stage; let cmtStage = -1; let updateCommentary = () => @@ -5756,7 +5954,7 @@ let createColonyViewMenu = (colony: Colony) => Menu title and commentary are updated dynamically without the player having to close and re-open. */ - tmpTitle = getColonyTitleString(colony); + tmpTitle = getColonyTitleString(colony, false, true); tmpCmt = updateCommentary(); plantStats.text = Localization.format(getLoc('plantStats'), cmtStage, tmpCmt, plantData[colony.id].maxStage ?? '∞', @@ -6266,7 +6464,7 @@ let createConfirmationMenu = (plot: number, index: number, id: number) => ({ text: Localization.format(getLoc('actionConfirmDialogue'), getLoc('labelActions')[id], plot + 1, index + 1, - getColonyTitleString(c, false, true), + getColonyTitleString(c, false, false, true), Localization.get('GenPopupContinue')), horizontalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 15) @@ -6375,9 +6573,10 @@ let createWorldMenu = () => e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // graphMode3D = !graphMode3D; - GM3Switch.isToggled = !GM3Switch.isToggled; - graphMode3D = GM3Switch.isToggled; + graphMode3D = !graphMode3D; + GM3Switch.isToggled = graphMode3D; + // GM3Switch.isToggled = !GM3Switch.isToggled; + // graphMode3D = GM3Switch.isToggled; } } }); @@ -6445,10 +6644,10 @@ let createWorldMenu = () => e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // actionPanelOnTop = !actionPanelOnTop; - // APSwitch.isToggled = actionPanelOnTop; - APSwitch.isToggled = !APSwitch.isToggled; - actionPanelOnTop = APSwitch.isToggled; + actionPanelOnTop = !actionPanelOnTop; + APSwitch.isToggled = actionPanelOnTop; + // APSwitch.isToggled = !APSwitch.isToggled; + // actionPanelOnTop = APSwitch.isToggled; APLabel.text = getLoc('actionPanelModes')[ Number(actionPanelOnTop)]; } @@ -6472,10 +6671,10 @@ let createWorldMenu = () => e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // fancyPlotTitle = !fancyPlotTitle; - // PTSwitch.isToggled = fancyPlotTitle; - PTSwitch.isToggled = !PTSwitch.isToggled; - fancyPlotTitle = PTSwitch.isToggled; + fancyPlotTitle = !fancyPlotTitle; + PTSwitch.isToggled = fancyPlotTitle; + // PTSwitch.isToggled = !PTSwitch.isToggled; + // fancyPlotTitle = PTSwitch.isToggled; PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; theory.invalidatePrimaryEquation(); } @@ -6499,10 +6698,10 @@ let createWorldMenu = () => e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // actionConfirm = !actionConfirm; - // ACSwitch.isToggled = actionConfirm; - ACSwitch.isToggled = !ACSwitch.isToggled; - actionConfirm = ACSwitch.isToggled; + actionConfirm = !actionConfirm; + ACSwitch.isToggled = actionConfirm; + // ACSwitch.isToggled = !ACSwitch.isToggled; + // actionConfirm = ACSwitch.isToggled; } } }); diff --git a/theory.js b/theory.js index db7824d..2a18eec 100644 --- a/theory.js +++ b/theory.js @@ -7,7 +7,7 @@ import { LayoutOptions } from './api/ui/properties/LayoutOptions'; import { TextAlignment } from './api/ui/properties/TextAlignment'; import { Thickness } from './api/ui/properties/Thickness'; import { Vector3 } from './api/Vector3'; -import { log } from './api/Utils'; +import { Utils, log } from './api/Utils'; import { ui } from './api/ui/UI'; import { Aspect } from './api/ui/properties/Aspect'; import { ClearButtonVisibility } from './api/ui/properties/ClearButtonVisibility'; @@ -20,6 +20,7 @@ import { MathExpression } from './api/MathExpression'; import { Theme } from './api/Settings'; import { Sound } from './api/Sound'; import { game } from './api/Game'; +import { StackOrientation } from './api/ui/properties/StackOrientation'; import { profilers } from './api/Profiler'; var id = 'lemmas_garden'; var getName = (language) => { @@ -39,7 +40,7 @@ Welcome to Lemma's Garden, an idle botanical theory built on the grammar of ` + return descs[language] ?? descs.en; }; var authors = 'propfeds\n\nThanks to:\ngame-icons.net, for the icons'; -var version = 0.21; +var version = 0.22; // Numbers are often converted into 32-bit signed integers in JINT. const INT_MAX = 0x7fffffff; const INT_MIN = -0x80000000; @@ -55,7 +56,7 @@ const NORMALISE_QUATERNIONS = false; const MENU_LANG = Localization.language; const LOC_STRINGS = { en: { - versionName: `Version: 0.2.1, 'Less Dry'`, + versionName: `Version: 0.2.2, 'Less Unhinged'`, wip: 'Work in Progress', currencyTax: 'p (tax)', pubTax: 'Tax on publish\\colon', @@ -69,7 +70,7 @@ const LOC_STRINGS = { btnContents: 'Table of\nContents', btnPage: 'p. {0}', actionConfirmDialogue: `You are about to perform a {0} on\\\\ -{3} (plot {1}, {2}).\\\\\n\n\\\\{4}`, +{3} (plot {1}:{2}).\\\\\n\n\\\\{4}`, labelSave: 'Last saved: {0}s', labelSkip: 'Skip tutorial', labelWater: 'Water', @@ -113,10 +114,11 @@ symbol is drawn depending on its parameters.`, labelMaxLevel: 'Max. size', labelHarvestStage: 'Harvest stage', colony: `{0} of {1}, stage {2}`, + colonyWMaxStg: `{0} of {1}, stage {2}/{3}`, colonyProg: '{0} of {1}, stg. {2} ({3}\\%)', colonyStats: `Energy\\colon\\enspace {0} +{1}/s\\\\ Growth\\colon\\enspace {2}/{3} +{4}/s\\\\ -Profit\\colon\\enspace {5}p\\\\{6}`, +Profit\\colon\\enspace {5}p\\\\({6}/{7}) {8}`, dateTime: 'Year {0} week {1}/{2}\\\\{3}:{4}\\\\{5}', dateTimeBottom: '{3}:{4}\\\\Year {0} week {1}/{2}\\\\{5}', hacks: 'Hax', @@ -130,16 +132,16 @@ Profit\\colon\\enspace {5}p\\\\{6}`, switchPlant: 'Switch plant (plot {0})', switchPlantInfo: 'Cycles through the list of plants', plotPlant: 'Plot {0}: {1}', - viewColony: 'Examine colony', + viewColony: 'Examine', viewColonyInfo: 'Displays details about the colony', switchColony: 'Switch colony ({0}/{1})', switchColonyInfo: 'Cycles through the list of colonies', labelSpeed: 'Game speed: {0}x', - labelGM3D: '3D graph: ', - labelActionConfirm: 'Confirmation dialogues: ', + labelGM3D: '3D illustration: ', + labelActionConfirm: 'Confirmation dialogue: ', lineGraphModes: [ '2D graph: Off', - '2D graph: Photo-synthesis', + '2D graph: Photosynthesis', '2D graph: Growth' ], colonyModes: [ @@ -149,29 +151,30 @@ Profit\\colon\\enspace {5}p\\\\{6}`, 'Colony view: List' ], actionPanelModes: [ - 'Time display: Top', - 'Time display: Bottom' + 'Action panel: Bottom', + 'Action panel: Top' ], plotTitleModes: [ 'Plot title: Serif', 'Plot title: Cursive' ], quatModes: [ - 'Quaternary: Potential profit', - 'Quaternary: Colony grid', - 'Quaternary: Perf (instant/avg)', - 'Quaternary: Perf (min/max)' + 'Account: Expected revenue', + 'Account: Colonies', + 'Account: Performance (latest/avg)', + 'Account: Performance (min/max)' ], plants: { calendula: { name: 'Calendula', nameShort: 'C', info: 'A classic flower to start the month.', - LsDetails: `A(r, t): apex (stem shoot) providing r energy/sec. -t stages left until it splits.\\\\F(l, lim): internode of length l (grows up to -lim).\\\\I(t): flower stem. Grows a leaf every stage until t reaches 0.\\\\K(p): -flower of size p.\\\\L(r, lim): leaf providing r energy/s (grows up to lim). -\\\\—\\\\Harvest returns profit as the sum of all K sizes.`, + LsDetails: `A(r, t): apex (stem shoot) providing r energy/s. Has +t stages left until it splits.\\\\F(l, lim): internode of length l, growing up +to lim.\\\\I(t): flower stem. Grows a leaf every stage until t reaches 0, when +it turns into K.\\\\K(p): flower of size p.\\\\L(r, lim): leaf providing r +energy/s, growing up to lim. \\\\—\\\\Harvest returns profit as the sum of all K +sizes.`, stages: { index: [ 0, @@ -197,8 +200,8 @@ known as the golden angle.`, 27: 'A second flower bud appears!', 28: 'The third and final flower appears.', 30: 'My wife used to munch on these flowers, raw.', - 31: `Try it!\\\\No, ;) I'm jesting. We'll sell them, for a -little profit.`, + 31: `Try it!\\\\Naw, only teasing you ;). Sell them later +for a little profit.`, 35: 'The first flower matures.', 39: 'The second flower matures.', 40: 'All flowers have reached maturity.', @@ -284,9 +287,9 @@ friend of all mathematicians.` } }, }, - plantStats: `({0}) {1}\\\\—\\\\Max. stage: {2}\\\\Synthesis rate: ` + - `{3}/s (noon)\\\\Growth rate: {4}/s\\\\Growth cost: {5} × {6} ` + - `symbols\\\\—\\\\Sequence:`, + plantStats: `({0}) {1}\\\\—\\\\Photosynthesis ` + + `rate: {3}/s (noon)\\\\Growth rate: {4}/s\\\\Growth cost: {5} × {6} symbols` + + `\\\\—\\\\Sequence:`, noCommentary: 'No commentary.', noLsDetails: 'No explanations.', permaShelf: 'Bookshelf', @@ -706,12 +709,6 @@ let binarySearch = (arr, target) => { * Restricts a number into the specified range. */ let saturate = (x, min, max) => x > max ? max : x < min ? min : x; -const yearStartLookup = [0]; -for (let i = 1; i <= 400; ++i) { - let leap = !(i % 4) && (!!(i % 100) || !(i % 400)); - let offset = leap ? 366 : 365; - yearStartLookup[i] = yearStartLookup[i - 1] + offset; -} /** * Converts a number into a Unicode compliant subscripted string. */ @@ -731,6 +728,13 @@ let getSubscript = (x) => { let getCoordString = (x) => x.toFixed(x >= -0.01 ? (x <= 9.999 ? 3 : (x <= 99.99 ? 2 : 1)) : (x < -9.99 ? (x < -99.9 ? 0 : 1) : 2)); +/** + * Returns a C-style formatted string from a BigNumber. Note that it can only + * handle up to the Number limit. + * @param {BigNumber} x the number. + * @returns {string} + */ +let getCString = (x) => parseFloat(x.toString(6)).toString(); /** * Purge a string array of empty lines. * @param {string[]} arr the array. @@ -748,6 +752,12 @@ let purgeEmpty = (arr) => { } return result; }; +const yearStartLookup = [0]; +for (let i = 1; i <= 400; ++i) { + let leap = !(i % 4) && (!!(i % 100) || !(i % 400)); + let offset = leap ? 366 : 365; + yearStartLookup[i] = yearStartLookup[i - 1] + offset; +} /** * What else do you expect? */ @@ -1720,8 +1730,7 @@ class LSystem { if (displayParams && params[i]) { let paramStrings = []; for (let j = 0; j < params[i].length; ++j) - paramStrings[j] = parseFloat(params[i][j].toString(6)) - .toString(); + paramStrings[j] = getCString(params[i][j]); result += `(${paramStrings.join(', ')})`; } switch (sequence[i + 1]) { @@ -2435,8 +2444,12 @@ class ColonyManager { return; if (!c.propagated && plantUnlocks.includes(c.id)) plants[plot][c.id].level -= Math.min(plants[plot][c.id].level, c.population); - if (index == this.colonies[plot].length - 1) - switchColony.buy(1); + if (index == this.colonies[plot].length - 1 && plot == plotIdx) { + let len = this.colonies[plotIdx].length; + colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; + selectedColony = this.colonies[plotIdx][colonyIdx[plotIdx]]; + renderer.colony = selectedColony; + } if (this.gangsta && plot == this.gangsta[0]) { if (this.gangsta[1] > index) --this.gangsta[1]; @@ -2900,7 +2913,7 @@ const hourLength = dayLength / 24; const nofPlots = 6; const maxColoniesPerPlot = 4; const waterAmount = BigNumber.ONE; -const plotCosts = new FirstFreeCost(new ExponentialCost(900, Math.log2(120))); +const plotCosts = new FirstFreeCost(new ExponentialCost(800, Math.log2(120))); const plantUnlocks = ['calendula', 'basil', 'campion']; const plantUnlockCosts = new CompositeCost(1, new ConstantCost(2100), new ConstantCost(145000)); const permaCosts = [ @@ -3313,9 +3326,6 @@ let quaternaryEntries = [ new QuaternaryEntry('p_5', null), new QuaternaryEntry('p_6', null), ]; -let taxQuaternaryEntry = [ - new QuaternaryEntry('T_{\\text{p}}', null) -]; let perfNames = [ ['tick', 't'], ['manager', 'm'], @@ -3505,28 +3515,45 @@ const settingsFrame = createFramedButton({ }, 2, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/spoted-flower.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/spoted-flower.png')); -const skipLabel = ui.createLatexLabel({ - row: 1, column: 1, - isVisible: !finishedTutorial, - verticalTextAlignment: TextAlignment.START, - margin: new Thickness(0, 9), - text: getLoc('labelSkip'), - fontSize: 10, - textColor: Color.TEXT_MEDIUM +// const skipLabel = ui.createLatexLabel +// ({ +// row: 1, column: 1, +// isVisible: !finishedTutorial, +// verticalTextAlignment: TextAlignment.START, +// margin: new Thickness(0, 9), +// text: getLoc('labelSkip'), +// fontSize: 10, +// textColor: Color.TEXT_MEDIUM +// }); +// const skipFrame = createFramedButton +// ({ +// row: 1, column: 0, +// isVisible: !finishedTutorial, +// horizontalOptions: LayoutOptions.START +// }, 2, () => +// { +// plotPerma.buy(1); +// updateAvailability(); +// }, game.settings.theme == Theme.LIGHT ? +// ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/shiny-apple.png') : +// ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/shiny-apple.png')); +var controlStack = ui.createStackLayout({ + isVisible: false, + padding: new Thickness(6, 0, 6, 8), + orientation: StackOrientation.VERTICAL, + children: [ + ui.createGrid({ + columnSpacing: 8, + rowSpacing: 6, + rowDefinitions: ['auto'], + columnDefinitions: ['50*', '50*'] + }) + ] }); -const skipFrame = createFramedButton({ - row: 1, column: 0, - isVisible: !finishedTutorial, - horizontalOptions: LayoutOptions.START -}, 2, () => { - plotPerma.buy(1); - updateAvailability(); -}, game.settings.theme == Theme.LIGHT ? - ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/shiny-apple.png') : - ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/shiny-apple.png')); var switchPlant; -var viewColony; -var switchColony; +// var viewColony: Upgrade; +// var switchColony: Upgrade; +// var switchbackColony: Upgrade; var plants = Array.from({ length: nofPlots }, (_) => { return {}; }); var shelfPerma; var plotPerma; @@ -3542,42 +3569,8 @@ var taxCurrency; var init = () => { currency = theory.createCurrency('p', 'p'); taxCurrency = theory.createCurrency(getLoc('currencyTax')); - /* Switch colony - Modulow - */ - { - switchColony = theory.createSingularUpgrade(2, currency, new FreeCost); - switchColony.getDescription = () => Localization.format(getLoc('switchColony'), colonyIdx[plotIdx] + 1, manager.colonies[plotIdx].length); - switchColony.info = getLoc('switchColonyInfo'); - switchColony.bought = (_) => { - switchColony.level = 0; - if (manager.colonies[plotIdx].length < 2) - return; - colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % - manager.colonies[plotIdx].length; - selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; - renderer.colony = selectedColony; - }; - switchColony.isAvailable = false; - } - /* View colony - Essential in learning the game. - */ - { - viewColony = theory.createSingularUpgrade(1, currency, new FreeCost); - viewColony.description = getLoc('viewColony'); - viewColony.info = getLoc('viewColonyInfo'); - viewColony.bought = (_) => { - viewColony.level = 0; - selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; - if (!selectedColony) - return; - let seqMenu = createColonyViewMenu(selectedColony); - seqMenu.show(); - }; - viewColony.isAvailable = false; - } - /* Plants & switch plants + /* Plants + No zombies. */ for (let i = 0; i < nofPlots; ++i) { for (let j = 0; j < plantUnlocks.length; ++j) { @@ -3636,6 +3629,66 @@ var init = () => { switchPlant.isAvailable = false; switchPlant.isAutoBuyable = false; } + /* Switchback colony + Too late to look back. + */ + // { + // switchbackColony = theory.createUpgrade(-3, currency, new FreeCost); + // switchbackColony.getDescription = () => Localization.format( + // getLoc('switchColony'), colonyIdx[plotIdx] + 1, + // manager.colonies[plotIdx].length); + // switchbackColony.info = getLoc('switchColonyInfo'); + // switchbackColony.bought = (_) => + // { + // switchbackColony.level = 0; + // let len = manager.colonies[plotIdx].length; + // if(len < 2) + // return; + // colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; + // selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + // renderer.colony = selectedColony; + // }; + // switchbackColony.isAvailable = false; + // } + /* Switch colony + Modulow + */ + // { + // switchColony = theory.createUpgrade(-2, currency, new FreeCost); + // switchColony.getDescription = () => Localization.format( + // getLoc('switchColony'), colonyIdx[plotIdx] + 1, + // manager.colonies[plotIdx].length); + // switchColony.info = getLoc('switchColonyInfo'); + // switchColony.bought = (_) => + // { + // switchColony.level = 0; + // let len = manager.colonies[plotIdx].length; + // if(len < 2) + // return; + // colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; + // selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + // renderer.colony = selectedColony; + // }; + // switchColony.isAvailable = false; + // } + /* View colony + Essential in learning the game. + */ + // { + // viewColony = theory.createUpgrade(-4, currency, new FreeCost); + // viewColony.description = getLoc('viewColony'); + // viewColony.info = getLoc('viewColonyInfo'); + // viewColony.bought = (_) => + // { + // viewColony.level = 0; + // selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + // if(!selectedColony) + // return; + // let seqMenu = createColonyViewMenu(selectedColony); + // seqMenu.show(); + // }; + // viewColony.isAvailable = false; + // } /* Notebook Unlocks when acquiring Buy All. */ @@ -3818,11 +3871,10 @@ var updateAvailability = () => { } else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = true; - viewColony.isAvailable = true; - switchColony.isAvailable = true; - skipLabel.isVisible = !finishedTutorial; - skipFrame.isVisible = !finishedTutorial; + switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; + controlStack.isVisible = true; + // skipLabel.isVisible = !finishedTutorial; + // skipFrame.isVisible = !finishedTutorial; } for (let i = 0; i < plotPerma.level; ++i) { for (let j = 0; j < plantUnlocks.length; ++j) @@ -3931,8 +3983,8 @@ var getEquationOverlay = () => { children: [ settingsFrame, settingsLabel, - skipFrame, - skipLabel + // skipFrame, + // skipLabel ] }), ui.createGrid({ @@ -3974,15 +4026,142 @@ var getEquationOverlay = () => { }); return result; }; +let createLSRButton = (callback, text, height = getBtnSize(ui.screenWidth), fontSize = 14) => { + let frame = ui.createFrame({ + row: 0, column: 1, + heightRequest: height, + cornerRadius: 1, + // padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel({ + text, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + textColor: Color.TEXT, + fontSize + }), + borderColor: Color.BORDER + }); + frame.onTouched = (e) => { + if (e.type == TouchType.PRESSED) { + frame.borderColor = Color.TRANSPARENT; + frame.content.textColor = Color.TEXT_MEDIUM; + } + else if (e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) { + Sound.playClick(); + frame.borderColor = Color.BORDER; + frame.content.textColor = Color.TEXT; + callback(); + } + else if (e.type == TouchType.CANCELLED) { + frame.borderColor = Color.BORDER; + frame.content.textColor = Color.TEXT; + } + }; + return frame; +}; +var getCurrencyBarDelegate = () => { + // let currencyBar = ui.createFrame + // ({ + // heightRequest: getImageSize(ui.screenWidth), + // cornerRadius: 1, + // // padding: new Thickness(0, 2), + // content: ui.createLatexLabel + // ({ + // text: () => Utils.getMath(`${currency.value} + // \\text{${currency.symbol}}\\enspace + // (${theory.latexSymbol} = ${theory.tau})`), + // margin: new Thickness(0, 6), + // fontSize: 11, + // horizontalTextAlignment: TextAlignment.CENTER, + // verticalTextAlignment: TextAlignment.CENTER + // }), + // borderColor: Color.BORDER + // }); + let tauLabel = ui.createLatexLabel({ + row: 0, column: 0, + text: () => Utils.getMath(`${theory.tau}${theory.latexSymbol}`), + heightRequest: getImageSize(ui.screenWidth), + margin: new Thickness(0, 2, 0, 0), + fontSize: 12, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }); + let pennyLabel = ui.createLatexLabel({ + row: 0, column: 1, + text: () => { + if (theory.publicationUpgrade.level && theory.canPublish) { + // @ts-expect-error + taxCurrency.value = getCurrencyFromTau(theory.tau)[0] * taxRate; + return Utils.getMath(`${currency.value} + \\text{${currency.symbol}}\\enspace (${taxCurrency.symbol} = + ${taxCurrency.value}\\text{${currency.symbol}})`); + } + return Utils.getMath(`${currency.value}\\text{${currency.symbol}}`); + }, + heightRequest: getImageSize(ui.screenWidth), + margin: new Thickness(0, 2, 0, 0), + fontSize: 12, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }); + let examineFrame = createLSRButton(() => { + selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + if (!selectedColony) + return; + let seqMenu = createColonyViewMenu(selectedColony); + seqMenu.show(); + }, getLoc('viewColony'), getSmallBtnSize(ui.screenWidth), 12); + examineFrame.row = 0; + examineFrame.column = 1; + let switchbackBtn = createLSRButton(() => { + let len = manager.colonies[plotIdx].length; + colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; + selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + renderer.colony = selectedColony; + }, '↑', getSmallBtnSize(ui.screenWidth)); + switchbackBtn.column = 0; + let switchBtn = createLSRButton(() => { + let len = manager.colonies[plotIdx].length; + colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; + selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; + renderer.colony = selectedColony; + }, '↓', getSmallBtnSize(ui.screenWidth)); + switchBtn.column = 1; + controlStack.children[0].children = + [ + examineFrame, + ui.createGrid({ + row: 0, + column: 0, + columnSpacing: 7, + columnDefinitions: ['50*', '50*'], + children: [ + switchbackBtn, + switchBtn + ] + }) + ]; + let currencyGrid = ui.createGrid({ + // columnDefinitions: ['auto', 'auto'], + // horizontalOptions: LayoutOptions.CENTER, + children: [tauLabel, pennyLabel] + }); + return ui.createStackLayout({ + children: [currencyGrid, controlStack] + }); +}; /** * Returns the colony title for representation. */ -let getColonyTitleString = (colony, prog = false, escapeHash = false) => Localization.format(getLoc(prog ? 'colonyProg' : 'colony'), colony.propagated ? `+${colony.population}` : colony.population, getLoc('plants')[colony.id]?.name ?? `${escapeHash ? '\\' : ''}#${colony.id}`, +let getColonyTitleString = (colony, prog = false, maxStage = false, escapeHash = false) => Localization.format(getLoc(prog ? 'colonyProg' : (maxStage ? 'colonyWMaxStg' : + 'colony')), colony.propagated ? `+${colony.population}` : colony.population, getLoc('plants')[colony.id]?.name ?? `${escapeHash ? '\\' : ''}#${colony.id}`, // @ts-expect-error colony.stage, prog ? colony.growth * BigNumber.HUNDRED / // @ts-expect-error (plantData[colony.id].growthCost * BigNumber.from(colony.sequence.length)) : - ''); + plantData[colony.id].maxStage ?? '∞'); var getPrimaryEquation = () => { return Localization.format(getLoc(fancyPlotTitle ? 'plotTitleF' : 'plotTitle'), plotIdx + 1); @@ -4017,7 +4196,7 @@ var getSecondaryEquation = () => { // @ts-expect-error plantData[c.id].growthCost * BigNumber.from(c.sequence.length), // @ts-expect-error - plantData[c.id].growthRate * BigNumber.from(growthCoord), c.profit, status)}}`; + plantData[c.id].growthRate * BigNumber.from(growthCoord), c.profit, colonyIdx[plotIdx] + 1, manager.colonies[plotIdx].length, status)}}`; break; case 2 /* ColonyModes.SIMPLE */: result = `\\text{${getColonyTitleString(c)}}\\\\E=${c.energy}, @@ -4104,12 +4283,6 @@ var getQuaternaryEntries = () => { } break; } - if (theory.publicationUpgrade.level && theory.canPublish) { - // @ts-expect-error - taxCurrency.value = getCurrencyFromTau(theory.tau)[0] * taxRate; - taxQuaternaryEntry[0].value = taxCurrency.value; - return quaternaryEntries.concat(taxQuaternaryEntry); - } return quaternaryEntries; //.slice(0, plotPerma.level); }; let createVariableMenu = (variables) => { @@ -4410,11 +4583,11 @@ let createColonyViewMenu = (colony) => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // colonyViewConfig[colony.id].params = - // !colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = colonyViewConfig[colony.id].params; - paramSwitch.isToggled = !paramSwitch.isToggled; - colonyViewConfig[colony.id].params = paramSwitch.isToggled; + colonyViewConfig[colony.id].params = + !colonyViewConfig[colony.id].params; + paramSwitch.isToggled = colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = !paramSwitch.isToggled; + // colonyViewConfig[colony.id].params = paramSwitch.isToggled; reconstructionTask = { start: 0 @@ -4430,7 +4603,7 @@ let createColonyViewMenu = (colony) => { } return reconstructionTask.result; }; - let tmpTitle = getColonyTitleString(colony); + let tmpTitle = getColonyTitleString(colony, false, true); let tmpStage = colony.stage; let cmtStage = -1; let updateCommentary = () => { @@ -4480,7 +4653,7 @@ let createColonyViewMenu = (colony) => { Menu title and commentary are updated dynamically without the player having to close and re-open. */ - tmpTitle = getColonyTitleString(colony); + tmpTitle = getColonyTitleString(colony, false, true); tmpCmt = updateCommentary(); plantStats.text = Localization.format(getLoc('plantStats'), cmtStage, tmpCmt, plantData[colony.id].maxStage ?? '∞', colony.synthRate, plantData[colony.id].growthRate, plantData[colony.id].growthCost, colony.sequence.length); tmpStage = colony.stage; @@ -4885,7 +5058,7 @@ let createConfirmationMenu = (plot, index, id) => { content: ui.createStackLayout({ children: [ ui.createLatexLabel({ - text: Localization.format(getLoc('actionConfirmDialogue'), getLoc('labelActions')[id], plot + 1, index + 1, getColonyTitleString(c, false, true), Localization.get('GenPopupContinue')), + text: Localization.format(getLoc('actionConfirmDialogue'), getLoc('labelActions')[id], plot + 1, index + 1, getColonyTitleString(c, false, false, true), Localization.get('GenPopupContinue')), horizontalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 15) }), @@ -4971,9 +5144,10 @@ let createWorldMenu = () => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // graphMode3D = !graphMode3D; - GM3Switch.isToggled = !GM3Switch.isToggled; - graphMode3D = GM3Switch.isToggled; + graphMode3D = !graphMode3D; + GM3Switch.isToggled = graphMode3D; + // GM3Switch.isToggled = !GM3Switch.isToggled; + // graphMode3D = GM3Switch.isToggled; } } }); @@ -5029,10 +5203,10 @@ let createWorldMenu = () => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // actionPanelOnTop = !actionPanelOnTop; - // APSwitch.isToggled = actionPanelOnTop; - APSwitch.isToggled = !APSwitch.isToggled; - actionPanelOnTop = APSwitch.isToggled; + actionPanelOnTop = !actionPanelOnTop; + APSwitch.isToggled = actionPanelOnTop; + // APSwitch.isToggled = !APSwitch.isToggled; + // actionPanelOnTop = APSwitch.isToggled; APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; } } @@ -5051,10 +5225,10 @@ let createWorldMenu = () => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // fancyPlotTitle = !fancyPlotTitle; - // PTSwitch.isToggled = fancyPlotTitle; - PTSwitch.isToggled = !PTSwitch.isToggled; - fancyPlotTitle = PTSwitch.isToggled; + fancyPlotTitle = !fancyPlotTitle; + PTSwitch.isToggled = fancyPlotTitle; + // PTSwitch.isToggled = !PTSwitch.isToggled; + // fancyPlotTitle = PTSwitch.isToggled; PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; theory.invalidatePrimaryEquation(); } @@ -5074,10 +5248,10 @@ let createWorldMenu = () => { if (e.type == TouchType.SHORTPRESS_RELEASED || e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - // actionConfirm = !actionConfirm; - // ACSwitch.isToggled = actionConfirm; - ACSwitch.isToggled = !ACSwitch.isToggled; - actionConfirm = ACSwitch.isToggled; + actionConfirm = !actionConfirm; + ACSwitch.isToggled = actionConfirm; + // ACSwitch.isToggled = !ACSwitch.isToggled; + // actionConfirm = ACSwitch.isToggled; } } }); From 2ff4fae518b0ed428c212d96218a49c736b12f04 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 4 Dec 2023 00:36:13 +0900 Subject: [PATCH 08/17] Adjusted currency bar margins --- src/theory.ts | 13 +++++++------ theory.js | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 1e4f557..514fd0d 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -4585,7 +4585,7 @@ ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/pe var controlStack = ui.createStackLayout ({ isVisible: false, - padding: new Thickness(6, 0, 6, 8), + margin: new Thickness(6, 0, 6, 6), orientation: StackOrientation.VERTICAL, children: [ @@ -5242,7 +5242,7 @@ var getCurrencyBarDelegate = () => row: 0, column: 0, text: () => Utils.getMath(`${theory.tau}${theory.latexSymbol}`), heightRequest: getImageSize(ui.screenWidth), - margin: new Thickness(0, 2, 0, 0), + // margin: new Thickness(0, 2, 0, 0), fontSize: 12, horizontalTextAlignment: TextAlignment.CENTER, verticalTextAlignment: TextAlignment.CENTER @@ -5263,7 +5263,7 @@ var getCurrencyBarDelegate = () => return Utils.getMath(`${currency.value}\\text{${currency.symbol}}`); }, heightRequest: getImageSize(ui.screenWidth), - margin: new Thickness(0, 2, 0, 0), + // margin: new Thickness(0, 2, 0, 0), fontSize: 12, horizontalTextAlignment: TextAlignment.CENTER, verticalTextAlignment: TextAlignment.CENTER @@ -5276,7 +5276,7 @@ var getCurrencyBarDelegate = () => return; let seqMenu = createColonyViewMenu(selectedColony); seqMenu.show(); - }, getLoc('viewColony'), getSmallBtnSize(ui.screenWidth), 12); + }, getLoc('viewColony'), getMediumBtnSize(ui.screenWidth), 12); examineFrame.row = 0; examineFrame.column = 1; let switchbackBtn = createLSRButton(() => @@ -5285,7 +5285,7 @@ var getCurrencyBarDelegate = () => colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↑', getSmallBtnSize(ui.screenWidth)); + }, '↑', getMediumBtnSize(ui.screenWidth)); switchbackBtn.column = 0; let switchBtn = createLSRButton(() => { @@ -5293,7 +5293,7 @@ var getCurrencyBarDelegate = () => colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↓', getSmallBtnSize(ui.screenWidth)); + }, '↓', getMediumBtnSize(ui.screenWidth)); switchBtn.column = 1; (controlStack.children[0]).children = @@ -5316,6 +5316,7 @@ var getCurrencyBarDelegate = () => ({ // columnDefinitions: ['auto', 'auto'], // horizontalOptions: LayoutOptions.CENTER, + margin: new Thickness(6, 3, 6, 0), children: [tauLabel, pennyLabel] }) return ui.createStackLayout diff --git a/theory.js b/theory.js index 2a18eec..d8ee60a 100644 --- a/theory.js +++ b/theory.js @@ -3539,7 +3539,7 @@ const settingsFrame = createFramedButton({ // ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/shiny-apple.png')); var controlStack = ui.createStackLayout({ isVisible: false, - padding: new Thickness(6, 0, 6, 8), + margin: new Thickness(6, 0, 6, 6), orientation: StackOrientation.VERTICAL, children: [ ui.createGrid({ @@ -4083,7 +4083,7 @@ var getCurrencyBarDelegate = () => { row: 0, column: 0, text: () => Utils.getMath(`${theory.tau}${theory.latexSymbol}`), heightRequest: getImageSize(ui.screenWidth), - margin: new Thickness(0, 2, 0, 0), + // margin: new Thickness(0, 2, 0, 0), fontSize: 12, horizontalTextAlignment: TextAlignment.CENTER, verticalTextAlignment: TextAlignment.CENTER @@ -4101,7 +4101,7 @@ var getCurrencyBarDelegate = () => { return Utils.getMath(`${currency.value}\\text{${currency.symbol}}`); }, heightRequest: getImageSize(ui.screenWidth), - margin: new Thickness(0, 2, 0, 0), + // margin: new Thickness(0, 2, 0, 0), fontSize: 12, horizontalTextAlignment: TextAlignment.CENTER, verticalTextAlignment: TextAlignment.CENTER @@ -4112,7 +4112,7 @@ var getCurrencyBarDelegate = () => { return; let seqMenu = createColonyViewMenu(selectedColony); seqMenu.show(); - }, getLoc('viewColony'), getSmallBtnSize(ui.screenWidth), 12); + }, getLoc('viewColony'), getMediumBtnSize(ui.screenWidth), 12); examineFrame.row = 0; examineFrame.column = 1; let switchbackBtn = createLSRButton(() => { @@ -4120,14 +4120,14 @@ var getCurrencyBarDelegate = () => { colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↑', getSmallBtnSize(ui.screenWidth)); + }, '↑', getMediumBtnSize(ui.screenWidth)); switchbackBtn.column = 0; let switchBtn = createLSRButton(() => { let len = manager.colonies[plotIdx].length; colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↓', getSmallBtnSize(ui.screenWidth)); + }, '↓', getMediumBtnSize(ui.screenWidth)); switchBtn.column = 1; controlStack.children[0].children = [ @@ -4146,6 +4146,7 @@ var getCurrencyBarDelegate = () => { let currencyGrid = ui.createGrid({ // columnDefinitions: ['auto', 'auto'], // horizontalOptions: LayoutOptions.CENTER, + margin: new Thickness(6, 3, 6, 0), children: [tauLabel, pennyLabel] }); return ui.createStackLayout({ From 1990ae06b074aa224c333693b7e5c414f716d696 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 4 Dec 2023 01:01:42 +0900 Subject: [PATCH 09/17] Switch plant now requires 1 plant unlocked --- src/theory.ts | 5 +++-- theory.js | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 514fd0d..5a1c6e4 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -4267,7 +4267,7 @@ const enum ColonyModes _SIZE } let colonyMode = ColonyModes.VERBOSE; -let fancyPlotTitle = true; +let fancyPlotTitle = false; let actionPanelOnTop = false; let actionConfirm = true; const enum QuaternaryModes @@ -4993,7 +4993,8 @@ var updateAvailability = () => else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; + switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level && + plantPerma.level > 0; controlStack.isVisible = true; // skipLabel.isVisible = !finishedTutorial; // skipFrame.isVisible = !finishedTutorial; diff --git a/theory.js b/theory.js index d8ee60a..31de43d 100644 --- a/theory.js +++ b/theory.js @@ -3298,7 +3298,7 @@ let speedIdx = 1; let graphMode2D = 1 /* LineGraphModes.INSOLATION */; let graphMode3D = true; let colonyMode = 1 /* ColonyModes.VERBOSE */; -let fancyPlotTitle = true; +let fancyPlotTitle = false; let actionPanelOnTop = false; let actionConfirm = true; let quatMode = 0 /* QuaternaryModes.PROFITS */; @@ -3871,7 +3871,8 @@ var updateAvailability = () => { } else { shelfPerma.isAvailable = true; - switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level; + switchPlant.isAvailable = !plants[x][plantUnlocks[p[x]]].level && + plantPerma.level > 0; controlStack.isVisible = true; // skipLabel.isVisible = !finishedTutorial; // skipFrame.isVisible = !finishedTutorial; From f4066d7b5a8f1257f474df07c74d2c53bdd946dd Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 4 Dec 2023 02:06:03 +0900 Subject: [PATCH 10/17] Spacing between tau and currency is now constant --- src/theory.ts | 30 +++++++----------------------- theory.js | 30 +++++++----------------------- 2 files changed, 14 insertions(+), 46 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 5a1c6e4..83bdb5b 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -212,7 +212,7 @@ Profit\\colon\\enspace {5}p\\\\({6}/{7}) {8}`, LsDetails: `A(r, t): apex (stem shoot) providing r energy/s. Has t stages left until it splits.\\\\F(l, lim): internode of length l, growing up to lim.\\\\I(t): flower stem. Grows a leaf every stage until t reaches 0, when -it turns into K.\\\\K(p): flower of size p.\\\\L(r, lim): leaf providing r +it would turn into K.\\\\K(p): flower of size p.\\\\L(r, lim): leaf providing r energy/s, growing up to lim. \\\\—\\\\Harvest returns profit as the sum of all K sizes.`, stages: @@ -3840,7 +3840,7 @@ const permaCosts = BigNumber.from(1e45) ]; -const taxRate = BigNumber.from(-.12); +const taxRate = BigNumber.from(.12); const tauRate = BigNumber.TWO; const pubCoef = BigNumber.from(2/3); // @ts-expect-error @@ -4623,7 +4623,7 @@ var taxCurrency: Currency; var init = () => { currency = theory.createCurrency('p', 'p'); - taxCurrency = theory.createCurrency(getLoc('currencyTax')); + taxCurrency = theory.createCurrency(`T_{\\text{p}}`); /* Plants No zombies. @@ -5221,23 +5221,6 @@ height: number = getBtnSize(ui.screenWidth), fontSize: number = 14): Frame => var getCurrencyBarDelegate = () => { - // let currencyBar = ui.createFrame - // ({ - // heightRequest: getImageSize(ui.screenWidth), - // cornerRadius: 1, - // // padding: new Thickness(0, 2), - // content: ui.createLatexLabel - // ({ - // text: () => Utils.getMath(`${currency.value} - // \\text{${currency.symbol}}\\enspace - // (${theory.latexSymbol} = ${theory.tau})`), - // margin: new Thickness(0, 6), - // fontSize: 11, - // horizontalTextAlignment: TextAlignment.CENTER, - // verticalTextAlignment: TextAlignment.CENTER - // }), - // borderColor: Color.BORDER - // }); let tauLabel = ui.createLatexLabel ({ row: 0, column: 0, @@ -5315,9 +5298,10 @@ var getCurrencyBarDelegate = () => ]; let currencyGrid = ui.createGrid ({ - // columnDefinitions: ['auto', 'auto'], - // horizontalOptions: LayoutOptions.CENTER, margin: new Thickness(6, 3, 6, 0), + horizontalOptions: LayoutOptions.CENTER, + columnDefinitions: ['auto', 'auto'], + columnSpacing: 48, children: [tauLabel, pennyLabel] }) return ui.createStackLayout @@ -6836,7 +6820,7 @@ var prePublish = () => // @ts-expect-error taxCurrency.value = getCurrencyFromTau(theory.tau)[0] * taxRate; // @ts-expect-error - tmpCurrency = currency.value + taxCurrency.value; + tmpCurrency = currency.value - taxCurrency.value; tmpLevels = Array.from({length: nofPlots}, (_) => []); } diff --git a/theory.js b/theory.js index 31de43d..36710d1 100644 --- a/theory.js +++ b/theory.js @@ -172,7 +172,7 @@ Profit\\colon\\enspace {5}p\\\\({6}/{7}) {8}`, LsDetails: `A(r, t): apex (stem shoot) providing r energy/s. Has t stages left until it splits.\\\\F(l, lim): internode of length l, growing up to lim.\\\\I(t): flower stem. Grows a leaf every stage until t reaches 0, when -it turns into K.\\\\K(p): flower of size p.\\\\L(r, lim): leaf providing r +it would turn into K.\\\\K(p): flower of size p.\\\\L(r, lim): leaf providing r energy/s, growing up to lim. \\\\—\\\\Harvest returns profit as the sum of all K sizes.`, stages: { @@ -2921,7 +2921,7 @@ const permaCosts = [ BigNumber.from(3600), BigNumber.from(1e45) ]; -const taxRate = BigNumber.from(-.12); +const taxRate = BigNumber.from(.12); const tauRate = BigNumber.TWO; const pubCoef = BigNumber.from(2 / 3); // @ts-expect-error @@ -3568,7 +3568,7 @@ var currency; var taxCurrency; var init = () => { currency = theory.createCurrency('p', 'p'); - taxCurrency = theory.createCurrency(getLoc('currencyTax')); + taxCurrency = theory.createCurrency(`T_{\\text{p}}`); /* Plants No zombies. */ @@ -4063,23 +4063,6 @@ let createLSRButton = (callback, text, height = getBtnSize(ui.screenWidth), font return frame; }; var getCurrencyBarDelegate = () => { - // let currencyBar = ui.createFrame - // ({ - // heightRequest: getImageSize(ui.screenWidth), - // cornerRadius: 1, - // // padding: new Thickness(0, 2), - // content: ui.createLatexLabel - // ({ - // text: () => Utils.getMath(`${currency.value} - // \\text{${currency.symbol}}\\enspace - // (${theory.latexSymbol} = ${theory.tau})`), - // margin: new Thickness(0, 6), - // fontSize: 11, - // horizontalTextAlignment: TextAlignment.CENTER, - // verticalTextAlignment: TextAlignment.CENTER - // }), - // borderColor: Color.BORDER - // }); let tauLabel = ui.createLatexLabel({ row: 0, column: 0, text: () => Utils.getMath(`${theory.tau}${theory.latexSymbol}`), @@ -4145,9 +4128,10 @@ var getCurrencyBarDelegate = () => { }) ]; let currencyGrid = ui.createGrid({ - // columnDefinitions: ['auto', 'auto'], - // horizontalOptions: LayoutOptions.CENTER, margin: new Thickness(6, 3, 6, 0), + horizontalOptions: LayoutOptions.CENTER, + columnDefinitions: ['auto', 'auto'], + columnSpacing: 48, children: [tauLabel, pennyLabel] }); return ui.createStackLayout({ @@ -5361,7 +5345,7 @@ var prePublish = () => { // @ts-expect-error taxCurrency.value = getCurrencyFromTau(theory.tau)[0] * taxRate; // @ts-expect-error - tmpCurrency = currency.value + taxCurrency.value; + tmpCurrency = currency.value - taxCurrency.value; tmpLevels = Array.from({ length: nofPlots }, (_) => []); }; // You can be in debt for this lol From 165b0bc809c38847c6712cad1a20a53e5db6a46c Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 4 Dec 2023 05:31:30 +0900 Subject: [PATCH 11/17] Implemented factory for switches; Every element is cancellable with moving touch --- src/theory.ts | 374 +++++++++++++++++++++++++------------------------- theory.js | 321 +++++++++++++++++++++---------------------- 2 files changed, 343 insertions(+), 352 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 83bdb5b..b4a7fff 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -94,7 +94,7 @@ const LOC_STRINGS = btnPage: 'p. {0}', actionConfirmDialogue: `You are about to perform a {0} on\\\\ -{3} (plot {1}:{2}).\\\\\n\n\\\\{4}`, +{3} (plot {1}-{2}).\\\\\n\n\\\\{4}`, labelSave: 'Last saved: {0}s', labelSkip: 'Skip tutorial', @@ -4337,13 +4337,14 @@ let perfs = perfNames.map(element => profilers.get(element[0])); let perfQuaternaryEntries = perfNames.map(element => new QuaternaryEntry(element[1], null)); -let createFramedButton = (params: {[x: string]: any}, margin: number, -callback: {(): void}, image: ImageSource) => +let createImageFrameBtn = (params: {[x: string]: any}, callback: {(): void}, +image: ImageSource) => { + let triggerable = true; let frame = ui.createFrame ({ cornerRadius: 1, - margin: new Thickness(margin), + margin: new Thickness(2), padding: new Thickness(1), hasShadow: true, heightRequest: getImageSize(ui.screenWidth), @@ -4354,37 +4355,117 @@ callback: {(): void}, image: ImageSource) => aspect: Aspect.ASPECT_FIT, useTint: false }), - borderColor: Color.BORDER + borderColor: Color.BORDER, + ...params }); - return ui.createStackLayout - ({ - ...params, - children: - [ - frame - ], - onTouched: (e: TouchEvent) => + frame.onTouched = (e: TouchEvent) => + { + if(e.type == TouchType.PRESSED) + { + frame.borderColor = Color.TRANSPARENT; + // frame.hasShadow = false; + } + else if(e.type.isReleased()) { - if(e.type == TouchType.PRESSED) + frame.borderColor = Color.BORDER; + // frame.hasShadow = true; + if(triggerable) { - frame.borderColor = Color.TRANSPARENT; - // frame.hasShadow = false; + Sound.playClick(); + callback(); } - else if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) + else + triggerable = true; + } + else if(e.type == TouchType.MOVED && (e.x < 0 || e.y < 0 || + e.x > frame.width || e.y > frame.height)) + { + frame.borderColor = Color.BORDER; + // frame.hasShadow = true; + triggerable = false; + } + }; + return frame; +} + +let createLabelFrameBtn = (params: {[x: string]: any}, callback: {(): void}, +text: string, fontSize: number = 14): Frame => +{ + let triggerable = true; + let frame = ui.createFrame + ({ + cornerRadius: 1, + // padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel + ({ + text, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + textColor: Color.TEXT, + fontSize + }), + borderColor: Color.BORDER, + ...params + }); + frame.onTouched = (e: TouchEvent) => + { + if(e.type == TouchType.PRESSED) + { + frame.borderColor = Color.TRANSPARENT; + (frame.content).textColor = Color.TEXT_MEDIUM; + } + else if(e.type.isReleased()) + { + frame.borderColor = Color.BORDER; + (frame.content).textColor = Color.TEXT; + if(triggerable) { Sound.playClick(); - frame.borderColor = Color.BORDER; - // frame.hasShadow = true; callback(); } - else if(e.type == TouchType.CANCELLED) + else + triggerable = true; + } + else if(e.type == TouchType.MOVED && (e.x < 0 || e.y < 0 || + e.x > frame.width || e.y > frame.height)) + { + frame.borderColor = Color.BORDER; + (frame.content).textColor = Color.TEXT; + triggerable = false; + } + }; + return frame; +} + +let createHesitantSwitch = (params: {[x: string]: any}, callback: {(): void}, +isToggled: boolean | {(): boolean}) => +{ + let triggerable = true; + let element = ui.createSwitch + ({ + horizontalOptions: LayoutOptions.CENTER, + onColor: Color.BORDER, + isToggled, + onTouched: (e: TouchEvent) => + { + if(e.type.isReleased()) { - frame.borderColor = Color.BORDER; - // frame.hasShadow = true; + if(triggerable) + { + Sound.playClick(); + callback(); + } + else + triggerable = true; } - } + else if(e.type == TouchType.MOVED && (e.x < 0 || e.y < 0 || + e.x > element.width || e.y > element.height)) + triggerable = false; + }, + ...params }); + return element; } // const actionsLabel = ui.createLatexLabel @@ -4399,15 +4480,11 @@ callback: {(): void}, image: ImageSource) => // textColor: () => Color.fromHex(eq2Colour.get(game.settings.theme)) // }); -const waterFrame = createFramedButton +const waterFrame = createImageFrameBtn ({ // isVisible: () => selectedColony?.profit > BigNumber.ZERO, row: 0, column: 0, -}, 2, () => -{ - manager.water(selectedColony); -}, -game.settings.theme == Theme.LIGHT ? +}, () => manager.water(selectedColony), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/drop.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/drop.png')); const waterLabel = ui.createLatexLabel @@ -4446,11 +4523,11 @@ const waterLabel = ui.createLatexLabel textColor: Color.TEXT_MEDIUM }); -const harvestFrame = createFramedButton +const harvestFrame = createImageFrameBtn ({ // isVisible: () => selectedColony?.profit > BigNumber.ZERO, row: 0, column: 2, -}, 2, () => +}, () => { if(actionConfirm) { @@ -4476,7 +4553,7 @@ const harvestLabel = ui.createLatexLabel textColor: Color.TEXT_MEDIUM }); -const pruneFrame = createFramedButton +const pruneFrame = createImageFrameBtn ({ isVisible: () => { @@ -4486,7 +4563,7 @@ const pruneFrame = createFramedButton return true; }, row: 0, column: 4, -}, 2, () => +}, () => { if(actionConfirm) { @@ -4551,11 +4628,11 @@ const settingsLabel = ui.createLatexLabel fontSize: 10, textColor: Color.TEXT_MEDIUM }); -const settingsFrame = createFramedButton +const settingsFrame = createImageFrameBtn ({ row: 0, column: 0, horizontalOptions: LayoutOptions.START -}, 2, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? +}, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/spoted-flower.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/spoted-flower.png')); @@ -5175,50 +5252,6 @@ var getEquationOverlay = () => return result; } -let createLSRButton = (callback: () => void, text: string, -height: number = getBtnSize(ui.screenWidth), fontSize: number = 14): Frame => -{ - let frame = ui.createFrame - ({ - row: 0, column: 1, - heightRequest: height, - cornerRadius: 1, - // padding: new Thickness(10, 2), - verticalOptions: LayoutOptions.CENTER, - content: ui.createLatexLabel - ({ - text, - horizontalTextAlignment: TextAlignment.CENTER, - verticalTextAlignment: TextAlignment.CENTER, - textColor: Color.TEXT, - fontSize - }), - borderColor: Color.BORDER - }); - frame.onTouched = (e: TouchEvent) => - { - if(e.type == TouchType.PRESSED) - { - frame.borderColor = Color.TRANSPARENT; - (frame.content).textColor = Color.TEXT_MEDIUM; - } - else if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) - { - Sound.playClick(); - frame.borderColor = Color.BORDER; - (frame.content).textColor = Color.TEXT; - callback(); - } - else if(e.type == TouchType.CANCELLED) - { - frame.borderColor = Color.BORDER; - (frame.content).textColor = Color.TEXT; - } - }; - return frame; -} - var getCurrencyBarDelegate = () => { let tauLabel = ui.createLatexLabel @@ -5253,36 +5286,46 @@ var getCurrencyBarDelegate = () => verticalTextAlignment: TextAlignment.CENTER }); - let examineFrame = createLSRButton(() => + let examineBtn = createLabelFrameBtn + ({ + row: 0, column: 1, + heightRequest: getMediumBtnSize(ui.screenWidth) + }, () => { selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; if(!selectedColony) return; let seqMenu = createColonyViewMenu(selectedColony); seqMenu.show(); - }, getLoc('viewColony'), getMediumBtnSize(ui.screenWidth), 12); - examineFrame.row = 0; - examineFrame.column = 1; - let switchbackBtn = createLSRButton(() => + }, getLoc('viewColony'), 12); + + let switchbackBtn = createLabelFrameBtn + ({ + column: 0, + heightRequest: getMediumBtnSize(ui.screenWidth) + }, () => { let len = manager.colonies[plotIdx].length; colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↑', getMediumBtnSize(ui.screenWidth)); - switchbackBtn.column = 0; - let switchBtn = createLSRButton(() => + }, '↑'); + + let switchBtn = createLabelFrameBtn + ({ + column: 1, + heightRequest: getMediumBtnSize(ui.screenWidth) + }, () => { let len = manager.colonies[plotIdx].length; colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↓', getMediumBtnSize(ui.screenWidth)); - switchBtn.column = 1; + }, '↓'); (controlStack.children[0]).children = [ - examineFrame, + examineBtn, ui.createGrid ({ row: 0, @@ -5836,30 +5879,22 @@ let createColonyViewMenu = (colony: Colony) => }; } }); - let paramSwitch = ui.createSwitch + let paramSwitch = createHesitantSwitch ({ column: 3, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: colonyViewConfig[colony.id].params, - onTouched: (e: TouchEvent) => + }, () => + { + colonyViewConfig[colony.id].params = + !colonyViewConfig[colony.id].params; + paramSwitch.isToggled = colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = !paramSwitch.isToggled; + // colonyViewConfig[colony.id].params = paramSwitch.isToggled; + reconstructionTask = { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) - { - Sound.playClick(); - colonyViewConfig[colony.id].params = - !colonyViewConfig[colony.id].params; - paramSwitch.isToggled = colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = !paramSwitch.isToggled; - // colonyViewConfig[colony.id].params = paramSwitch.isToggled; - reconstructionTask = - { - start: 0 - }; - } - } - }); + start: 0 + }; + }, colonyViewConfig[colony.id].params); + let updateReconstruction = () => { if(manager.busy) @@ -6547,25 +6582,16 @@ let createWorldMenu = () => GM3Button ] }); - let GM3Switch = ui.createSwitch + let GM3Switch = createHesitantSwitch ({ - row: 7, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: graphMode3D, - onTouched: (e: TouchEvent) => - { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) - { - Sound.playClick(); - graphMode3D = !graphMode3D; - GM3Switch.isToggled = graphMode3D; - // GM3Switch.isToggled = !GM3Switch.isToggled; - // graphMode3D = GM3Switch.isToggled; - } - } - }); + row: 7, column: 1 + }, () => + { + graphMode3D = !graphMode3D; + GM3Switch.isToggled = graphMode3D; + // GM3Switch.isToggled = !GM3Switch.isToggled; + // graphMode3D = GM3Switch.isToggled; + }, graphMode3D); let GM2Label = ui.createLatexLabel ({ text: getLoc('lineGraphModes')[graphMode2D], @@ -6618,79 +6644,51 @@ let createWorldMenu = () => row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER }); - let APSwitch = ui.createSwitch + let APSwitch = createHesitantSwitch ({ - row: 3, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: actionPanelOnTop, - onTouched: (e: TouchEvent) => - { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) - { - Sound.playClick(); - actionPanelOnTop = !actionPanelOnTop; - APSwitch.isToggled = actionPanelOnTop; - // APSwitch.isToggled = !APSwitch.isToggled; - // actionPanelOnTop = APSwitch.isToggled; - APLabel.text = getLoc('actionPanelModes')[ - Number(actionPanelOnTop)]; - } - } - }); + row: 3, column: 1 + }, () => + { + actionPanelOnTop = !actionPanelOnTop; + APSwitch.isToggled = actionPanelOnTop; + // APSwitch.isToggled = !APSwitch.isToggled; + // actionPanelOnTop = APSwitch.isToggled; + APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; + }, actionPanelOnTop); let PTLabel = ui.createLatexLabel ({ text: getLoc('plotTitleModes')[Number(fancyPlotTitle)], row: 2, column: 0, verticalTextAlignment: TextAlignment.CENTER }); - let PTSwitch = ui.createSwitch + let PTSwitch = createHesitantSwitch ({ - row: 2, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: fancyPlotTitle, - onTouched: (e: TouchEvent) => - { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) - { - Sound.playClick(); - fancyPlotTitle = !fancyPlotTitle; - PTSwitch.isToggled = fancyPlotTitle; - // PTSwitch.isToggled = !PTSwitch.isToggled; - // fancyPlotTitle = PTSwitch.isToggled; - PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; - theory.invalidatePrimaryEquation(); - } - } - }); + row: 2, column: 1 + }, () => + { + fancyPlotTitle = !fancyPlotTitle; + PTSwitch.isToggled = fancyPlotTitle; + // PTSwitch.isToggled = !PTSwitch.isToggled; + // fancyPlotTitle = PTSwitch.isToggled; + PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; + theory.invalidatePrimaryEquation(); + }, fancyPlotTitle); let ACLabel = ui.createLatexLabel ({ text: getLoc('labelActionConfirm'), row: 1, column: 0, verticalTextAlignment: TextAlignment.CENTER }); - let ACSwitch = ui.createSwitch + let ACSwitch = createHesitantSwitch ({ - row: 1, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: actionConfirm, - onTouched: (e: TouchEvent) => - { - if(e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) - { - Sound.playClick(); - actionConfirm = !actionConfirm; - ACSwitch.isToggled = actionConfirm; - // ACSwitch.isToggled = !ACSwitch.isToggled; - // actionConfirm = ACSwitch.isToggled; - } - } - }); + row: 1, column: 1 + }, () => + { + actionConfirm = !actionConfirm; + ACSwitch.isToggled = actionConfirm; + // ACSwitch.isToggled = !ACSwitch.isToggled; + // actionConfirm = ACSwitch.isToggled; + }, actionConfirm); let QBLabel = ui.createLatexLabel ({ text: getLoc('quatModes')[quatMode], diff --git a/theory.js b/theory.js index 36710d1..eaeced5 100644 --- a/theory.js +++ b/theory.js @@ -70,7 +70,7 @@ const LOC_STRINGS = { btnContents: 'Table of\nContents', btnPage: 'p. {0}', actionConfirmDialogue: `You are about to perform a {0} on\\\\ -{3} (plot {1}:{2}).\\\\\n\n\\\\{4}`, +{3} (plot {1}-{2}).\\\\\n\n\\\\{4}`, labelSave: 'Last saved: {0}s', labelSkip: 'Skip tutorial', labelWater: 'Water', @@ -3338,10 +3338,11 @@ let perfNames = [ ]; let perfs = perfNames.map(element => profilers.get(element[0])); let perfQuaternaryEntries = perfNames.map(element => new QuaternaryEntry(element[1], null)); -let createFramedButton = (params, margin, callback, image) => { +let createImageFrameBtn = (params, callback, image) => { + let triggerable = true; let frame = ui.createFrame({ cornerRadius: 1, - margin: new Thickness(margin), + margin: new Thickness(2), padding: new Thickness(1), hasShadow: true, heightRequest: getImageSize(ui.screenWidth), @@ -3351,31 +3352,95 @@ let createFramedButton = (params, margin, callback, image) => { aspect: Aspect.ASPECT_FIT, useTint: false }), - borderColor: Color.BORDER + borderColor: Color.BORDER, + ...params }); - return ui.createStackLayout({ - ...params, - children: [ - frame - ], - onTouched: (e) => { - if (e.type == TouchType.PRESSED) { - frame.borderColor = Color.TRANSPARENT; - // frame.hasShadow = false; - } - else if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { + frame.onTouched = (e) => { + if (e.type == TouchType.PRESSED) { + frame.borderColor = Color.TRANSPARENT; + // frame.hasShadow = false; + } + else if (e.type.isReleased()) { + frame.borderColor = Color.BORDER; + // frame.hasShadow = true; + if (triggerable) { Sound.playClick(); - frame.borderColor = Color.BORDER; - // frame.hasShadow = true; callback(); } - else if (e.type == TouchType.CANCELLED) { - frame.borderColor = Color.BORDER; - // frame.hasShadow = true; + else + triggerable = true; + } + else if (e.type == TouchType.MOVED && (e.x < 0 || e.y < 0 || + e.x > frame.width || e.y > frame.height)) { + frame.borderColor = Color.BORDER; + // frame.hasShadow = true; + triggerable = false; + } + }; + return frame; +}; +let createLabelFrameBtn = (params, callback, text, fontSize = 14) => { + let triggerable = true; + let frame = ui.createFrame({ + cornerRadius: 1, + // padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel({ + text, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + textColor: Color.TEXT, + fontSize + }), + borderColor: Color.BORDER, + ...params + }); + frame.onTouched = (e) => { + if (e.type == TouchType.PRESSED) { + frame.borderColor = Color.TRANSPARENT; + frame.content.textColor = Color.TEXT_MEDIUM; + } + else if (e.type.isReleased()) { + frame.borderColor = Color.BORDER; + frame.content.textColor = Color.TEXT; + if (triggerable) { + Sound.playClick(); + callback(); } + else + triggerable = true; + } + else if (e.type == TouchType.MOVED && (e.x < 0 || e.y < 0 || + e.x > frame.width || e.y > frame.height)) { + frame.borderColor = Color.BORDER; + frame.content.textColor = Color.TEXT; + triggerable = false; } + }; + return frame; +}; +let createHesitantSwitch = (params, callback, isToggled) => { + let triggerable = true; + let element = ui.createSwitch({ + horizontalOptions: LayoutOptions.CENTER, + onColor: Color.BORDER, + isToggled, + onTouched: (e) => { + if (e.type.isReleased()) { + if (triggerable) { + Sound.playClick(); + callback(); + } + else + triggerable = true; + } + else if (e.type == TouchType.MOVED && (e.x < 0 || e.y < 0 || + e.x > element.width || e.y > element.height)) + triggerable = false; + }, + ...params }); + return element; }; // const actionsLabel = ui.createLatexLabel // ({ @@ -3388,12 +3453,10 @@ let createFramedButton = (params, margin, callback, image) => { // fontSize: 10, // textColor: () => Color.fromHex(eq2Colour.get(game.settings.theme)) // }); -const waterFrame = createFramedButton({ +const waterFrame = createImageFrameBtn({ // isVisible: () => selectedColony?.profit > BigNumber.ZERO, row: 0, column: 0, -}, 2, () => { - manager.water(selectedColony); -}, game.settings.theme == Theme.LIGHT ? +}, () => manager.water(selectedColony), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/drop.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/drop.png')); const waterLabel = ui.createLatexLabel({ @@ -3423,10 +3486,10 @@ const waterLabel = ui.createLatexLabel({ fontSize: 10, textColor: Color.TEXT_MEDIUM }); -const harvestFrame = createFramedButton({ +const harvestFrame = createImageFrameBtn({ // isVisible: () => selectedColony?.profit > BigNumber.ZERO, row: 0, column: 2, -}, 2, () => { +}, () => { if (actionConfirm) { let menu = createConfirmationMenu(plotIdx, colonyIdx[plotIdx], 0 /* Actions.HARVEST */); menu.show(); @@ -3446,7 +3509,7 @@ const harvestLabel = ui.createLatexLabel({ fontSize: 10, textColor: Color.TEXT_MEDIUM }); -const pruneFrame = createFramedButton({ +const pruneFrame = createImageFrameBtn({ isVisible: () => { if (!selectedColony || !plantData[selectedColony.id].actions[1 /* Actions.PRUNE */]) @@ -3454,7 +3517,7 @@ const pruneFrame = createFramedButton({ return true; }, row: 0, column: 4, -}, 2, () => { +}, () => { if (actionConfirm) { let menu = createConfirmationMenu(plotIdx, colonyIdx[plotIdx], 1 /* Actions.PRUNE */); menu.show(); @@ -3509,10 +3572,10 @@ const settingsLabel = ui.createLatexLabel({ fontSize: 10, textColor: Color.TEXT_MEDIUM }); -const settingsFrame = createFramedButton({ +const settingsFrame = createImageFrameBtn({ row: 0, column: 0, horizontalOptions: LayoutOptions.START -}, 2, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? +}, () => createWorldMenu().show(), game.settings.theme == Theme.LIGHT ? ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/dark/spoted-flower.png') : ImageSource.fromUri('https://raw.githubusercontent.com/propfeds/lemmas-garden/perch/src/icons/light/spoted-flower.png')); // const skipLabel = ui.createLatexLabel @@ -4027,41 +4090,6 @@ var getEquationOverlay = () => { }); return result; }; -let createLSRButton = (callback, text, height = getBtnSize(ui.screenWidth), fontSize = 14) => { - let frame = ui.createFrame({ - row: 0, column: 1, - heightRequest: height, - cornerRadius: 1, - // padding: new Thickness(10, 2), - verticalOptions: LayoutOptions.CENTER, - content: ui.createLatexLabel({ - text, - horizontalTextAlignment: TextAlignment.CENTER, - verticalTextAlignment: TextAlignment.CENTER, - textColor: Color.TEXT, - fontSize - }), - borderColor: Color.BORDER - }); - frame.onTouched = (e) => { - if (e.type == TouchType.PRESSED) { - frame.borderColor = Color.TRANSPARENT; - frame.content.textColor = Color.TEXT_MEDIUM; - } - else if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { - Sound.playClick(); - frame.borderColor = Color.BORDER; - frame.content.textColor = Color.TEXT; - callback(); - } - else if (e.type == TouchType.CANCELLED) { - frame.borderColor = Color.BORDER; - frame.content.textColor = Color.TEXT; - } - }; - return frame; -}; var getCurrencyBarDelegate = () => { let tauLabel = ui.createLatexLabel({ row: 0, column: 0, @@ -4090,32 +4118,37 @@ var getCurrencyBarDelegate = () => { horizontalTextAlignment: TextAlignment.CENTER, verticalTextAlignment: TextAlignment.CENTER }); - let examineFrame = createLSRButton(() => { + let examineBtn = createLabelFrameBtn({ + row: 0, column: 1, + heightRequest: getMediumBtnSize(ui.screenWidth) + }, () => { selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; if (!selectedColony) return; let seqMenu = createColonyViewMenu(selectedColony); seqMenu.show(); - }, getLoc('viewColony'), getMediumBtnSize(ui.screenWidth), 12); - examineFrame.row = 0; - examineFrame.column = 1; - let switchbackBtn = createLSRButton(() => { + }, getLoc('viewColony'), 12); + let switchbackBtn = createLabelFrameBtn({ + column: 0, + heightRequest: getMediumBtnSize(ui.screenWidth) + }, () => { let len = manager.colonies[plotIdx].length; colonyIdx[plotIdx] = (colonyIdx[plotIdx] - 1 + len) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↑', getMediumBtnSize(ui.screenWidth)); - switchbackBtn.column = 0; - let switchBtn = createLSRButton(() => { + }, '↑'); + let switchBtn = createLabelFrameBtn({ + column: 1, + heightRequest: getMediumBtnSize(ui.screenWidth) + }, () => { let len = manager.colonies[plotIdx].length; colonyIdx[plotIdx] = (colonyIdx[plotIdx] + 1) % len; selectedColony = manager.colonies[plotIdx][colonyIdx[plotIdx]]; renderer.colony = selectedColony; - }, '↓', getMediumBtnSize(ui.screenWidth)); - switchBtn.column = 1; + }, '↓'); controlStack.children[0].children = [ - examineFrame, + examineBtn, ui.createGrid({ row: 0, column: 0, @@ -4560,27 +4593,19 @@ let createColonyViewMenu = (colony) => { }; } }); - let paramSwitch = ui.createSwitch({ + let paramSwitch = createHesitantSwitch({ column: 3, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: colonyViewConfig[colony.id].params, - onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { - Sound.playClick(); - colonyViewConfig[colony.id].params = - !colonyViewConfig[colony.id].params; - paramSwitch.isToggled = colonyViewConfig[colony.id].params; - // paramSwitch.isToggled = !paramSwitch.isToggled; - // colonyViewConfig[colony.id].params = paramSwitch.isToggled; - reconstructionTask = - { - start: 0 - }; - } - } - }); + }, () => { + colonyViewConfig[colony.id].params = + !colonyViewConfig[colony.id].params; + paramSwitch.isToggled = colonyViewConfig[colony.id].params; + // paramSwitch.isToggled = !paramSwitch.isToggled; + // colonyViewConfig[colony.id].params = paramSwitch.isToggled; + reconstructionTask = + { + start: 0 + }; + }, colonyViewConfig[colony.id].params); let updateReconstruction = () => { if (manager.busy) return reconstructionTask.result; @@ -5121,22 +5146,14 @@ let createWorldMenu = () => { GM3Button ] }); - let GM3Switch = ui.createSwitch({ - row: 7, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: graphMode3D, - onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { - Sound.playClick(); - graphMode3D = !graphMode3D; - GM3Switch.isToggled = graphMode3D; - // GM3Switch.isToggled = !GM3Switch.isToggled; - // graphMode3D = GM3Switch.isToggled; - } - } - }); + let GM3Switch = createHesitantSwitch({ + row: 7, column: 1 + }, () => { + graphMode3D = !graphMode3D; + GM3Switch.isToggled = graphMode3D; + // GM3Switch.isToggled = !GM3Switch.isToggled; + // graphMode3D = GM3Switch.isToggled; + }, graphMode3D); let GM2Label = ui.createLatexLabel({ text: getLoc('lineGraphModes')[graphMode2D], row: 6, column: 0, @@ -5180,67 +5197,43 @@ let createWorldMenu = () => { row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER }); - let APSwitch = ui.createSwitch({ - row: 3, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: actionPanelOnTop, - onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { - Sound.playClick(); - actionPanelOnTop = !actionPanelOnTop; - APSwitch.isToggled = actionPanelOnTop; - // APSwitch.isToggled = !APSwitch.isToggled; - // actionPanelOnTop = APSwitch.isToggled; - APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; - } - } - }); + let APSwitch = createHesitantSwitch({ + row: 3, column: 1 + }, () => { + actionPanelOnTop = !actionPanelOnTop; + APSwitch.isToggled = actionPanelOnTop; + // APSwitch.isToggled = !APSwitch.isToggled; + // actionPanelOnTop = APSwitch.isToggled; + APLabel.text = getLoc('actionPanelModes')[Number(actionPanelOnTop)]; + }, actionPanelOnTop); let PTLabel = ui.createLatexLabel({ text: getLoc('plotTitleModes')[Number(fancyPlotTitle)], row: 2, column: 0, verticalTextAlignment: TextAlignment.CENTER }); - let PTSwitch = ui.createSwitch({ - row: 2, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: fancyPlotTitle, - onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { - Sound.playClick(); - fancyPlotTitle = !fancyPlotTitle; - PTSwitch.isToggled = fancyPlotTitle; - // PTSwitch.isToggled = !PTSwitch.isToggled; - // fancyPlotTitle = PTSwitch.isToggled; - PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; - theory.invalidatePrimaryEquation(); - } - } - }); + let PTSwitch = createHesitantSwitch({ + row: 2, column: 1 + }, () => { + fancyPlotTitle = !fancyPlotTitle; + PTSwitch.isToggled = fancyPlotTitle; + // PTSwitch.isToggled = !PTSwitch.isToggled; + // fancyPlotTitle = PTSwitch.isToggled; + PTLabel.text = getLoc('plotTitleModes')[Number(fancyPlotTitle)]; + theory.invalidatePrimaryEquation(); + }, fancyPlotTitle); let ACLabel = ui.createLatexLabel({ text: getLoc('labelActionConfirm'), row: 1, column: 0, verticalTextAlignment: TextAlignment.CENTER }); - let ACSwitch = ui.createSwitch({ - row: 1, column: 1, - horizontalOptions: LayoutOptions.CENTER, - onColor: Color.BORDER, - isToggled: actionConfirm, - onTouched: (e) => { - if (e.type == TouchType.SHORTPRESS_RELEASED || - e.type == TouchType.LONGPRESS_RELEASED) { - Sound.playClick(); - actionConfirm = !actionConfirm; - ACSwitch.isToggled = actionConfirm; - // ACSwitch.isToggled = !ACSwitch.isToggled; - // actionConfirm = ACSwitch.isToggled; - } - } - }); + let ACSwitch = createHesitantSwitch({ + row: 1, column: 1 + }, () => { + actionConfirm = !actionConfirm; + ACSwitch.isToggled = actionConfirm; + // ACSwitch.isToggled = !ACSwitch.isToggled; + // actionConfirm = ACSwitch.isToggled; + }, actionConfirm); let QBLabel = ui.createLatexLabel({ text: getLoc('quatModes')[quatMode], row: 5, column: 0, From d3fe26a955e4e7039820ff646ffa63b3a8b3357a Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 6 Dec 2023 02:02:59 +0900 Subject: [PATCH 12/17] Initial implementation of param count check --- TODO.md | 9 +++++- src/theory.ts | 89 +++++++++++++++++++++++++++++++-------------------- theory.js | 80 +++++++++++++++++++++++++++------------------ 3 files changed, 110 insertions(+), 68 deletions(-) diff --git a/TODO.md b/TODO.md index 8775816..e609d5f 100644 --- a/TODO.md +++ b/TODO.md @@ -72,6 +72,13 @@ do nothing. Do you feel like it could be more interesting? - [ ] Ask Uni of Calgary about how to make Ls easier to understand - Provide context: making a game about the logical aspects of Ls +- [ ] Follow canonical parametric L-system logic + - A production matches a module in a parametric word if the following conditions are met: [...] The number of actual parameters in the module is equal to the number of formal parameters in the production predecessor. + +- [x] Change how the Action class works + - Remove `killColony` + - Kill colony if `system` doesn't exist + ## v0.3: Invasion - [ ] Universal income upgrades @@ -115,7 +122,7 @@ do nothing. Do you feel like it could be more interesting? - [x] Button that skips tutorial for iOS players - [ ] Dedicated save file for playtesting - [ ] Replace 'view L-system' button with almanac access -- [ ] Rework singular upgrade logic +- [x] Rework singular upgrade logic - Turn switch plant into regular upgrade - [ ] Change /sec indicators to /hr (in-game) and display 5x the value diff --git a/src/theory.ts b/src/theory.ts index b4a7fff..71f97a3 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -582,8 +582,11 @@ The symbol will only evolve according to this rule if its ancestor bears the ` + `Beyond geometric applications, parametric L-systems allow individual ` + `symbols to hold additional information such as its state of growth, elapsed ` + `time, etc. They can be even peeked at in context-sensitive rules! -When there are multiple rules specified for a symbol, the first one with a ` + -`matching condition will be chosen. +When there are multiple rules specified for a symbol, the chosen one will be ` + +`selected according to two criteria: +- The condition evaluates to true (anything but zero). +- The number of parameters on the symbol must match the rule. This also ` + +`includes left and right contexts. The syntax for a parametric rule goes as follows: {symbol}({param_0},...) : {condition*} = {derivation_0} : {probability**} ;... @@ -1376,6 +1379,7 @@ interface LSystemRule { left?: string; right?: string; + count: [number, number, number]; params?: {[key: string]: [string, number]}; paramMap?: (v: string, l: BigNumber[], m: BigNumber[], r: BigNumber[]) => BigNumber; @@ -1489,30 +1493,38 @@ class LSystem if(!contextMatch[6]) continue; - let tmpRule: LSystemRule = {}; + let tmpRule: LSystemRule = + { + count: [0, 0, 0] + }; let ruleParams = {}; + // Middle if(contextMatch[8]) { let params = contextMatch[8].split(','); + tmpRule.count[1] = params.length; for(let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['m', j]; } + // Left tmpRule.left = contextMatch[2]; if(tmpRule.left && contextMatch[4]) { let params = contextMatch[4].split(','); + tmpRule.count[0] = params.length; for(let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['l', j]; } + // Right tmpRule.right = contextMatch[10]; if(tmpRule.right && contextMatch[12]) { let params = contextMatch[12].split(','); + tmpRule.count[2] = params.length; for(let j = 0; j < params.length; ++j) - { ruleParams[params[j]] = ['r', j]; - } } + tmpRule.params = ruleParams; /* // O(1) lookup with O(n) memory, I think ruleParams = { @@ -1877,11 +1889,23 @@ class LSystem let ruleChoice = -1; for(let j = 0; j < tmpRules.length; ++j) { - // Left and right first - if(tmpRules[j].left && tmpRules[j].left != - sequence[ancestors[i]]) + // Param count check + let count = seqParams[i] ? seqParams[i].length : 0; + if(tmpRules[j].count[1] != count) continue; + // Left check + let left = ancestors[i]; + + if(tmpRules[j].left) + { + count = seqParams[left] ? seqParams[left].length : 0; + if(tmpRules[j].left != sequence[left] || + tmpRules[j].count[0] != count) + continue; + } + + // Right check let right = -1; if(tmpRules[j].right) { @@ -1889,8 +1913,10 @@ class LSystem { for(let k = 0; k < children[i].length; ++k) { - if(tmpRules[j].right == sequence[children[i][ - k]]) + count = seqParams[children[i][k]] ? + seqParams[children[i][k]].length : 0; + if(tmpRules[j].right == sequence[children[i][k]] + && tmpRules[j].count[2] == count) { right = children[i][k]; break; @@ -1902,7 +1928,7 @@ class LSystem } let tmpParamMap = (v: string) => this.varGetter(v) ?? - tmpRules[j].paramMap(v, seqParams[ancestors[i]], + tmpRules[j].paramMap(v, seqParams[left], seqParams[i], seqParams[right]); // Next up is the condition if(tmpRules[j].condition.evaluate(tmpParamMap)?.isZero) @@ -3363,7 +3389,7 @@ class ColonyManager this.actionGangsta = null; return; } - if(plantData[c.id].actions[id].killColony) + if(!plantData[c.id].actions[id].system) { if(id == 0) this.reap(c); @@ -3779,7 +3805,6 @@ interface Action { symbols?: Set; system?: LSystem; - killColony: boolean } interface Plant @@ -3903,8 +3928,7 @@ const plantData: {[key: string]: Plant} = [ { // Always a harvest symbols: new Set('K'), - // system: new LSystem('', ['K=']), - killColony: true + // No system means kill } // No prune ], @@ -3977,13 +4001,16 @@ const plantData: {[key: string]: Plant} = [ { // Always a harvest symbols: new Set('KL'), - // system: new LSystem('', ['L=']), - killColony: true + // No system means kill }, { // Always a prune - system: new LSystem('', ['F>K=', 'K K(s, t) =', + 'K(s, t) < /(a) =', + 'K(s, t) =', + 'A(r, t) =' + ], 30, 0, '', '') } ], decimals: @@ -4054,9 +4081,7 @@ const plantData: {[key: string]: Plant} = actions: [ { - symbols: new Set('K'), - system: new LSystem('', ['K=']), - killColony: true + symbols: new Set('K') } ], decimals: @@ -4099,13 +4124,10 @@ const plantData: {[key: string]: Plant} = actions: [ { // Always a harvest - symbols: new Set('A'), - system: new LSystem('', ['A=']), - killColony: true + symbols: new Set('A') }, { // Always a prune - system: new LSystem('', ['F=']), - killColony: false + system: new LSystem('', ['F(l)=']) } ], decimals: @@ -4178,13 +4200,10 @@ const plantData: {[key: string]: Plant} = waterCD: 9 * 60, actions: [ { - symbols: new Set('L'), - // system: new LSystem('', ['L=']), - killColony: true + symbols: new Set('L') }, { - system: new LSystem('', ['K=', 'A=']), - killColony: false + system: new LSystem('', ['K(t)=', 'A(r, t)=']) } ], decimals: { @@ -4623,7 +4642,7 @@ const settingsLabel = ui.createLatexLabel let dt = (time - lastSave) / speeds[speedIdx]; if(dt < 30) return Localization.get('SettingsPopupTitle'); - return Localization.format(getLoc('labelSave'), dt.toFixed(1)); + return Localization.format(getLoc('labelSave'), Math.floor(dt)); }, fontSize: 10, textColor: Color.TEXT_MEDIUM @@ -5344,7 +5363,7 @@ var getCurrencyBarDelegate = () => margin: new Thickness(6, 3, 6, 0), horizontalOptions: LayoutOptions.CENTER, columnDefinitions: ['auto', 'auto'], - columnSpacing: 48, + columnSpacing: getBtnSize(ui.screenWidth), children: [tauLabel, pennyLabel] }) return ui.createStackLayout diff --git a/theory.js b/theory.js index eaeced5..7aabbc0 100644 --- a/theory.js +++ b/theory.js @@ -503,8 +503,11 @@ The symbol will only evolve according to this rule if its ancestor bears the ` + contents: `Beyond geometric applications, parametric L-systems allow individual ` + `symbols to hold additional information such as its state of growth, elapsed ` + `time, etc. They can be even peeked at in context-sensitive rules! -When there are multiple rules specified for a symbol, the first one with a ` + - `matching condition will be chosen. +When there are multiple rules specified for a symbol, the chosen one will be ` + + `selected according to two criteria: +- The condition evaluates to true (anything but zero). +- The number of parameters on the symbol must match the rule. This also ` + + `includes left and right contexts. The syntax for a parametric rule goes as follows: {symbol}({param_0},...) : {condition*} = {derivation_0} : {probability**} ;... @@ -1161,25 +1164,32 @@ class LSystem { // left, middle, and right respectively if (!contextMatch[6]) continue; - let tmpRule = {}; + let tmpRule = { + count: [0, 0, 0] + }; let ruleParams = {}; + // Middle if (contextMatch[8]) { let params = contextMatch[8].split(','); + tmpRule.count[1] = params.length; for (let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['m', j]; } + // Left tmpRule.left = contextMatch[2]; if (tmpRule.left && contextMatch[4]) { let params = contextMatch[4].split(','); + tmpRule.count[0] = params.length; for (let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['l', j]; } + // Right tmpRule.right = contextMatch[10]; if (tmpRule.right && contextMatch[12]) { let params = contextMatch[12].split(','); - for (let j = 0; j < params.length; ++j) { + tmpRule.count[2] = params.length; + for (let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['r', j]; - } } tmpRule.params = ruleParams; /* // O(1) lookup with O(n) memory, I think @@ -1484,15 +1494,27 @@ class LSystem { let tmpRules = this.rules.get(sequence[i]); let ruleChoice = -1; for (let j = 0; j < tmpRules.length; ++j) { - // Left and right first - if (tmpRules[j].left && tmpRules[j].left != - sequence[ancestors[i]]) + // Param count check + let count = seqParams[i] ? seqParams[i].length : 0; + if (tmpRules[j].count[1] != count) continue; + // Left check + let left = ancestors[i]; + if (tmpRules[j].left) { + count = seqParams[left] ? seqParams[left].length : 0; + if (tmpRules[j].left != sequence[left] || + tmpRules[j].count[0] != count) + continue; + } + // Right check let right = -1; if (tmpRules[j].right) { if (children[i]) { for (let k = 0; k < children[i].length; ++k) { - if (tmpRules[j].right == sequence[children[i][k]]) { + count = seqParams[children[i][k]] ? + seqParams[children[i][k]].length : 0; + if (tmpRules[j].right == sequence[children[i][k]] + && tmpRules[j].count[2] == count) { right = children[i][k]; break; } @@ -1502,7 +1524,7 @@ class LSystem { continue; } let tmpParamMap = (v) => this.varGetter(v) ?? - tmpRules[j].paramMap(v, seqParams[ancestors[i]], seqParams[i], seqParams[right]); + tmpRules[j].paramMap(v, seqParams[left], seqParams[i], seqParams[right]); // Next up is the condition if (tmpRules[j].condition.evaluate(tmpParamMap)?.isZero) continue; @@ -2573,7 +2595,7 @@ class ColonyManager { this.actionGangsta = null; return; } - if (plantData[c.id].actions[id].killColony) { + if (!plantData[c.id].actions[id].system) { if (id == 0) this.reap(c); this.killColony(...this.actionGangsta); @@ -2977,8 +2999,7 @@ const plantData = { actions: [ { symbols: new Set('K'), - // system: new LSystem('', ['K=']), - killColony: true + // No system means kill } // No prune ], @@ -3044,12 +3065,15 @@ const plantData = { actions: [ { symbols: new Set('KL'), - // system: new LSystem('', ['L=']), - killColony: true + // No system means kill }, { - system: new LSystem('', ['F>K=', 'K K(s, t) =', + 'K(s, t) < /(a) =', + 'K(s, t) =', + 'A(r, t) =' + ], 30, 0, '', '') } ], decimals: { @@ -3113,9 +3137,7 @@ const plantData = { }, actions: [ { - symbols: new Set('K'), - system: new LSystem('', ['K=']), - killColony: true + symbols: new Set('K') } ], decimals: { @@ -3154,13 +3176,10 @@ const plantData = { waterCD: 1 * dayLength, actions: [ { - symbols: new Set('A'), - system: new LSystem('', ['A=']), - killColony: true + symbols: new Set('A') }, { - system: new LSystem('', ['F=']), - killColony: false + system: new LSystem('', ['F(l)=']) } ], decimals: { @@ -3229,13 +3248,10 @@ const plantData = { waterCD: 9 * 60, actions: [ { - symbols: new Set('L'), - // system: new LSystem('', ['L=']), - killColony: true + symbols: new Set('L') }, { - system: new LSystem('', ['K=', 'A=']), - killColony: false + system: new LSystem('', ['K(t)=', 'A(r, t)=']) } ], decimals: { @@ -3567,7 +3583,7 @@ const settingsLabel = ui.createLatexLabel({ let dt = (time - lastSave) / speeds[speedIdx]; if (dt < 30) return Localization.get('SettingsPopupTitle'); - return Localization.format(getLoc('labelSave'), dt.toFixed(1)); + return Localization.format(getLoc('labelSave'), Math.floor(dt)); }, fontSize: 10, textColor: Color.TEXT_MEDIUM @@ -4164,7 +4180,7 @@ var getCurrencyBarDelegate = () => { margin: new Thickness(6, 3, 6, 0), horizontalOptions: LayoutOptions.CENTER, columnDefinitions: ['auto', 'auto'], - columnSpacing: 48, + columnSpacing: getBtnSize(ui.screenWidth), children: [tauLabel, pennyLabel] }); return ui.createStackLayout({ From 632ab4b4eb4076ba73a43d899badf6c70f5c905e Mon Sep 17 00:00:00 2001 From: propfeds <46107294+propfeds@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:40:07 +0900 Subject: [PATCH 13/17] Created save.txt --- save.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 save.txt diff --git a/save.txt b/save.txt new file mode 100644 index 0000000..db48846 --- /dev/null +++ b/save.txt @@ -0,0 +1 @@ +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 From 216f10ab013723b4ee7a39f972199b96abf4955b Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 6 Dec 2023 15:29:39 +0900 Subject: [PATCH 14/17] Rewrote tutorial dialogue --- src/theory.ts | 24 +++++++++++++++--------- theory.js | 24 +++++++++++++++--------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/theory.ts b/src/theory.ts index 71f97a3..a939551 100644 --- a/src/theory.ts +++ b/src/theory.ts @@ -47,10 +47,10 @@ var getDescription = (language: string): string => const descs = { en: -`Last night, Lemma didn't sweep away the rubbles on her old garden. -You did. You are her first student in a long while. +`Last night, Lemma told you to sweep the rubbles and till her old plot. +You are her first student in a long while. -Welcome to Lemma's Garden, an idle botanical theory built on the grammar of ` + +Welcome to Lemma's Garden, an idle botanical theory built on the workings of ` + `Lindenmayer systems.`, }; @@ -646,20 +646,26 @@ $: aligns the up vector closest to vertical. { title: `Lemma's Garden`, contents: -`You're not one of my students, are you? -Surprised anybody would visit this late, -let alone urge me to let them plant on my ground. +`Not one of my students, are you? +Surprised to see somebody visit this late, +let alone *urge* me to let her plant on my ground. -Well then, welcome to... class.` +(Hum. This is not fine.) +Hum. +Well, then, welcome to... class. +Go till that plot, we'll start in the morning. + +Tip: Tap on 'Upgrades' to access permanent upgrades.` }, { title: `Welcome to...`, contents: `Hum. Can't even bear to look at this soil... -Go till it, we'll start in the morning. +You have lots of training to do, still. -And well, if you ever get lost, go peek at my bookshelf.` +Take one of my seeds, for now. +And if you ever get lost, *go* peek at my bookshelf.` } ], basil: diff --git a/theory.js b/theory.js index 7aabbc0..ac1cdbc 100644 --- a/theory.js +++ b/theory.js @@ -31,10 +31,10 @@ var getName = (language) => { }; var getDescription = (language) => { const descs = { - en: `Last night, Lemma didn't sweep away the rubbles on her old garden. -You did. You are her first student in a long while. + en: `Last night, Lemma told you to sweep the rubbles and till her old plot. +You are her first student in a long while. -Welcome to Lemma's Garden, an idle botanical theory built on the grammar of ` + +Welcome to Lemma's Garden, an idle botanical theory built on the workings of ` + `Lindenmayer systems.`, }; return descs[language] ?? descs.en; @@ -559,19 +559,25 @@ $: aligns the up vector closest to vertical. intro: [ { title: `Lemma's Garden`, - contents: `You're not one of my students, are you? -Surprised anybody would visit this late, -let alone urge me to let them plant on my ground. + contents: `Not one of my students, are you? +Surprised to see somebody visit this late, +let alone *urge* me to let her plant on my ground. -Well then, welcome to... class.` +(Hum. This is not fine.) +Hum. +Well, then, welcome to... class. +Go till that plot, we'll start in the morning. + +Tip: Tap on 'Upgrades' to access permanent upgrades.` }, { title: `Welcome to...`, contents: `Hum. Can't even bear to look at this soil... -Go till it, we'll start in the morning. +You have lots of training to do, still. -And well, if you ever get lost, go peek at my bookshelf.` +Take one of my seeds, for now. +And if you ever get lost, *go* peek at my bookshelf.` } ], basil: { From f0a89d34e914da1fd54a5ce83a14cb39da4f3a2a Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 6 Dec 2023 15:33:05 +0900 Subject: [PATCH 15/17] Updated save file --- save.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/save.txt b/save.txt index db48846..3662643 100644 --- a/save.txt +++ b/save.txt @@ -1 +1 @@ -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 \ No newline at end of file From 200751cb204bb87048c776eb689f64f3a24c6fc7 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 6 Dec 2023 15:47:41 +0900 Subject: [PATCH 16/17] Fixed bluestacks clipping save --- save.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/save.txt b/save.txt index 3662643..6e5aa8a 100644 --- a/save.txt +++ b/save.txt @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file From d537c82181865fc8890de2b575dfa1f3925d4dea Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 6 Dec 2023 15:54:27 +0900 Subject: [PATCH 17/17] Updated save (#3) --- save.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/save.txt b/save.txt index 6e5aa8a..94249b6 100644 --- a/save.txt +++ b/save.txt @@ -1 +1 @@ -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 \ No newline at end of file +6zPjYuooCZPkYWqxWQsDMe5IiJVbk35aLuskaHF2j8L9m32sP3Auy83Frrp12J/+nIZxi3hBwwXYbA/tTX3batSwKu7ZBTpqsUIgTq0hvpQXmIaelJFQH1tB1Inp3JZWrG55Fi1WrMx1z/2HwcLUvNADbPOtkQ23WxPC7f3S4mer3A4aPU2xOfkZZ6n8n4vLk5G4QNfiAp93LHpVxtyhkNk125XQrhZjtu2tWTtjk71r5Y1Vg9pnQqpK7c3puvlYglgGze6f1mijuudMZm0RZXhMOHEDFt9LbaF6vASxx0KA6e4+xYgoMI0wllNc+Zz05S7OGXnZWKWSWzzq6ywI/0lLgDzkoj/updBUOkqb+6zB1uSLQGSCbwHTvlWTT/OELwPUPQEqCdIKpY/i5aCPpiPe3h1sP158cs2TYxGK1HVR6MREwd2BP59vH3x1EYWf7ljudoxfMH3XSKsq3bxxNgAAmAgV/JISx/+ezMVVuz2EzscvEBbzKX5AZkrnx+YUpxd3I+JvNIUGoB6SDgZcEqaKZaVbJTJ99yr30lRNTi92OinR5Dn8vMMrjMzGv1N9/1MVQwDi5BD5Cc8Dd1Dje7hNUIWWVo7VGFGxk01JBbNPgg9+mPta5g/WZdBUpKNYkVvLkQuEILP+toF8hx+fxxhUr7+72e5K96OHWrlOgUhLRtaa7mC7zLw1JEVPmQlLOMb7QloCDeCjjhU9v2EBzAtJqDLmhYTMtM22VNtEN93sDhUFMaewJbMe+UmHKWW7qdksBS0MH2bFaAr5d5fWnRzdIfq8ox/giwpLuRmBtmViqW4rM7Ow6SxYsW6f+E4cUKFmznw+d8yO9KYvjxV6vxgGWhJM954Btb/kNR14U4rDQnJwY8Doeqr3W6HCSSjgr/IVCCtCFGk1bzekjmHX2Znd5h75hdneZMKSlyJ4dksjW9RQK1s2H2EzsUt+V08ZQG89ZfPCUNaxRrUDR3o0LZLMAIS5CzrNqFiRyMkUe/1I3cskKbO5mIrtqnuAAZIg75HdUxxWUFBWpLo1shRqT92g7rsllgakpn474amlPYqhGw88Y6q8ZnQ+tQ4TJw1d9QSzE8Hcgc3+jBz3DyiiT59b/lmdHOkBZ1Jgk7n47u2nLCwia+veOpoGrOcCfyR1k8OyGQTo20Jra/NQQJ3wn+eX//auIihb0/8Utg4TjsQQv6MooPUdaqQLvi4y4JCQWprqEHoJt15HmdYicAQTojMlqGzjsvGoHtWkKyY7xNaMcDT6FOM/lLQ5R/dxCwu0wsA1q3HYY6TKo5JBZMkVVbXC/L3SOJheoOJSBwwuWLB6u7kneXZYUeFS9aKeFmpz9OuZLgjbVLNrWWEbxtGuuH5Yg4S6j+Ips8on3n0wy4zbetAv6iMuL65IlBqeyg7BSnH1FnT2ANbsNPdO/B1aYSyze5NUhrIN7wI+sntcR3FxL1Wj2EIzDf854ZYxbXG06il35k7ZCY0AS4YP6v6JUiF3OmwUnjg34YVD+RDP1pJkPTNM8XK7WPv4KlvK/XeuZBt5HDrOE/CW1Yk2HZOs4nqRMwpd3j1gXRDjBUROMEXhFDAKWSHludU//psblbIeoU1e6GYXwXvDfBoGX0lGWS1+XiG12KbbcQMCe/vNdOFKD4iL+WbxvwYoBlWZnWpl0oB3R8CoKWAjaisW1J+DIuBhzc/GPCZ3xIhMMPxQ9xY1azu9j6uByotHN6dEq/gzqhRhzhD8BeGGoO4NjokfoMkhE2d7DURMSyQdSPPH45PvVMvgn98ECaADrmhfu1kMzPmFFkR+9ptn/JBnY/nINWV4QizLYPVBjaTOwHj8FXKv/yg5UcUml2DRAss+aga379qxUegvDhvKXWQHzacc4Iwpt+bkpaN4SfjnoRkGjDYoWmX0BxhMspnCW7d24HRY30ouBQhoVw5+oNMirCRv1KgXs0IPp64Ds/HnF6oIeqbLtCntOocf/yUurlhFJ96b3vatGHzWnBdjJz34lH6iUDg6dun+lVOXAFJ7PTlWfp6UsWj8yv7qu45r7TuvVbVtOuxc4nTYVO4MWMgtcU8JAFfubjRDsVtXzWPydlmu8ChzfvgnpKXaJRtkFchWqrK0rEV5x+Ly18YFL2KlvJqdXaGUXiQBApg7YL2feHNJBYS/s9ZK6gIKgN2UPnf60AXNfcA9/YgIF48FMH+/vG9QhCJ4K8AOd1z1+9SZAAxL7XoJk1kRtlPLM81EahBUIFvo/3QlIDexzuCWNUZDqkoYWy6F520LQoXIT/Hqlrf6s28Hk4noZxuYNvFLodXYR5P/KnamP7P8blx2E6yv4ERgGz2518KzhcoU8Z/JZsWneoXvr68/dgU680eG8tqjDdx8JW02qnZWKf96pZKvS2KEj/giAxVRWidNC2dxiZPEclWcBePHfoBUr92WbEnuri6bnnTBn++lHCQrIjT0hbHb5aggGhnnBa3qctT66Lpg2yciCs4tIwzK0hid1tRGL9Q3Iibb046/WLie1pl3Rodvidx3BEbN6VpCUFJ0ocEQUgDjppUQKHAmMQVepEgED9KQtJKpAXR95/s+yReFlD0ir5nCl0kOFVomThvICSbj2Rk0o/FRdqvsPqS04l8YSqdNtxGB95nY7Yz/jSnT7sraJxdAu9mozLxVi+g3s7X5WtwyXeNXjZkYqOlQpa8J29U111FH4KdV9vkWMGgHI2f5JvFW21dbGfuc2ueX6fSiJhsdtdeCJz9bmeFkyqgL3G2F4MCsKeiTddI9lzqIPWHFexiBDeD4ntG8ycFJOrl090S2FVzKxYDeT+4imDiV1ghbxkzglRBC9nzO08HuB7If+vmTjjYMQq7hvpdUEDcPQFnYXXA7SaCiQH6EdrrHneBbaRoM3EH4LEiJEVas0nMLPqoGO70DoDM52s0Kpaj6oAS76+eAqj9/106F9RtMPVo+JBeCRxDJubZmqMCNyNvC92P/q0TCl0n3VGY+TaZssvppYAeq5KSus0rZumk7uS5tKJUOBTtp+Q8bIIPB1J9bK12yqZ4Av+d/udb9MYYVW67LeYSfa3kKm0mJoQz2WgDM0S8JnlZdgv6eJPHvPfmcPILKy3vAFrqoEVqaENzbTLzFV8FCR5XNdOCpQgZZV9Oyt3xIU/nnYdQ1EBb7dLvlFmrwyJfXdWdscjadEa5RGGRDVwG6L4Q8EC0fMlqsQ8x27/Apg3xXF+YhkPk38wM4PFuk13I611Mu+eClO0UN4yhFBbhaUhJd9E0XEygOGaG+oFq7u7VvnfiX1Astcsyc5/LcQx+kl0OlYHH9kJEXNNkkzyEm0v6E9s4dKoCqbr94jyXmSsyJH27qc/wRbDS8m3EXSMNiWzWwZUDN0JDEtGhh4KN+hDfBfB4kazuRrHuXGo3MbHgmlTIUNZ32blVDGqFpaDAYdXYRlmlZk7Txn2SG79Z3cBzNSvgO6D+BhXzR+h+CWyummUqMxzXPEOiLybSiyBr1KhG8u+MSca3+VbzCw67+0luQA4btOa+OH0P01uKT+d6FpdhYRj0zTejNuSV6Kk9qr0eUrMWuwkAcTMpM29yms1NzCkowiz9WFYcL89/+uT97nkyuPrAVKwbhMPqlQaMm7eah090HROg7mDdMdCgfUvKqvuxOG9zH3Rhb0HpDDB9WZUCTfeX+lXppwgKZmTdoIrAnPvMYMWWRqig3QpBUMxipIT2tP/i8S0X1/yQc3YzuAeNISHIOcNAonWGFMGc71TPRrkEh8c0JienemgF7MadINPagnA6bvThBooPPj8jOdQgbnjYH/ym1MnWzGqeQvS9blX2cOoB1G59qa+TG00zSIjdJ/GHTUGKicHpoBSe1O0GufJfwphbJ+9q2vbrivsqlk2RL2cNWhygQNS9SsCzl5jsu3PAx11AxyY2cC1TYcaos1MxEJDLBxxyqlFG2kvt8xhNZBL7995uM+ELNduJb816HUlBGfwJd8wTjcyISOxFYsAYfj+N5lodptO/BzKek1Zeafy6/v5kCTxCDn2x/3NSsM7LnAL5nBJdGAQJ7SH6YQSZJI4HhEo/dRA1k5I3viPzMtoXZBnWrmh6s/UxZ6TLSksY+0B3MDFiofix3ExEJIeYuCHZEmzX2hQAnaWaZcZnCbs4SAVqmYmwnkqsue/tttwDhjOOsEQeh69fV2Gw+RoOmKQHIjy5eT25WP1dMfitWyjtlLo+YXh7PRDoIUku2vtTltjNCZiMgVZ2D9ec897Ai6OtKHfAk3zhI8c8tCJpeUCaIy1GtIwRKu+FSH/mMJ2A9a6SHUiJkyAwOiEyZhfz3tyKECsyFlMeBEu4XgJSMsNaE4gq8YdTeGQ9kGE+QGctCNrkNyhN4YMM3dd1einrFa4xMkM/kTvO8BBkhAMD4QBRDwEejNq1TWIZMNgRn+eYFDKAPchIfdcsDMrj0DzcKnIjkCpY10fC7RoG9vwHXlg5aqMC8aFtEVjfsTd/kPxZv1OtQTlER96Vj6qiU0OykgDwY6lawHM5zagge0ZnqOnOuCaKdQlUeh39UKRM7y5do+S4ZCwjvprbMn3NIFxCrpkE2R5L2M1ocND+bnJDOilcPbYppyH3Rc95JNTyOu+67AopLhTEXdL8YelekbC2M+eaIqGK9DuXRSPmKJnCxKnFiVmtTmPeQGAShkQYDCvllYyyUFJ2rZON0ofA4V5XQPRGtl5nCDs1jUSdHFSdY5nyOV6tS1ZC1tcbC0uQMN5AZ9zTrxZkwsxjnSY0v1BUjWlE7ChS7l9XEiisAqxNZkh9Rl6ZwfeyMapLLhUDQzRsnHmqxqk+UqblpIzQ7iZVMt7rw0UHd2qh6z4JTitU4EdDeE+W8/rnkIa4rzd+/UVaookPhfCo7xfQLeIkPhbHyxZsA4zx5OWSL+fOwiHykjR07vrjZZ5f4HA/SCJZrHPpzFIstZ/rmcHNAX0TKHAQ098gIPwKCwkoOOur8ot1+MflB3P02c9qiANWJPJz+KB8NPu7cXTbuuVm3yJ+wcji+ZYaX/L2r6E3Bqi1Wps+G0AknXW6qkgt574qphG74MJOiJBBh5YgGjubHW5hwKGqTSg34oQwOLdBJnlFyi5Sxcj0unbw1mu6/MUcDgab2I76LrdC1/SMB9u48hfTLwYpMpCkcidKdZTh/B6JNAOdoENKrCLMnbJ3+Sssow7dUhKMJYqLfwF7K3cJCpvnmG9JfLT6p+QQWTwr1qJ/kovoLn+b7gQuW5AUn5psOJIedEd8Qb6LNRo9eooWtiuDYxQLGPybAohuMsm2QIQvvov45RDOTwMzIKkQx8Z+WyeSOCUnT9JMHCjoxyoh7lUzveYZntr/9ji0ZQ3Os8pXlg9ZZqE351o0yTg/v7h7cdmutTBQ9qMW7e5qerJC4wjjMCrL94oBqUxauR4EdeEpWOMy00s0udVPkp0R8fm/2VMiX+/E6tTY6IGuoLtr9d+CmGXz7jA3DcJAPNovJyLQ1ooTIkrjJT9gO9xt52fQNfK7oe9qQfbHA+GnUduvvkPQkDjZZOvi9bt6CqYI9L7HFgaiC4CZWXSU+iux8gCgBkGB8rvYj5DtKfNeTx8h24YCljC0DEY8HcYpSnkMkf9oBKA/+GT4P9XLpUS1ctirJkyqgAfRgY6MCQMt97dSbH9C5zNlriIU3t5qhzteSLjoMs9Olca6dVpMEzkaZaLRC9TzgnXFEdsu8jGyoHlmwk+L0j1180ih1Bal+LctGJngcut+s2htcFluBxUZXth5XVqh+w8SrBWAt6cet/+X1DZ9vDcjJq8ib7EJO+aZow+BHYmTfHqPnBL/W0tIufX+rpiotxcqH4KKzdotcjZDr4T6u4n9gmtl8P2/oJdW9R0xD/WmVPR8nPUlnboIcd8sck/a5tfCiTL33h3B4xCXQepXRkAk1+AXjuWF2um82kPup9PR0LXYDLYtRLG0SaZWzBb0SCd74lBuRqJ42v6DCs0CIwczt2dwkxyB1jz2z2NFGuFdfP/7Nri966PeFVoFAJSBLAfzyg6qiSBek3wNpxnw6pYLqZlG2NohnNkMFafD/JJt/1KiVikiXuICt/odhFbp/8HGKqEzKwd8G9GAUUiCzID+jikMx/dDEygy7zYZ3sUCbX0n/Y4/iWWngRb03ptxE5TWLI/w+J5MjprNqllz1nMjTrCOZmE1hlVZq9zCAsZjHIvG34ceE0XIBeTgmqXyZRuJp31cZdaKTUdXKhlfkHZ57xPv6VigJ4EyWJ/LcQw+fxJdRKKYtMNTqQEiI9TVU+bdhaC+r++cubriw9TQ80T8mkP2ZTF+RViKr8trb40tpLQ1AiIIDGZ0FzgGcGB6ZAeXS1xAjWOCtY9dlR5pioBGTgAs4v1I+SZoghKBPOZK4H9Gde2YcqBu8h2T8hzJ+Q3kuroAOWXVZPPycCpaJx6IvVZ/6TNjBzJWKK02CQctIOuDf/dKhZrB4UU/zCKWpoHxs8AERh9M7Mn9AtMwm3o8xCigxpGny5SdcKyHRTR31SXPZsuUVkHcn6QrxrA96A2gupV3/10FkvMgo1oWA1WVufsAa5K46xMqLrSbZrMYCuKrspuOGqeX/wQpXF6QJyPDO+FGLsqdlvv+z3FhruZmv0MbdSYK1FLXa/nu6SAA3GgpZMy2drfk7HxiOg55uJuWB6ml5lScXg60RqrzXHXxuC+h17fLy/nYOah1YaDdVWcP9D+nfAO/HEfYa7vJ66S1h9TqAW6vyVvRYERZ9d1s/3QUOg6A/TZrZ5wiykqkeYvWoIr8O/V6F7zJ/5W7gUU5eDQey3CpSVGpGmCMEpFKPNNiQTKwL6D6q3Xn2g4+hFw3bC9/U2BBthXjc1VKDYpvt/epYcZpB3VPH+jS2lD+jBPxufMBe2NI9P93mGSF1obkDrUTaGoyw6s+QkJt3HBSSci2HUH6gCP2IjUtCZBPuWJyX6v4YaPl/WqfpW4ypzmO0TXzdJa289XVSP74tkDbLPY+7B8Poj29f4NYYQRwsLLFxGmNETaByHomOZ2AvUIuA+g33/w+YDTIppuHIBJM+v+ETTb6WPpNqKYUEBDAOzJnWSKt6Gy0nCPGaAeyFsdtaawbuN/JxojSo99b8TYWjg56+uVHUIX7z6pwcCdcnkZwk5rt8MG7gt22qIPlCTkeJHwLGN8pIajfa2VP1IwQAcktf95imsFx5v5wQVl4ZZObCrQBRji8aI3U0e6GXyEYqSRcSosuc+zNmEpgy1Wfh6BQefGCnBgMmhO5g7tUqWN3ZFlJ1MfzPyCplDxBFTk52kgrWog0mRznfmFlwejJzsZaHb3xgpjoUaMoHMW3OfWMSAZlVotvCdL73vHS0CaurcUlRYK33+HUqdmd527j+UmIMEs5fri8LV/d0j6Te/0HU/lblRGGafbr1flmT48z69ugEt6tv2USrs5dMW2C06vLgCYwglecBMaOtFXqsCWl6uJE7MZ3qQjeUcE82tRzTOb0WldU1ApsUOpqaaGgQTe9UuRpIRHmLw+/iSn7s1pRsOEipqNjopGYSf0wpxHNgZV7zH60JNA7aFZwDBY/MtOsx55+/SFbfFMufGHO2mV/28mriQy/J2r0fy0UB71PJ/hX4mPt4uVGkSuRSckdzBKo35IHrM62Lm79Jxh/3ymDefxQTg0Dwbif190bk4/qLZATciYC6udxxmsZAD24EbBin/yh8LyG4V8thzwG0AMD18sjvtu5sj/9+ozSxgqiHnQShdRHgYITmEvmfe86QRKPDbEtYr9Np5KHjvSAYX8k2xxjhjdQNg6qhbGIL2Ij0w9h8KEu9MZd8pUPFfu4Pa7WjmGnfxFtnyqjU3guanCHEUgPGR38bAIEn986w+3sy1Z6kk/+8sh8MHrxDCBlqrC3mCqjgs0iZ3cAsZHFI/NfuyKPhDNF7daeyTWIsnXcTW8ublKYZMyOyPDz3Q2HshsxWGdWMDoCLhmFE2ps6WBBHebL0puewOimsznzKtqELmt3BOXK8MLHcBv/o92Xp7WjRWprWSuWy3ANdbOIUChkkKX8G56RWPFbt4eETl+OdwZzucPM655B3TSGUNcfW6tw7CukVd9QYXOPAD5HYFExgwNgS6TKVdhLIpQvD1j++G5WbBlJecLE+bvFLkZLU7995fRr0ez1BwEy3MnmFMgs0en5Q5UlYtHmKocE8/YF9dYIasBNZP38dqc09Q93NPwJyQjFsGV3NW84= \ No newline at end of file