From b49a7894ce7bd3b1f46fdd2382103e5b186bd1a7 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 14 Jan 2023 20:22:55 +0900 Subject: [PATCH 01/94] Models are now added to the ignore list --- TODO.md | 41 +++++++++++++++++++++++++++++++++++------ renderer.js | 34 ++++++++++++++++------------------ 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/TODO.md b/TODO.md index bf94cbb..b25a001 100644 --- a/TODO.md +++ b/TODO.md @@ -1,12 +1,15 @@ # LSR: To-do List - [LSR: To-do List](#lsr-to-do-list) - - [1.00, the Mistletoe Update](#100-the-mistletoe-update) + - [1.00, Mistletoe ed.](#100-mistletoe-ed) - [0.21: Completed](#021-completed) - [0.20: Completed](#020-completed) - [Impossible or Scrapped](#impossible-or-scrapped) -## 1.00, the Mistletoe Update +## 1.00, Mistletoe ed. + +- [ ] Arrange coding streams + - Ask if people would be interested - [ ] Add more comments in the code - [ ] Turtle controls summary page in guide @@ -28,14 +31,23 @@ - [ ] Remove the backtrack list option - Also, backtrack on the way back and forward needs different lists? +- [ ] Turning angles + - [ ] Formula expressions allow shenanigans such as `360/7`, mostly + - [ ] Button to change mode between degrees and radians + +- [ ] Implement Mersenne Twister instead of th fucjuing Lcg + - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Can multiple derivations on the same rule still be made? Ruins parity - Allow both modes to exist + - Difficulty: multiple derivations + +- [ ] Investigate tropism (capital T) only available for parametric - [ ] Change how models work: - Stochastic models are no longer available - - Please define stochastic rules for the actual symbol instead, pre-model + - Instead define stochastic rules for the actual symbol instead, pre-model - Models are no longer recursively derived - This will remove their permanence - Instead, they will be processed by the renderer using a queue @@ -45,11 +57,27 @@ - Easy, just add the model map's keys to the set - Update the manual - Backtrack models? +- [ ] Counter argument: + - Permanence can be solved by cutting with `%`, albeit with a 1 tick cost for + renderer hesitation (or 2) + - Solution: Renderer only pushes on `[` if the position / ori has changed + - This makes more sense thematically, as cut wounds will leave scars + - Lemma's Garden: this will slightly slow down growth + - If models were to be processed by renderer, then they cannot evolve + - Having a model also means that symbol should be ignored (no extra F) + - Easy, just add the model map's keys to the set + - Update the manual + - Lemma's Garden: Complex models such as flowers will bog down the growth cost - [ ] Parametric systems - - Different classes or merge into regular? - - Different classes means less overhead processing for regular systems - - Regex magic to separate string to actual sequence of symbols? + - Different classes + - Button in LS menu / save menu to switch modes? + - Theory settings? + - Lemma stages? + - Top-down processing priority + - Buttons in LS menu to move up down (swap rules) + - How to update rule entries? + - [ ] Regex magic to separate string into actual sequence of symbols - Equal comparison changed to `==` instead of `=` in abop to differentiate from the syntax - Store as an extra array of objects @@ -59,6 +87,7 @@ - [ ] Context sensitivity - `b < a > c → aa` + - Parametric: **context ignore** replaces regular ignore list in LS menu - Skipping over brackets? hmm, difficult - Mapping vertex depth, can be checked by tracking brackets and stacks. - Actually it's pretty hard to make an algo for this, because it could be: diff --git a/renderer.js b/renderer.js index d739dfa..1b7d854 100644 --- a/renderer.js +++ b/renderer.js @@ -42,10 +42,7 @@ var getName = (language) => en: 'L-systems Renderer', }; - if(language in names) - return names[language]; - - return names.en; + return names[language] || names.en; } var getDescription = (language) => { @@ -68,10 +65,7 @@ Warning: v0.20 might break your internal state. Be sure to back it up, and ` + `in case it's corrupted, please contact me.`, }; - if(language in descs) - return descs[language]; - - return descs.en; + return descs[language] || descs.en; } var authors = 'propfeds#5988\n\nThanks to:\nSir Gilles-Philippe Paillé, ' + 'for providing help with quaternions\nskyhigh173#3120, for ' + @@ -810,7 +804,7 @@ let getLoc = (name, lang = menuLang) => if(name in locStrings.en) return locStrings.en[name]; - return `String not found: ${lang}.${name}`; + return `String missing: ${lang}.${name}`; } /** @@ -1043,7 +1037,7 @@ class LSystem this.rules = new Map(); this.contextRules = new Map(); /** - * @type {string} a list of symbols ignored by the renderer. + * @type {set} a list of symbols ignored by the renderer. * @public */ this.ignoreList = new Set(ignoreList); @@ -1075,18 +1069,22 @@ class LSystem if(rs[0].length == 1) this.rules.set(rs[0], rs[1]); else if(rs[0].length == 2 && rs[0][0] == '~') + { this.models.set(rs[0][1], rs[1]); + this.ignoreList.add(rs[0][1]); + } } else { - // Models can't have stochastic rules sadly, due to how - // derivations work. for(let i = 0; i < rder.length; ++i) rder[i] = rder[i].trim(); if(rs[0].length == 1) this.rules.set(rs[0], rder); else if(rs[0].length == 2 && rs[0][0] == '~') + { this.models.set(rs[0][1], rder); + this.ignoreList.add(rs[0][1]); + } } } } @@ -1636,7 +1634,7 @@ class Renderer * Applies a new L-system to the renderer. * @param {LSystem} system the new system. */ - set applySystem(system) + set constructSystem(system) { this.system = system; this.levels = []; @@ -2691,7 +2689,7 @@ var getUpgradeListDelegate = () => let resumeButton = createButton(Localization.format(getLoc('btnResume'), tmpSystemName), () => { - renderer.applySystem = tmpSystem; + renderer.constructSystem = tmpSystem; tmpSystem = null; }, ui.screenHeight * 0.05); resumeButton.content.horizontalOptions = LayoutOptions.CENTER; @@ -3457,7 +3455,7 @@ let createSystemMenu = () => onClicked: () => { Sound.playClick(); - renderer.applySystem = new LSystem(tmpAxiom, + renderer.constructSystem = new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore); if(tmpSystem) { @@ -3703,7 +3701,7 @@ let createSystemClipboardMenu = (values) => let sv = JSON.parse(tmpSys); tmpSystemName = sv.title; tmpSystemDesc = sv.desc; - renderer.applySystem = new LSystem(sv.system.axiom, + renderer.constructSystem = new LSystem(sv.system.axiom, sv.system.rules, sv.system.turnAngle, sv.system.seed, sv.system.ignoreList); tmpSystem = null; @@ -4106,7 +4104,7 @@ let createViewMenu = (title) => onClicked: () => { Sound.playClick(); - renderer.applySystem = new LSystem(tmpAxiom, + renderer.constructSystem = new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore); tmpSystem = null; renderer.configureStaticCamera(tmpZE, tmpCX, @@ -4451,7 +4449,7 @@ let createManualMenu = () => { Sound.playClick(); let s = manualSystems[page]; - renderer.applySystem = s.system; + renderer.constructSystem = s.system; tmpSystem = null; if('config' in s) renderer.configureStaticCamera(...s.config); From c88a835aa76e6136165ec93b089da24dd788fcd5 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 14 Jan 2023 20:37:14 +0900 Subject: [PATCH 02/94] Referenced new change in the manual --- TODO.md | 8 ++++---- renderer.js | 5 ++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index b25a001..0ad068b 100644 --- a/TODO.md +++ b/TODO.md @@ -12,6 +12,7 @@ - Ask if people would be interested - [ ] Add more comments in the code +- [ ] Update docstrings - [ ] Turtle controls summary page in guide - [ ] A more detailed README - Showcases the power of tickspeed and stroke options @@ -40,8 +41,7 @@ - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Can multiple derivations on the same rule still be made? Ruins parity - - Allow both modes to exist - - Difficulty: multiple derivations + - [ ] Allow both modes to exist - [ ] Investigate tropism (capital T) only available for parametric @@ -64,9 +64,9 @@ - This makes more sense thematically, as cut wounds will leave scars - Lemma's Garden: this will slightly slow down growth - If models were to be processed by renderer, then they cannot evolve - - Having a model also means that symbol should be ignored (no extra F) + - [x] Having a model also means that symbol should be ignored (no extra F) - Easy, just add the model map's keys to the set - - Update the manual + - [x] Update the manual - Lemma's Garden: Complex models such as flowers will bog down the growth cost - [ ] Parametric systems diff --git a/renderer.js b/renderer.js index 1b7d854..19e11f3 100644 --- a/renderer.js +++ b/renderer.js @@ -83,7 +83,6 @@ let measurePerformance = false; let maxCharsPerTick = 5000; let savedSystems = new Map(); -let savedModels = new Map(); const DEFAULT_BUTTON_HEIGHT = ui.screenHeight * 0.055; const ENTRY_CHAR_LIMIT = 5000; @@ -107,7 +106,7 @@ const locStrings = varTsDesc: '\\text{{Tickspeed: }}{0}/\\text{{sec}}', upgResumeInfo: 'Resumes the last rendered system', - saPatienceTitle: 'Watching Grass Grow', + saPatienceTitle: 'You\'re watching grass grow.', saPatienceDesc: 'Let the renderer draw a 10-minute long figure or ' + 'playlist.', saPatienceHint: 'Be patient.', @@ -613,7 +612,7 @@ To declare a model rule, attach a tilde in front of the symbol on the left side: To reference a model in another rule, attach a tilde in front of the symbol ` + `in the same way it was declared. Note: The symbol will not disappear from the rule after the model has been ` + -`drawn.` +`drawn, but it will be ignored by the turtle.` }, { title: 'Example: Lilac branch', From ac737a32a8550aa9b08ae4991a33131c65f68708 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 14 Jan 2023 21:04:39 +0900 Subject: [PATCH 03/94] Added a summary of turtle commands to guide --- renderer.js | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/renderer.js b/renderer.js index 19e11f3..e2c8e95 100644 --- a/renderer.js +++ b/renderer.js @@ -349,7 +349,7 @@ Level 5: abaababa` `comprehend this crap though. Here are the basic symbols and their respective instructions: -F: moves turtle forward to draw a line of length 1 (usually). +F: moves turtle forward to draw a line of length 1. +: rotates turtle counter-clockwise by an angle. -: rotates turtle clockwise by an angle. @@ -506,7 +506,10 @@ Note: In other L-system implementations, < and > may be used instead of \\ ` + Note 2: Other L-system implementations may also start the turtle facing the ` + `y-axis or z-axis instead of the x-axis. To adopt those systems into LSR, ` + -`swap the axes around until the desired results are achieved.` +`swap the axes around until the desired results are achieved. + +Note 3: Other L-system implementations may swap counter-clockwise and ` + +`clockwise rotations.` }, { title: 'Example: Blackboard tree', @@ -632,6 +635,27 @@ Applies static camera: Scale: 3*lv Centre: (1.5*lv, 0, 0) Upright` + }, + { + title: 'Appendix: Summary of symbols', + contents: +`Any letter: moves turtle forward to draw a line of length 1. ++ -: rotate turtle on the z-axis (yaw). +& ^: rotate turtle on the y-axis (pitch). +\\ /: rotate turtle on the x-axis (roll). +(counter-clockwise and clockwise, respectively) +|: reverses turtle direction. + +[: pushes the turtle's state onto a stack. +]: pops the stack's topmost element onto the turtle. +%: cuts off the remainder of a branch. + +{: initiates polygon drawing mode. +.: sets a polygon vertex. +}: ends the polygon drawing mode. + +~: declares/references a symbol's model. +,: separates between stochastic derivations.` }, { title: 'Appendix: Advanced artistry in LSR', @@ -780,9 +804,9 @@ Centre: (0.75*3^lv, -0.25*3^lv, 0) Upright` }, { - title: 'Appendix: LG', + title: 'Appendix: Lemma\'s Garden', contents: -`Here's to LG.` +`Here's to LG, coming out in Never.` } ] } @@ -2319,7 +2343,7 @@ const ZAxisQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); let globalSeed = new LCG(Date.now()); -let contentsTable = [1, 2, 3, 4, 5, 6, 7, 10, 12, 15, 19, 21, 23, 26]; +let contentsTable = [1, 2, 3, 4, 5, 6, 7, 10, 12, 15, 19, 21, 23, 24, 27]; let manualSystems = { 11: @@ -2415,17 +2439,17 @@ let manualSystems = ], 30), config: ['3*lv', '1.5*lv', 0, 0, true] }, - 27: + 28: { system: new LSystem('X', ['F=FF', 'X=F-[[X]+X]+F[-X]-X'], 15), config: ['2^lv', '2^lv', 0, 0, true] }, - 28: + 29: { system: new LSystem('X', ['F=F[+F]XF', 'X=F-[[X]+X]+F[-FX]-X'], 27), config: ['1.5*2^lv', '0.225*2^lv', '-0.75*2^lv', 0, false] }, - 29: + 30: { system: new LSystem('X', [ 'E=XEXF-', From ea5f75dc873cf8adc05060a7ab5ea3a6b52db96e Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 14 Jan 2023 22:06:02 +0900 Subject: [PATCH 04/94] Stochastic rules can now be stacked --- TODO.md | 12 +++++++++--- renderer.js | 55 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/TODO.md b/TODO.md index 0ad068b..8fe5782 100644 --- a/TODO.md +++ b/TODO.md @@ -13,7 +13,7 @@ - [ ] Add more comments in the code - [ ] Update docstrings -- [ ] Turtle controls summary page in guide +- [x] Turtle controls summary page in guide - [ ] A more detailed README - Showcases the power of tickspeed and stroke options - Discusses limitations of the game @@ -27,7 +27,13 @@ - [ ] Rework quickdraw / BT logic - [ ] Add a cooldown system - [ ] Hesitate on both ends if hesitation is on? - - [ ] If the stack hasn't detected any movement, just don't do anything + - [ ] When just pushing onto the stack normally (on an F point), don't push + if the position hasn't changed, because the orientation doesn't matter if + the stack point isn't a `[` bracket point + - [ ] If the `]]]]]` are stacked, hesitation time is massive + - [ ] If the stack hasn't detected any movement, just don't do anything + - [ ] Hesitate only when the turtle was moved compared to last time? + - [ ] Does it work with ignored? (because of the ignored stuff) - [ ] Remove the backtrack list option - Also, backtrack on the way back and forward needs different lists? @@ -41,7 +47,7 @@ - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Can multiple derivations on the same rule still be made? Ruins parity - - [ ] Allow both modes to exist + - [x] Allow both modes to exist (implemented in Classic) - [ ] Investigate tropism (capital T) only available for parametric diff --git a/renderer.js b/renderer.js index e2c8e95..7c11eeb 100644 --- a/renderer.js +++ b/renderer.js @@ -1087,25 +1087,56 @@ class LSystem rs[i] = rs[i].trim(); let rder = rs[1].split(','); - if(rder.length == 1) + if(rder.length == 1) // Regular rule { if(rs[0].length == 1) - this.rules.set(rs[0], rs[1]); + { + let existingDer = this.rules.get(rs[0]); + if(!existingDer) + this.rules.set(rs[0], rs[1]); + else if(typeof existingDer === 'string') + this.rules.set(rs[0], [existingDer, rs[1]]); + else + this.rules.set(rs[0], [...existingDer, rs[1]]); + } else if(rs[0].length == 2 && rs[0][0] == '~') { - this.models.set(rs[0][1], rs[1]); + let existingDer = this.models.get(rs[0][1]); + if(!existingDer) + this.models.set(rs[0][1], rs[1]); + else if(typeof existingDer === 'string') + this.models.set(rs[0][1], [existingDer, rs[1]]); + else + this.models.set(rs[0][1], [...existingDer, rs[1]]); + this.ignoreList.add(rs[0][1]); } } - else + else // Stochastic rule { for(let i = 0; i < rder.length; ++i) rder[i] = rder[i].trim(); + if(rs[0].length == 1) - this.rules.set(rs[0], rder); + { + let existingDer = this.rules.get(rs[0]); + if(!existingDer) + this.rules.set(rs[0], rder); + else if(typeof existingDer === 'string') + this.rules.set(rs[0], [existingDer, rder]); + else + this.rules.set(rs[0], [...existingDer, rder]); + } else if(rs[0].length == 2 && rs[0][0] == '~') { - this.models.set(rs[0][1], rder); + let existingDer = this.models.get(rs[0][1]); + if(!existingDer) + this.models.set(rs[0][1], rder); + else if(typeof existingDer === 'string') + this.models.set(rs[0][1], [existingDer, rder]); + else + this.models.set(rs[0][1], [...existingDer, rder]); + this.ignoreList.add(rs[0][1]); } } @@ -1694,7 +1725,7 @@ class Renderer tick(dt) { if(this.lv > this.loaded + 1 || - typeof this.levels[this.lv] == 'undefined') + typeof this.levels[this.lv] === 'undefined') return; if(this.i >= this.levels[this.lv].length && this.loopMode == 0) @@ -1718,7 +1749,7 @@ class Renderer // You can't believe how many times I have to type this typeof clause. if(level > this.loaded + 1 || - typeof this.levels[this.lv] == 'undefined') + typeof this.levels[this.lv] === 'undefined') return; if(onlyUpdate) @@ -1984,7 +2015,7 @@ class Renderer */ get progressPercent() { - if(typeof this.levels[this.lv] == 'undefined') + if(typeof this.levels[this.lv] === 'undefined') return 0; let pf = this.progressFrac; @@ -2009,7 +2040,7 @@ class Renderer */ get loadingString() { - let len = typeof this.levels[this.loaded + 1] == 'undefined' ? 0 : + let len = typeof this.levels[this.loaded + 1] === 'undefined' ? 0 : this.levels[this.loaded + 1].length; return Localization.format(getLoc('rendererLoading'), this.loaded + 1, len); @@ -2020,7 +2051,7 @@ class Renderer */ get stateString() { - if(typeof this.levels[this.lv] == 'undefined') + if(typeof this.levels[this.lv] === 'undefined') return this.loadingString; return `\\begin{matrix}x=${getCoordString(this.state.x)},&y=${getCoordString(this.state.y)},&z=${getCoordString(this.state.z)},&${this.progressString}\\end{matrix}`; @@ -2031,7 +2062,7 @@ class Renderer */ get oriString() { - if(typeof this.levels[this.lv] == 'undefined') + if(typeof this.levels[this.lv] === 'undefined') return this.loadingString; return `\\begin{matrix}q=${this.ori.toString()},&${this.progressString}\\end{matrix}`; From cdaca5434a225962bd8ac88d9f1bf090e5be91b4 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 14 Jan 2023 22:18:30 +0900 Subject: [PATCH 05/94] Reroll function moved to LS menu; Reset button now resets renderer --- renderer.js | 76 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/renderer.js b/renderer.js index 7c11eeb..13de311 100644 --- a/renderer.js +++ b/renderer.js @@ -115,6 +115,7 @@ const locStrings = btnClear: 'Clear', btnDefault: '* Reset to Defaults', btnAdd: 'Add', + btnReroll: 'Reroll', btnConstruct: 'Construct', btnDelete: 'Delete', btnView: 'View', @@ -142,6 +143,7 @@ const locStrings = measurement: '{0}: max {1}ms, avg {2}ms over {3} ticks', rerollSeed: 'You are about to reroll the system\'s seed.', + resetRenderer: 'You are about to reset the renderer.', menuSequence: 'Sequence Menu', labelLevelSeq: 'Level {0}: ', @@ -152,7 +154,7 @@ const locStrings = labelAngle: 'Turning angle (°): ', labelRules: 'Production rules: {0}', labelIgnored: 'Ignored symbols: ', - labelSeed: 'Seed (for stochastic systems): ', + labelSeed: 'Seed: ', menuRenderer: 'Renderer Menu', labelInitScale: '* Initial scale: ', @@ -3404,6 +3406,32 @@ let createSystemMenu = () => } }); let tmpSeed = values.seed; + let seedLabel = ui.createGrid + ({ + row: 1, + column: 0, + columnDefinitions: ['40*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelSeed'), + column: 0, + verticalOptions: LayoutOptions.CENTER + }), + ui.createButton + ({ + text: getLoc('btnReroll'), + column: 1, + heightRequest: 40, + onClicked: () => + { + Sound.playClick(); + seedEntry.text = globalSeed.nextInt.toString(); + } + }) + ] + }); let seedEntry = ui.createEntry ({ text: tmpSeed.toString(), @@ -3477,13 +3505,7 @@ let createSystemMenu = () => verticalOptions: LayoutOptions.CENTER }), ignoreEntry, - ui.createLatexLabel - ({ - text: getLoc('labelSeed'), - row: 1, - column: 0, - verticalOptions: LayoutOptions.CENTER - }), + seedLabel, seedEntry ] }) @@ -4006,6 +4028,32 @@ let createViewMenu = (title) => } }); let tmpSeed = values.seed; + let seedLabel = ui.createGrid + ({ + row: 1, + column: 0, + columnDefinitions: ['40*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelSeed'), + column: 0, + verticalOptions: LayoutOptions.CENTER + }), + ui.createButton + ({ + text: getLoc('btnReroll'), + column: 1, + heightRequest: 40, + onClicked: () => + { + Sound.playClick(); + seedEntry.text = globalSeed.nextInt.toString(); + } + }) + ] + }); let seedEntry = ui.createEntry ({ text: tmpSeed.toString(), @@ -4087,13 +4135,7 @@ let createViewMenu = (title) => verticalOptions: LayoutOptions.CENTER }), ignoreEntry, - ui.createLatexLabel - ({ - text: getLoc('labelSeed'), - row: 1, - column: 0, - verticalOptions: LayoutOptions.CENTER - }), + seedLabel, seedEntry ] }), @@ -5039,9 +5081,9 @@ var setInternalState = (stateStr) => var canResetStage = () => true; -var getResetStageMessage = () => getLoc('rerollSeed'); +var getResetStageMessage = () => getLoc('resetRenderer'); -var resetStage = () => renderer.seed = globalSeed.nextInt; +var resetStage = () => renderer.reset(); var getTertiaryEquation = () => { From 085cf3e4e67c8d8e26521ded5812ebe188d9dbbe Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 15 Jan 2023 13:19:29 +0900 Subject: [PATCH 06/94] Implemented Xorshift to replace LCG --- TODO.md | 4 ++- renderer.js | 93 +++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 86 insertions(+), 11 deletions(-) diff --git a/TODO.md b/TODO.md index 8fe5782..3afb934 100644 --- a/TODO.md +++ b/TODO.md @@ -26,6 +26,7 @@ - [ ] How about locking rotation? (for Navier Stokes) - [ ] Rework quickdraw / BT logic - [ ] Add a cooldown system + - [ ] Proposal: remove idxStack and instead turn stack into a 2D array - [ ] Hesitate on both ends if hesitation is on? - [ ] When just pushing onto the stack normally (on an F point), don't push if the position hasn't changed, because the orientation doesn't matter if @@ -35,6 +36,7 @@ - [ ] Hesitate only when the turtle was moved compared to last time? - [ ] Does it work with ignored? (because of the ignored stuff) + - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? - [ ] Remove the backtrack list option - Also, backtrack on the way back and forward needs different lists? @@ -42,7 +44,7 @@ - [ ] Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians -- [ ] Implement Mersenne Twister instead of th fucjuing Lcg +- [x] Implement new RNG (Xorshift) instead of th fucjuing Lcg - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` diff --git a/renderer.js b/renderer.js index 13de311..171ec5c 100644 --- a/renderer.js +++ b/renderer.js @@ -154,7 +154,7 @@ const locStrings = labelAngle: 'Turning angle (°): ', labelRules: 'Production rules: {0}', labelIgnored: 'Ignored symbols: ', - labelSeed: 'Seed: ', + labelSeed: 'Seed (32-bit): ', menuRenderer: 'Renderer Menu', labelInitScale: '* Initial scale: ', @@ -933,6 +933,77 @@ class LCG } } +class Xorshift +{ + constructor(seed = 0) + { + this.state = seed; + } + /* The state must be initialized to non-zero */ + // uint32_t xorshift32(struct xorshift32_state *state) + // { + // /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */ + // uint32_t x = state->a; + // x ^= x << 13; + // x ^= x >> 17; + // x ^= x << 5; + // return state->a = x; + // } + /** + * Returns a random integer within [0, 2^32) probably. + * @returns {number} the next integer in the generator. + */ + get nextInt() + { + let x = this.state; + x ^= x << 13; + x ^= x >> 17; + x ^= x << 5; + this.state = x; + return this.state; + } + /** + * Returns a random floating point number within [0, 1] or [0, 1). + * @param {boolean} [includeEnd] (default: false) whether to include the + * number 1 in the range. + * @returns {number} the floating point, corresponding to the next integer. + */ + nextFloat(includeEnd = false) + { + if(includeEnd) + { + // [0, 1] + return this.nextInt / (this.m - 1); + } + else + { + // [0, 1) + return this.nextInt / this.m; + } + } + /** + * Returns a random integer within a range of [start, end). + * @param {number} start the range's lower bound. + * @param {number} end the range's upper bound, plus 1. + * @returns {number} the integer. + */ + nextRange(start, end) + { + // [start, end) + let size = end - start; + return start + Math.floor(this.nextFloat() * size); + } + /** + * Returns a random element from an array. + * @param {any[]} array the array. + * @returns the element. + */ + choice(array) + { + return array[this.nextRange(0, array.length)]; + } +} + /** * Represents one hell of a quaternion. */ @@ -1150,10 +1221,10 @@ class LSystem */ this.seed = seed; /** - * @type {LCG} the LCG used for random number generation. + * @type {Xorshift} the random number generator for this system. * @public not sure, ask Itsuki. */ - this.random = new LCG(this.seed); + this.RNG = new Xorshift(this.seed); /** * @type {string} the starting sequence. * @public @@ -1211,7 +1282,7 @@ class LSystem if(typeof deriv === 'string') result += deriv; else - result += deriv[this.random.nextRange(0, deriv.length)]; + result += deriv[this.RNG.nextRange(0, deriv.length)]; count += deriv.length; } @@ -1291,7 +1362,7 @@ class LSystem if(typeof deriv === 'string') result += deriv; else - result += deriv[this.random.nextRange(0, deriv.length)]; + result += deriv[this.RNG.nextRange(0, deriv.length)]; } return { next: 0, @@ -1306,7 +1377,7 @@ class LSystem { this.seed = seed; this.userInput.seed = seed; - this.random = new LCG(this.seed); + this.RNG = new Xorshift(this.seed); } getPurged(rules) { @@ -1743,8 +1814,10 @@ class Renderer draw(level, onlyUpdate = false) { /* + Behold the broken monster patched by sheer duct tape. I can guarantee that because the game runs on one thread, the renderer - would always load faster than it draws. + would always load faster than it draws. Unless you make a rule that + spawns 10000 plus signs. Please don't do it. */ if(level > this.loaded) this.update(level); @@ -2375,7 +2448,7 @@ const ZAxisQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); -let globalSeed = new LCG(Date.now()); +let globalRNG = new Xorshift(Date.now()); let contentsTable = [1, 2, 3, 4, 5, 6, 7, 10, 12, 15, 19, 21, 23, 24, 27]; let manualSystems = { @@ -3427,7 +3500,7 @@ let createSystemMenu = () => onClicked: () => { Sound.playClick(); - seedEntry.text = globalSeed.nextInt.toString(); + seedEntry.text = globalRNG.nextInt.toString(); } }) ] @@ -4049,7 +4122,7 @@ let createViewMenu = (title) => onClicked: () => { Sound.playClick(); - seedEntry.text = globalSeed.nextInt.toString(); + seedEntry.text = globalRNG.nextInt.toString(); } }) ] From 0ed8c59e1aab7b279ecd46d9a4b52200715c6a37 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 15 Jan 2023 14:27:48 +0900 Subject: [PATCH 07/94] Buttons in guides are now more responsive --- TODO.md | 3 +- renderer.js | 153 +++++++++++++++++++++++++++------------------------- 2 files changed, 80 insertions(+), 76 deletions(-) diff --git a/TODO.md b/TODO.md index 3afb934..f73f9bd 100644 --- a/TODO.md +++ b/TODO.md @@ -19,8 +19,7 @@ - Discusses limitations of the game - Like a blog post, sort of - [ ] Localisation -- [ ] Folders for saved systems? - - Directory separator? +- [ ] Folders for saved systems - [ ] Compress internal state? LZW, LZP - [ ] Ask Gilles about changing the spline used in 3D graph - [ ] How about locking rotation? (for Navier Stokes) diff --git a/renderer.js b/renderer.js index 171ec5c..4a2420d 100644 --- a/renderer.js +++ b/renderer.js @@ -154,7 +154,7 @@ const locStrings = labelAngle: 'Turning angle (°): ', labelRules: 'Production rules: {0}', labelIgnored: 'Ignored symbols: ', - labelSeed: 'Seed (32-bit): ', + labelSeed: 'Seed (non-zero): ', menuRenderer: 'Renderer Menu', labelInitScale: '* Initial scale: ', @@ -460,7 +460,9 @@ When the system is grown, one of the possible derivations will be randomly ` + A system's seed can either be changed manually within the L-systems menu, or ` + `randomly reassigned using the 'Reroll' button on the top right corner of ` + -`the theory screen.` +`the theory screen. + +Note: setting the seed to 0 will disable the random generation.` }, { title: 'Example: Stochastic tree', @@ -935,20 +937,13 @@ class LCG class Xorshift { - constructor(seed = 0) + /** + * The state must be initialized to non-zero. + */ + constructor(seed = 1752) { this.state = seed; } - /* The state must be initialized to non-zero */ - // uint32_t xorshift32(struct xorshift32_state *state) - // { - // /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */ - // uint32_t x = state->a; - // x ^= x << 13; - // x ^= x >> 17; - // x ^= x << 5; - // return state->a = x; - // } /** * Returns a random integer within [0, 2^32) probably. * @returns {number} the next integer in the generator. @@ -1112,9 +1107,10 @@ class LSystem * @param {string} axiom the starting sequence. * @param {string[]} rules the production rules. * @param {number} turnAngle (default: 30) the turning angle (in degrees). - * @param {number} seed (default: 0) the seed (for stochastic systems). + * @param {number} seed (default: 1752) the seed used for stochastic + * systems. */ - constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, + constructor(axiom = '', rules = [], turnAngle = 0, seed = 1752, ignoreList = '', models = {}) { this.userInput = @@ -4499,6 +4495,65 @@ let createManualMenu = () => sourceEntry ] }); + let prevButton = ui.createButton + ({ + text: getLoc('btnPrev'), + row: 0, + column: 0, + isVisible: page > 0, + onClicked: () => + { + Sound.playClick(); + if(page > 0) + setPage(page - 1); + } + }); + let constructButton = ui.createButton + ({ + text: getLoc('btnConstruct'), + row: 0, + column: 1, + isVisible: page in manualSystems, + onClicked: () => + { + Sound.playClick(); + let s = manualSystems[page]; + renderer.constructSystem = s.system; + tmpSystem = null; + if('config' in s) + renderer.configureStaticCamera(...s.config); + + tmpSystemName = manualPages[page].title; + tmpSystemDesc = Localization.format( + getLoc('manualSystemDesc'), page + 1); + menu.hide(); + } + }); + let tocButton = ui.createButton + ({ + text: getLoc('btnContents'), + row: 0, + column: 1, + isVisible: !(page in manualSystems), + onClicked: () => + { + Sound.playClick(); + TOCMenu.show(); + } + }); + let nextButton = ui.createButton + ({ + text: getLoc('btnNext'), + row: 0, + column: 2, + isVisible: page < manualPages.length - 1, + onClicked: () => + { + Sound.playClick(); + if(page < manualPages.length - 1) + setPage(page + 1); + } + }); let setPage = (p) => { page = p; @@ -4515,6 +4570,11 @@ let createManualMenu = () => sourceEntry.text = 'source' in manualPages[page] ? manualPages[page].source : ''; + + prevButton.isVisible = page > 0; + nextButton.isVisible = page < manualPages.length - 1; + constructButton.isVisible = page in manualSystems; + tocButton.isVisible = !(page in manualSystems); }; let getContentsTable = () => { @@ -4595,65 +4655,10 @@ let createManualMenu = () => columnDefinitions: ['30*', '30*', '30*'], children: [ - ui.createButton - ({ - text: getLoc('btnPrev'), - row: 0, - column: 0, - isVisible: () => page > 0, - onClicked: () => - { - Sound.playClick(); - if(page > 0) - setPage(page - 1); - } - }), - ui.createButton - ({ - text: getLoc('btnConstruct'), - row: 0, - column: 1, - isVisible: () => page in manualSystems, - onClicked: () => - { - Sound.playClick(); - let s = manualSystems[page]; - renderer.constructSystem = s.system; - tmpSystem = null; - if('config' in s) - renderer.configureStaticCamera(...s.config); - - tmpSystemName = manualPages[page].title; - tmpSystemDesc = Localization.format( - getLoc('manualSystemDesc'), page + 1); - menu.hide(); - } - }), - ui.createButton - ({ - text: getLoc('btnContents'), - row: 0, - column: 1, - isVisible: () => !(page in manualSystems), - onClicked: () => - { - Sound.playClick(); - TOCMenu.show(); - } - }), - ui.createButton - ({ - text: getLoc('btnNext'), - row: 0, - column: 2, - isVisible: () => page < manualPages.length - 1, - onClicked: () => - { - Sound.playClick(); - if(page < manualPages.length - 1) - setPage(page + 1); - } - }) + prevButton, + constructButton, + tocButton, + nextButton ] }) ] From 73366e4d14b5ea81cd65c90660cf14826b8672f7 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 16 Jan 2023 00:23:54 +0900 Subject: [PATCH 08/94] Added a good argument for reworking models --- TODO.md | 2 ++ renderer.js | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index f73f9bd..b90112e 100644 --- a/TODO.md +++ b/TODO.md @@ -71,6 +71,8 @@ - This makes more sense thematically, as cut wounds will leave scars - Lemma's Garden: this will slightly slow down growth - If models were to be processed by renderer, then they cannot evolve + - On the other hand, they can 'evolve' in another sense where each parameter + value can have a different model - [x] Having a model also means that symbol should be ignored (no extra F) - Easy, just add the model map's keys to the set - [x] Update the manual diff --git a/renderer.js b/renderer.js index 4a2420d..c34f70b 100644 --- a/renderer.js +++ b/renderer.js @@ -81,6 +81,7 @@ let tickDelayMode = false; let resetLvlOnConstruct = true; let measurePerformance = false; let maxCharsPerTick = 5000; +let menuLang = Localization.language; let savedSystems = new Map(); @@ -816,13 +817,11 @@ Upright` } }; -let menuLang = Localization.language; /** * Returns a localised string. * @param {string} name the internal name of the string. * @returns {string} the string. */ - let getLoc = (name, lang = menuLang) => { if(lang in locStrings && name in locStrings[lang]) @@ -4983,6 +4982,9 @@ var getInternalState = () => JSON.stringify var setInternalState = (stateStr) => { + if(!stateStr) + return; + let values = stateStr.split('\n'); let worldValues = values[0].split(' '); From 45c95e6b7b39492c1c50360d5fe3402100413db8 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 21 Jan 2023 01:38:40 +0900 Subject: [PATCH 09/94] Fix a crash involving double-tapping Resume --- TODO.md | 3 ++- renderer.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/TODO.md b/TODO.md index b90112e..7d68763 100644 --- a/TODO.md +++ b/TODO.md @@ -50,7 +50,8 @@ - Can multiple derivations on the same rule still be made? Ruins parity - [x] Allow both modes to exist (implemented in Classic) -- [ ] Investigate tropism (capital T) only available for parametric +- [ ] Investigate tropism (capital T) +- [ ] Investigate sunlight heading command (`$`) - [ ] Change how models work: - Stochastic models are no longer available diff --git a/renderer.js b/renderer.js index c34f70b..d8bb873 100644 --- a/renderer.js +++ b/renderer.js @@ -80,6 +80,7 @@ let altTerEq = false; let tickDelayMode = false; let resetLvlOnConstruct = true; let measurePerformance = false; +let debugCamPath = false; let maxCharsPerTick = 5000; let menuLang = Localization.language; @@ -197,6 +198,7 @@ const locStrings = labelTerEq: 'Tertiary equation: {0}', terEqModes: ['Coordinates', 'Orientation'], labelMeasure: 'Measure performance: ', + debugCamPath: 'Debug camera path: ', labelMaxCharsPerTick: 'Maximum loaded chars/tick: ', labelInternalState: 'Internal state: ', @@ -2813,8 +2815,11 @@ var getUpgradeListDelegate = () => let resumeButton = createButton(Localization.format(getLoc('btnResume'), tmpSystemName), () => { - renderer.constructSystem = tmpSystem; - tmpSystem = null; + if(tmpSystem) + { + renderer.constructSystem = tmpSystem; + tmpSystem = null; + } }, ui.screenHeight * 0.05); resumeButton.content.horizontalOptions = LayoutOptions.CENTER; resumeButton.isVisible = () => tmpSystem ? true : false; @@ -4825,12 +4830,30 @@ let createWorldMenu = () => } } }); + let tmpDCP = debugCamPath; + let DCPSwitch = ui.createSwitch + ({ + isToggled: tmpDCP, + row: 4, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpDCP = !tmpDCP; + DCPSwitch.isToggled = tmpDCP; + } + } + }); let tmpMCPT = maxCharsPerTick; let MCPTEntry = ui.createEntry ({ text: tmpMCPT.toString(), keyboard: Keyboard.NUMERIC, - row: 4, + row: 5, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4880,23 +4903,31 @@ let createWorldMenu = () => MPSwitch, ui.createLatexLabel ({ - text: getLoc('labelMaxCharsPerTick'), + text: getLoc('debugCamPath'), row: 4, column: 0, verticalOptions: LayoutOptions.CENTER }), + DCPSwitch, + ui.createLatexLabel + ({ + text: getLoc('labelMaxCharsPerTick'), + row: 5, + column: 0, + verticalOptions: LayoutOptions.CENTER + }), MCPTEntry, ui.createLatexLabel ({ text: getLoc('labelInternalState'), - row: 5, + row: 6, column: 0, verticalOptions: LayoutOptions.CENTER }), ui.createButton ({ text: getLoc('btnClipboard'), - row: 5, + row: 6, column: 1, heightRequest: 40, onClicked: () => @@ -4928,6 +4959,9 @@ let createWorldMenu = () => camMeasurer.reset(); } measurePerformance = tmpMP; + if(tmpDCP != debugCamPath) + renderer.reset(); + debugCamPath = tmpDCP; maxCharsPerTick = tmpMCPT; menu.hide(); } @@ -4948,6 +4982,7 @@ var getInternalState = () => JSON.stringify tickDelayMode: tickDelayMode, resetLvlOnConstruct: resetLvlOnConstruct, measurePerformance: measurePerformance, + debugCamPath: debugCamPath, maxCharsPerTick: maxCharsPerTick, renderer: { @@ -5010,6 +5045,8 @@ var setInternalState = (stateStr) => resetLvlOnConstruct = state.resetLvlOnConstruct; if('measurePerformance' in state) measurePerformance = state.measurePerformance; + if('debugCamPath' in state) + debugCamPath = state.debugCamPath; if('maxCharsPerTick' in state) maxCharsPerTick = state.maxCharsPerTick; @@ -5173,7 +5210,13 @@ var getTertiaryEquation = () => return renderer.stateString; } -var get3DGraphPoint = () => renderer.cursor; +var get3DGraphPoint = () => +{ + if(debugCamPath) + return -renderer.camera; + + return renderer.cursor; +} var get3DGraphTranslation = () => { From 3ef9ae9d806b62cb1126618b8211f25b671ddee5 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 23 Jan 2023 03:00:34 +0900 Subject: [PATCH 10/94] Changed default seed to 0 again; Re-added WIP parametric implementation --- TODO.md | 7 +- parametric_lsystem.js | 225 ++++++++++++++++++++++++++++++++++++++++++ renderer.js | 4 +- 3 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 parametric_lsystem.js diff --git a/TODO.md b/TODO.md index 7d68763..9db1ee5 100644 --- a/TODO.md +++ b/TODO.md @@ -84,6 +84,7 @@ - Button in LS menu / save menu to switch modes? - Theory settings? - Lemma stages? + - Make `f` move without returning like `F` - Top-down processing priority - Buttons in LS menu to move up down (swap rules) - How to update rule entries? @@ -220,11 +221,11 @@ needs to store two boolean properties `isContextSensitive` and `isParametric`. `Parametric L-systems Renderer`, with a better randomiser lol - Scrapped. Just make a new class. - Strict model format for each symbol - - Array of Vector3s denoting a path of vertices - - Don't write `(0, 0, 0)` at start or end + - Array of Vector3s den 0)` at start or end - Flow: the previous path ended at `(0, 0, 0)` of this path. We'll follow through the model's queue one by one until we reach the end. But we won't - go back to `(0, 0, 0)`, we go forward to the next symbol. This would allow + go back to `(0, 0, 0)`, weoting a path of vertices + - Don't write `(0, 0, go forward to the next symbol. This would allow us to draw different lengthed lines if we defined the model to include only one point: `(L, 0, 0)`. But... that would delay processing by one turn? - Well, we can't include the tilde then. Hardcoded models can still be a thing diff --git a/parametric_lsystem.js b/parametric_lsystem.js new file mode 100644 index 0000000..0ea2b01 --- /dev/null +++ b/parametric_lsystem.js @@ -0,0 +1,225 @@ +import { MathExpression } from "../api/MathExpression"; + +const TRIM_SP = /\s+/g; +const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; +const LS_SYMBOL = /(.)(\(([^\)]+)\))?/g; +const LS_CONTEXT = +/((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; + +class ParametricLSystem +{ + constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, + ignoreList = '', models = {}) + { + // User input + this.userInput = + { + axiom: axiom, + rules: this.getPurged(rules), + turnAngle: turnAngle, + seed: seed, + ignoreList: ignoreList, + models: models + }; + // Use regex magic to separate + let axiomMatches = [...axiom.replace(TRIM_SP, '').matchAll(LS_SYMBOL)]; + this.axiom = ''; + this.axiomParams = []; + // let axiomReassembly = ''; + for(let i = 0; i < axiomMatches.length; ++i) + { + // axiomReassembly += axiomMatches[i][0]; + this.axiom += axiomMatches[i][1]; + this.axiomParams.push(axiomMatches[i][3]); + // Indices 1 and 3 are symbol and parameters + } + // console.log(this.axiom); + // console.log(axiomReassembly); + for(let i = 0; i < this.axiomParams.length; ++i) + { + if(typeof this.axiomParams[i] == 'undefined') + continue; + + let params = this.axiomParams[i].split(','); + // console.log(params) + for(let j = 0; j < params.length; ++j) + params[j] = MathExpression.parse(params[j]).evaluate(); + this.axiomParams[i] = params; + // Maybe leave them at BigNumber? + } + // console.log(this.axiomParams.toString()); + // This is a context ignore list. Turtle ignores all except for Ff. + this.ignoreList = new Set('FfT+-&^\\/|{.}%'); + + let rulesMatches = []; + for(let i = 0; i < rules.length; ++i) + { + rulesMatches.push([...rules[i].replace(TRIM_SP, '').match( + LS_RULE)]); + // console.log(rulesMatches[i].toString()); + // Indices 1, 2, 4+4k, 6+4k are context, condition, derivation and + // probability respectively + } + this.rules = new Map(); + for(let i = 0; i < rulesMatches.length; ++i) + { + // [i][1]: context + let contextMatch = [...rulesMatches[i][1].match(LS_CONTEXT)]; + // Indices 2, 4, 6, 8, 10, 12 are the symbols and parameters of + // left, middle, and right respectively + if(typeof contextMatch[6] === 'undefined') + continue; + + let tmpRule = {}; + let ruleParams = {}; + { + let params = contextMatch[8].split(','); + for(let j = 0; j < params.length; ++j) + ruleParams[params[j]] = ['m', j]; + } + tmpRule.left = contextMatch[2]; + if(tmpRule.left) + { + let params = contextMatch[4].split(','); + for(let j = 0; j < params.length; ++j) + ruleParams[params[j]] = ['l', j]; + } + tmpRule.right = contextMatch[10]; + { + let params = contextMatch[12].split(','); + for(let j = 0; j < params.length; ++j) + { + ruleParams[params[j]] = ['r', j]; + } + } + tmpRule.params = ruleParams; + /* + ruleParams = { + 'a': ['m', 0], + 'b': ['l', 0], + 'c': ['r', 0], + 'd': ['r', 1] + }; + */ + tmpRule.paramMap = (v, l, m, r) => + { + let pos = tmpRule.params[v][0]; + switch(pos) + { + case 'm': + return m[tmpRule.params[v][1]]; + case 'l': + return l[tmpRule.params[v][1]]; + case 'r': + return r[tmpRule.params[v][1]]; + } + // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) + } + + // [i][2]: condition + tmpRule.condition = MathExpression.parse(rulesMatches[i][2]); + + // let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t==0 = [+(30)G]F/(180)A(2):0.5, [-(30)G]F\(180)A(2):0.5']); + // [i][4+4k]: derivation(s) + // [i][6+4k]: probability + + } + + /* Probably will not allow multi-line stochastics this time.*/ + let rules = + { + 'A': + [ + { // B(b) < A(a) > C(c, d) + left: 'B', + right: 'C', + paramMap: (v, l, m, r) => + { + let result = + { + 'a': m[0], + 'b': l[0], + 'c': r[0], + 'd': r[1] + }; + return result[v]; + }, + condition: 'c + d > 0', + derivations: + [ + 'AF+-', + 'ABC-+' + ], + derivParams: // these are MathExpressions too + [ + ['a', '1', '137.5', undefined], + ['a + 1', 'b + 1', ['c + 1', 'd'], undefined, '137.5'] + ], + prob: // so are these + [ // Weighted system, sum has to be within 1 + '0.5 + a', + 'one' + ] + }, + { + // ... + cond: true, + // ... + } + ] + }; + } + + getAncestree(sequence) + { + // Scanning behaviour should be very similar to renderer drawing. + let stack = []; + let idxStack = []; + let ancestors = []; + let children = []; + for(let i = 0; i < sequence.length; ++i) + { + switch(sequence[i]) + { + case ' ': + log('Blank space detected.') + break; + case '[': + idxStack.push(stack.length); + break; + case ']': + if(stack.length == 0) + { + log('You\'ve clearly made a bracket error.'); + break; + } + while(stack.length > idxStack[idxStack.length - 1]) + stack.pop(); + + idxStack.pop(); + break; + default: + let ignored = this.ignoreList.has(sequence[i]); + if(ignored) + break; + + if(stack.length > 0) + { + let ancIdx = stack[stack.length - 1]; + ancestors[i] = ancIdx; + if(typeof children[ancIdx] === 'undefined') + children[ancIdx] = []; + children[ancIdx].push(i); + } + + stack.push(i); + break; + } + } + return { + ancestors: ancestors, + children: children + }; + // Tested this out on Chrome console, it worked. + } +} \ No newline at end of file diff --git a/renderer.js b/renderer.js index d8bb873..7857e70 100644 --- a/renderer.js +++ b/renderer.js @@ -1108,10 +1108,10 @@ class LSystem * @param {string} axiom the starting sequence. * @param {string[]} rules the production rules. * @param {number} turnAngle (default: 30) the turning angle (in degrees). - * @param {number} seed (default: 1752) the seed used for stochastic + * @param {number} seed (default: 0) the seed used for stochastic * systems. */ - constructor(axiom = '', rules = [], turnAngle = 0, seed = 1752, + constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, ignoreList = '', models = {}) { this.userInput = From f737025739695d4d809a65de69cf5b84c5f8edfc Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 25 Jan 2023 23:34:32 +0900 Subject: [PATCH 11/94] Added clear buttons to various entries --- TODO.md | 6 +++++- parametric_lsystem.js | 10 +++++++--- renderer.js | 9 +++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/TODO.md b/TODO.md index 9db1ee5..c03bc70 100644 --- a/TODO.md +++ b/TODO.md @@ -38,6 +38,10 @@ - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? - [ ] Remove the backtrack list option - Also, backtrack on the way back and forward needs different lists? +- [ ] Revamp sequence menu + - Level 0: 10 chars (`View`) + - Classic LS: displays the entire string in a label + - Parametric LS: displays symbols and parameters side by side, one symbol/row - [ ] Turning angles - [ ] Formula expressions allow shenanigans such as `360/7`, mostly @@ -51,7 +55,7 @@ - [x] Allow both modes to exist (implemented in Classic) - [ ] Investigate tropism (capital T) -- [ ] Investigate sunlight heading command (`$`) +- [ ] Investigate sunlight heading (heliotropism) (`$`) - [ ] Change how models work: - Stochastic models are no longer available diff --git a/parametric_lsystem.js b/parametric_lsystem.js index 0ea2b01..d35ef4e 100644 --- a/parametric_lsystem.js +++ b/parametric_lsystem.js @@ -49,7 +49,7 @@ class ParametricLSystem } // console.log(this.axiomParams.toString()); // This is a context ignore list. Turtle ignores all except for Ff. - this.ignoreList = new Set('FfT+-&^\\/|{.}%'); + this.ignoreList = new Set('FfT+-&^\\/|{.}%~$'); let rulesMatches = []; for(let i = 0; i < rules.length; ++i) @@ -93,7 +93,7 @@ class ParametricLSystem } } tmpRule.params = ruleParams; - /* + /* // O(1) lookup with O(n) memory, I think ruleParams = { 'a': ['m', 0], 'b': ['l', 0], @@ -123,10 +123,14 @@ class ParametricLSystem // [i][4+4k]: derivation(s) // [i][6+4k]: probability + // Finally, push rule + if(!this.rules.has(contextMatch[6])) + this.rules.set(contextMatch[6], []); + this.rules.get(contextMatch[6]).push(tmpRule); } /* Probably will not allow multi-line stochastics this time.*/ - let rules = + let exampleRules = { 'A': [ diff --git a/renderer.js b/renderer.js index 7857e70..5907a6b 100644 --- a/renderer.js +++ b/renderer.js @@ -33,6 +33,7 @@ import { Thickness } from '../api/ui/properties/Thickness'; import { TouchType } from '../api/ui/properties/TouchType'; import { Localization } from '../api/Localization'; import { MathExpression } from '../api/MathExpression'; +import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; var id = 'L_systems_renderer'; var getName = (language) => @@ -3402,6 +3403,7 @@ let createSystemMenu = () => text: tmpAxiom, row: 0, column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpAxiom = nt; @@ -3427,6 +3429,7 @@ let createSystemMenu = () => ruleEntries.push(ui.createEntry ({ text: tmpRules[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpRules[i] = nt; @@ -3456,6 +3459,7 @@ let createSystemMenu = () => ruleEntries.push(ui.createEntry ({ text: '', + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpRules[i] = nt; @@ -3812,6 +3816,7 @@ let createSystemClipboardMenu = (values) => let sysEntry = ui.createEntry ({ text: tmpSys, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpSys = nt; @@ -3871,6 +3876,7 @@ let createStateClipboardMenu = (values) => let sysEntry = ui.createEntry ({ text: tmpState, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpState = nt; @@ -4022,6 +4028,7 @@ let createViewMenu = (title) => text: tmpAxiom, row: 0, column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpAxiom = nt; @@ -4049,6 +4056,7 @@ let createViewMenu = (title) => ruleEntries.push(ui.createEntry ({ text: tmpRules[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpRules[i] = nt; @@ -4078,6 +4086,7 @@ let createViewMenu = (title) => ruleEntries.push(ui.createEntry ({ text: '', + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpRules[i] = nt; From 0d1c7b6c55380497213e38eba0345a3be0b8b2fa Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 29 Jan 2023 17:33:20 +0900 Subject: [PATCH 12/94] Added a minimum size to menu buttons --- renderer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renderer.js b/renderer.js index 5907a6b..50662e6 100644 --- a/renderer.js +++ b/renderer.js @@ -87,7 +87,7 @@ let menuLang = Localization.language; let savedSystems = new Map(); -const DEFAULT_BUTTON_HEIGHT = ui.screenHeight * 0.055; +const DEFAULT_BUTTON_HEIGHT = Math.max(ui.screenHeight * 0.055, 48); const ENTRY_CHAR_LIMIT = 5000; const locStrings = { @@ -2821,7 +2821,7 @@ var getUpgradeListDelegate = () => renderer.constructSystem = tmpSystem; tmpSystem = null; } - }, ui.screenHeight * 0.05); + }, Math.max(ui.screenHeight * 0.05, 44)); resumeButton.content.horizontalOptions = LayoutOptions.CENTER; resumeButton.isVisible = () => tmpSystem ? true : false; resumeButton.margin = new Thickness(0, 0, 0, 2); From 4c2c98a0c997735c468f08bdc4feeae4b35cf287 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 11 Feb 2023 18:52:58 +0700 Subject: [PATCH 13/94] Changed wording of T9 to avoid spoilers --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d391c54..c68b673 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Navigate to [`renderer.js`](./renderer.js) and click on `Raw`. You will be delivered to this theory's raw code. Copy the page's URL. Then, access the custom theory panel within the game (unlocked after finishing -the Convergence Test) then enter the picking menu. Press the `+` symbol and +T9, the last theory) then enter the picking menu. Press the `+` symbol and paste the URL in. ## Screenshots From 8d045376b9ca26e8ed155d2af41325efacfac299 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 12 Feb 2023 16:45:09 +0700 Subject: [PATCH 14/94] Implemented cooldown logic for regular drawing --- TODO.md | 4 +-- renderer.js | 96 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 77 insertions(+), 23 deletions(-) diff --git a/TODO.md b/TODO.md index c03bc70..faa8b1d 100644 --- a/TODO.md +++ b/TODO.md @@ -61,7 +61,7 @@ - Stochastic models are no longer available - Instead define stochastic rules for the actual symbol instead, pre-model - Models are no longer recursively derived - - This will remove their permanence + - This will remove their permanence and increase performance - Instead, they will be processed by the renderer using a queue - The processing code will be positioned below (?) the main renderer loop - Almost the exact same code as main loop, but with `~` queue controls @@ -103,7 +103,7 @@ - [ ] Context sensitivity - `b < a > c → aa` - Parametric: **context ignore** replaces regular ignore list in LS menu - - Skipping over brackets? hmm, difficult + - [x] Skipping over brackets? hmm, difficult - Mapping vertex depth, can be checked by tracking brackets and stacks. - Actually it's pretty hard to make an algo for this, because it could be: `01[23[456][45][4]][234]2`, and you would have to find all the 2s if you diff --git a/renderer.js b/renderer.js index 50662e6..af0542d 100644 --- a/renderer.js +++ b/renderer.js @@ -71,7 +71,7 @@ Warning: v0.20 might break your internal state. Be sure to back it up, and ` + var authors = 'propfeds#5988\n\nThanks to:\nSir Gilles-Philippe Paillé, ' + 'for providing help with quaternions\nskyhigh173#3120, for ' + 'suggesting clipboard and JSON internal state formatting'; -var version = 0.211; +var version = 1; let time = 0; let page = 0; @@ -93,13 +93,14 @@ const locStrings = { en: { - versionName: 'v0.21.1', + versionName: 'v1.0, Work in Progress', welcomeSystemName: 'Arrow', welcomeSystemDesc: 'Welcome to L-systems Renderer!', equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', equationOverlay: '{0}\n\n{1}', - rendererLoading: '\\begin{{matrix}}Loading...&\\text{{Lv. {0}}}&({1}\\text{{ chars}})\\end{{matrix}}', + rendererLoading: `\\begin{{matrix}}Loading...&\\text{{Lv. {0}}}&({1} +\\text{{ chars}})\\end{{matrix}}`, currencyTime: ' (elapsed)', @@ -184,7 +185,8 @@ const locStrings = labelApplyCamera: 'Applies static camera: ', menuClipboard: 'Clipboard Menu', - labelEntryCharLimit: 'Warning: This entry has been capped at {0} characters. Proceed with caution.', + labelEntryCharLimit: `Warning: This entry has been capped at {0} ` + + `characters. Proceed with caution.`, menuNaming: 'Save System', labelName: 'Title: ', @@ -1551,6 +1553,8 @@ class Renderer * @public don't touch this. */ this.idxStack = []; + this.models = []; + this.mdi = []; /** * @type {number} the current index of the sequence. * @public don't know. @@ -1561,6 +1565,7 @@ class Renderer * @public */ this.elapsed = 0; + this.cooldown = 0; /** * @type {Vector3} the last tick's camera position. * @public didn't tell you so. @@ -1646,6 +1651,7 @@ class Renderer this.stack = []; this.idxStack = []; this.i = 0; + this.cooldown = 0; this.polygonMode = 0; if(clearGraph) { @@ -1839,6 +1845,20 @@ class Renderer let j, t; for(j = 0; j < 2; ++j) { + if(this.cooldown > 0) + --this.cooldown; + + if(this.models.length) + { + for(; this.mdi[this.mdi.length - 1] < + this.models[this.models.length - 1].length; + ++this.mdi[this.mdi.length - 1]) + { + // Process it like the regular switch + continue; + } + continue; + } for(; this.i < this.levels[this.lv].length; ++this.i) { switch(this.levels[this.lv][this.i]) @@ -1848,31 +1868,48 @@ class Renderer break; case '+': this.ori = this.system.rotations.get('+').mul(this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '-': this.ori = this.system.rotations.get('-').mul(this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '&': this.ori = this.system.rotations.get('&').mul(this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '^': this.ori = this.system.rotations.get('^').mul(this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '\\': this.ori = this.system.rotations.get('\\').mul( this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '/': this.ori = this.system.rotations.get('/').mul(this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '|': this.ori = ZAxisQuat.mul(this.ori); + if(this.quickDraw) + this.cooldown = 1; break; case '[': this.idxStack.push(this.stack.length); this.stack.push([this.state, this.ori]); break; case ']': + if(this.cooldown > 0) + return; + if(this.stack.length == 0) { log('You\'ve clearly made a bracket error.'); @@ -1889,10 +1926,14 @@ class Renderer if(this.hesitate && this.polygonMode <= 0) { ++this.i; + this.cooldown = 1; return; } else + { + this.cooldown = 1; break; + } } if(this.polygonMode <= 0) return; @@ -1912,37 +1953,43 @@ class Renderer break; case '.': if(this.polygonMode <= 0) - log('You\'re making a polygon outside of one?'); + log('You\'re cannot register a vertex outside of ' + + 'polygon drawing.'); else ++this.i; - return; default: + if(this.cooldown > 0) + return; + let ignored = this.system.ignoreList.has( this.levels[this.lv][this.i]); - if(ignored) - { - if(this.quickDraw && this.stack.length > 0 && - this.ori === this.stack[this.stack.length - 1][1]) - this.stack.push([this.state, this.ori]); - break; - } - - if(!this.quickBacktrack) + if(this.hesitate && + this.levels[this.lv][this.i + 1] == ']') + this.cooldown = 1; + // if(ignored) + // { + // if(this.quickDraw && this.stack.length > 0 && + // this.ori === this.stack[this.stack.length - 1][1]) + // this.stack.push([this.state, this.ori]); + // break; + // } + + if(!this.quickBacktrack && this.stack.length == 0 || + (this.stack.length > 0 && + this.state !== this.stack[this.stack.length - 1][0])) this.stack.push([this.state, this.ori]); - this.forward(); + if(!this.ignored) + this.forward(); let breakAhead = this.backtrackList.has( this.levels[this.lv][this.i + 1]); if(this.quickBacktrack && breakAhead) this.stack.push([this.state, this.ori]); - - if(this.quickDraw && !breakAhead && - (this.quickBacktrack || this.stack.length > 0 && - this.ori === this.stack[this.stack.length - 1][1]) && - this.i < this.levels[this.lv].length - 1) + + if(this.quickDraw) break; else if(this.polygonMode <= 0) { @@ -1951,6 +1998,13 @@ class Renderer } else break; + + // if(this.quickDraw && !breakAhead && + // (this.quickBacktrack || this.stack.length > 0 && + // this.ori === this.stack[this.stack.length - 1][1]) && + // this.i < this.levels[this.lv].length - 1) + // break; + } } if(!this.backtrackTail || this.stack.length == 0) From 0d2790408d3ab9934dd54ef4c9077c5f9eb85d95 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 12 Feb 2023 21:54:47 +0700 Subject: [PATCH 15/94] Fixed hesitation not working; Increased time measurement accuracy --- renderer.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/renderer.js b/renderer.js index af0542d..1c4c24c 100644 --- a/renderer.js +++ b/renderer.js @@ -1656,6 +1656,7 @@ class Renderer if(clearGraph) { this.elapsed = 0; + time = 0; theory.clearGraph(); } theory.invalidateTertiaryEquation(); @@ -1846,7 +1847,10 @@ class Renderer for(j = 0; j < 2; ++j) { if(this.cooldown > 0) + { --this.cooldown; + return; + } if(this.models.length) { @@ -1908,7 +1912,10 @@ class Renderer break; case ']': if(this.cooldown > 0) + { + --this.cooldown; return; + } if(this.stack.length == 0) { @@ -1960,7 +1967,10 @@ class Renderer return; default: if(this.cooldown > 0) + { + --this.cooldown; return; + } let ignored = this.system.ignoreList.has( this.levels[this.lv][this.i]); @@ -1968,6 +1978,7 @@ class Renderer if(this.hesitate && this.levels[this.lv][this.i + 1] == ']') this.cooldown = 1; + // if(ignored) // { // if(this.quickDraw && this.stack.length > 0 && @@ -1976,9 +1987,11 @@ class Renderer // break; // } - if(!this.quickBacktrack && this.stack.length == 0 || + let moved = this.stack.length == 0 || (this.stack.length > 0 && - this.state !== this.stack[this.stack.length - 1][0])) + this.state !== this.stack[this.stack.length - 1][0]); + + if(!this.quickBacktrack && moved) this.stack.push([this.state, this.ori]); if(!this.ignored) From 98747dd31ca7f8c3f35e052523285122d6ba4cbe Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 12 Feb 2023 21:57:08 +0700 Subject: [PATCH 16/94] Updated guide entry of 0.3 tick length --- renderer.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/renderer.js b/renderer.js index 1c4c24c..a2babd6 100644 --- a/renderer.js +++ b/renderer.js @@ -688,16 +688,9 @@ Now, while tickspeed might be more of a familiar concept to the idle ` + `of leaves and flowers, this speed feels at home with plant modelling. It ` + `offers a good compromise between speed and precision, although even 0.1 ` + `would be too slow for large scale figures. -- 0.3 sec: with loose slanted lines, tick length 0.3 is generally is a solid ` + -`option for any figure requiring some playfulness. However, it is fairly ` + -`unknown that tick length 0.3 holds the most powerful secret in this whole ` + -`universe: it can truly create the straightest lines out of this family. As ` + -`always, some tricks are needed here: - + First, create an anchor at this speed by holding -. - + Switch back and forth between levels to reset the turtle. - + Activate the anchor by holding +, and marvel at the beauty of it all. -Note: This trick is not guaranteed to work every time, so it is advised to ` + -`try again multiple times. +- 0.3 sec: Tick length 0.3 holds the most powerful secret in this whole ` + +`universe: it can create the straightest lines out of this family. No ` + +`trickery needed! - 0.4 sec: this one can really spice the figure up by tying up cute knots ` + `between corners occasionally, mimicking leaf shapes on a tree. - 0.5 sec: with slight occasional overshoots, tick length 0.5 proves itself ` + From 9443f7e5c26e02f7fd51c41e3089c6a29747518f Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 01:21:10 +0700 Subject: [PATCH 17/94] Revamped logic for quick backtrack --- TODO.md | 14 ++++++++------ renderer.js | 18 +++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index faa8b1d..be9995d 100644 --- a/TODO.md +++ b/TODO.md @@ -23,16 +23,18 @@ - [ ] Compress internal state? LZW, LZP - [ ] Ask Gilles about changing the spline used in 3D graph - [ ] How about locking rotation? (for Navier Stokes) +- [ ] Screen adaptive button sizes (40, 44, 48) plus other stuff maybe - [ ] Rework quickdraw / BT logic - - [ ] Add a cooldown system + - [ ] Progress: Regular & backtrack done, quickdraw remaining + - [x] Add a cooldown system - [ ] Proposal: remove idxStack and instead turn stack into a 2D array - - [ ] Hesitate on both ends if hesitation is on? - - [ ] When just pushing onto the stack normally (on an F point), don't push + - [x] Hesitate on both ends if hesitation is on? + - [x] When just pushing onto the stack normally (on an F point), don't push if the position hasn't changed, because the orientation doesn't matter if the stack point isn't a `[` bracket point - - [ ] If the `]]]]]` are stacked, hesitation time is massive - - [ ] If the stack hasn't detected any movement, just don't do anything - - [ ] Hesitate only when the turtle was moved compared to last time? + - [x] If the `]]]]]` are stacked, hesitation time is massive + - [x] If the stack hasn't detected any movement, just don't do anything + - [x] Hesitate only when the turtle was moved compared to last time? - [ ] Does it work with ignored? (because of the ignored stuff) - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? diff --git a/renderer.js b/renderer.js index a2babd6..74bef89 100644 --- a/renderer.js +++ b/renderer.js @@ -1836,7 +1836,7 @@ class Renderer Don't worry, it'll not run forever. This is just to prevent the renderer from hesitating for 1 tick every loop. */ - let j, t; + let j, t, moved; for(j = 0; j < 2; ++j) { if(this.cooldown > 0) @@ -1916,6 +1916,9 @@ class Renderer break; } + moved = this.state !== + this.stack[this.stack.length - 1][0]; + t = this.stack.pop(); this.state = t[0]; this.ori = t[1]; @@ -1923,7 +1926,7 @@ class Renderer this.idxStack[this.idxStack.length - 1]) { this.idxStack.pop(); - if(this.hesitate && this.polygonMode <= 0) + if(this.hesitate && this.polygonMode <= 0 && moved) { ++this.i; this.cooldown = 1; @@ -1931,7 +1934,8 @@ class Renderer } else { - this.cooldown = 1; + if(moved) + this.cooldown = 1; break; } } @@ -1968,7 +1972,7 @@ class Renderer let ignored = this.system.ignoreList.has( this.levels[this.lv][this.i]); - if(this.hesitate && + if(this.hesitate && !this.quickBacktrack && this.levels[this.lv][this.i + 1] == ']') this.cooldown = 1; @@ -1980,9 +1984,9 @@ class Renderer // break; // } - let moved = this.stack.length == 0 || - (this.stack.length > 0 && - this.state !== this.stack[this.stack.length - 1][0]); + moved = this.stack.length == 0 || + (this.stack.length > 0 && this.state !== + this.stack[this.stack.length - 1][0]); if(!this.quickBacktrack && moved) this.stack.push([this.state, this.ori]); From 62856e85476390575bfc013bae011e475988f62b Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 14:34:04 +0700 Subject: [PATCH 18/94] Fixed quick BT forcing hesitation --- TODO.md | 3 ++- renderer.js | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/TODO.md b/TODO.md index be9995d..dc0abf4 100644 --- a/TODO.md +++ b/TODO.md @@ -26,12 +26,13 @@ - [ ] Screen adaptive button sizes (40, 44, 48) plus other stuff maybe - [ ] Rework quickdraw / BT logic - [ ] Progress: Regular & backtrack done, quickdraw remaining + - [ ] Test suite: Arrow, Cantor, Snowflake - [x] Add a cooldown system - - [ ] Proposal: remove idxStack and instead turn stack into a 2D array - [x] Hesitate on both ends if hesitation is on? - [x] When just pushing onto the stack normally (on an F point), don't push if the position hasn't changed, because the orientation doesn't matter if the stack point isn't a `[` bracket point + - [x] Issue: quick BT still forces hesitation on the way forward - [x] If the `]]]]]` are stacked, hesitation time is massive - [x] If the stack hasn't detected any movement, just don't do anything - [x] Hesitate only when the turtle was moved compared to last time? diff --git a/renderer.js b/renderer.js index 74bef89..aa9c4f9 100644 --- a/renderer.js +++ b/renderer.js @@ -1439,12 +1439,12 @@ class Renderer * straight lines on the way forward. * @param {boolean} quickBacktrack (default: false) whether to skip through * straight lines on the way backward. - * @param {string} backtrackList (default: '+-&^\\/|[]') a list of symbols - * to act as stoppers for backtracking. + * @param {string} backtrackList (default: '+-&^\\/|[') a list of symbols to + * act as stoppers for backtracking. */ constructor(system, figureScale = 1, cameraMode = 0, camX = 0, camY = 0, camZ = 0, followFactor = 0.15, loopMode = 0, upright = false, - quickDraw = false, quickBacktrack = false, backtrackList = '+-&^\\/|[]', + quickDraw = false, quickBacktrack = false, backtrackList = '+-&^\\/|[', loadModels = true, backtrackTail = false, hesitate = true) { /** @@ -1971,9 +1971,11 @@ class Renderer let ignored = this.system.ignoreList.has( this.levels[this.lv][this.i]); + let breakAhead = this.backtrackList.has( + this.levels[this.lv][this.i + 1]); + let btAhead = this.levels[this.lv][this.i + 1] == ']'; - if(this.hesitate && !this.quickBacktrack && - this.levels[this.lv][this.i + 1] == ']') + if(this.hesitate && btAhead) this.cooldown = 1; // if(ignored) @@ -1991,11 +1993,9 @@ class Renderer if(!this.quickBacktrack && moved) this.stack.push([this.state, this.ori]); - if(!this.ignored) + if(!ignored) this.forward(); - let breakAhead = this.backtrackList.has( - this.levels[this.lv][this.i + 1]); if(this.quickBacktrack && breakAhead) this.stack.push([this.state, this.ori]); From fdd98bd0280e996e401be535fbe8fb20b9298830 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 16:34:11 +0700 Subject: [PATCH 19/94] Fixed backtrack not working with quickdraw --- renderer.js | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/renderer.js b/renderer.js index aa9c4f9..53f4890 100644 --- a/renderer.js +++ b/renderer.js @@ -1839,6 +1839,7 @@ class Renderer let j, t, moved; for(j = 0; j < 2; ++j) { + log(`${Math.round(this.elapsed)}, ${this.i} ${this.levels[this.lv][this.i]} (-${this.cooldown}): ${this.stack.length} stacked`) if(this.cooldown > 0) { --this.cooldown; @@ -1865,39 +1866,25 @@ class Renderer break; case '+': this.ori = this.system.rotations.get('+').mul(this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '-': this.ori = this.system.rotations.get('-').mul(this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '&': this.ori = this.system.rotations.get('&').mul(this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '^': this.ori = this.system.rotations.get('^').mul(this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '\\': this.ori = this.system.rotations.get('\\').mul( this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '/': this.ori = this.system.rotations.get('/').mul(this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '|': this.ori = ZAxisQuat.mul(this.ori); - if(this.quickDraw) - this.cooldown = 1; break; case '[': this.idxStack.push(this.stack.length); @@ -1973,11 +1960,15 @@ class Renderer this.levels[this.lv][this.i]); let breakAhead = this.backtrackList.has( this.levels[this.lv][this.i + 1]); - let btAhead = this.levels[this.lv][this.i + 1] == ']'; + let btAhead = this.levels[this.lv][this.i + 1] == ']' || + this.i == this.levels[this.lv].length - 1; if(this.hesitate && btAhead) this.cooldown = 1; + if(this.quickDraw && breakAhead) + this.cooldown = 1; + // if(ignored) // { // if(this.quickDraw && this.stack.length > 0 && @@ -1999,7 +1990,7 @@ class Renderer if(this.quickBacktrack && breakAhead) this.stack.push([this.state, this.ori]); - if(this.quickDraw) + if(this.quickDraw && !btAhead) break; else if(this.polygonMode <= 0) { From b9a3c9348b9085513ca27288aa7da8027f7b643d Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 17:48:36 +0700 Subject: [PATCH 20/94] Fixed RNG nextFloat() not working --- TODO.md | 11 ++++++++--- renderer.js | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/TODO.md b/TODO.md index dc0abf4..2074342 100644 --- a/TODO.md +++ b/TODO.md @@ -10,10 +10,10 @@ - [ ] Arrange coding streams - Ask if people would be interested +- [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Add more comments in the code - [ ] Update docstrings -- [x] Turtle controls summary page in guide - [ ] A more detailed README - Showcases the power of tickspeed and stroke options - Discusses limitations of the game @@ -24,9 +24,13 @@ - [ ] Ask Gilles about changing the spline used in 3D graph - [ ] How about locking rotation? (for Navier Stokes) - [ ] Screen adaptive button sizes (40, 44, 48) plus other stuff maybe +- [ ] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end - [ ] Rework quickdraw / BT logic - - [ ] Progress: Regular & backtrack done, quickdraw remaining - - [ ] Test suite: Arrow, Cantor, Snowflake + - Progress: Regular, backtrack, quickdraw done + - Test suites: + - [x] Arrow (8/8) + - [x] Cantor (8/8) + - [ ] Snowflake (0/8) - still wasting time on ignored shits - [x] Add a cooldown system - [x] Hesitate on both ends if hesitation is on? - [x] When just pushing onto the stack normally (on an F point), don't push @@ -41,6 +45,7 @@ - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? - [ ] Remove the backtrack list option - Also, backtrack on the way back and forward needs different lists? +- [x] Turtle controls summary page in guide - [ ] Revamp sequence menu - Level 0: 10 chars (`View`) - Classic LS: displays the entire string in a label diff --git a/renderer.js b/renderer.js index 53f4890..ac5cf27 100644 --- a/renderer.js +++ b/renderer.js @@ -940,6 +940,8 @@ class Xorshift constructor(seed = 1752) { this.state = seed; + this.mod = 0x100000000; + // 0xffff ffff } /** * Returns a random integer within [0, 2^32) probably. @@ -962,16 +964,13 @@ class Xorshift */ nextFloat(includeEnd = false) { - if(includeEnd) - { - // [0, 1] - return this.nextInt / (this.m - 1); - } - else - { - // [0, 1) - return this.nextInt / this.m; - } + let result; + if(includeEnd) // [-1, 1] + result = this.nextInt / (this.mod - 1); + else // [-1, 1) + result = this.nextInt / this.mod; + + return (result + 1) / 2; } /** * Returns a random integer within a range of [start, end). @@ -1839,7 +1838,9 @@ class Renderer let j, t, moved; for(j = 0; j < 2; ++j) { - log(`${Math.round(this.elapsed)}, ${this.i} ${this.levels[this.lv][this.i]} (-${this.cooldown}): ${this.stack.length} stacked`) + // log(`${Math.round(this.elapsed)}, ${this.i} ` + + // `${this.levels[this.lv][this.i]} (-${this.cooldown}): ` + + // `${this.stack.length} stacked`) if(this.cooldown > 0) { --this.cooldown; @@ -1913,16 +1914,15 @@ class Renderer this.idxStack[this.idxStack.length - 1]) { this.idxStack.pop(); - if(this.hesitate && this.polygonMode <= 0 && moved) + if(moved) + this.cooldown = 1; + if(this.hesitate && this.polygonMode <= 0) { ++this.i; - this.cooldown = 1; return; } else { - if(moved) - this.cooldown = 1; break; } } @@ -1981,7 +1981,7 @@ class Renderer (this.stack.length > 0 && this.state !== this.stack[this.stack.length - 1][0]); - if(!this.quickBacktrack && moved) + if(!this.quickBacktrack && moved && !ignored) this.stack.push([this.state, this.ori]); if(!ignored) From db8828e48f10de5766f8d482c8f4bdc3b2304810 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 18:48:08 +0700 Subject: [PATCH 21/94] Split hesitation into two options --- renderer.js | 108 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 36 deletions(-) diff --git a/renderer.js b/renderer.js index ac5cf27..63ac7df 100644 --- a/renderer.js +++ b/renderer.js @@ -176,6 +176,8 @@ const locStrings = labelQuickdraw: '* Quickdraw (unstable): ', labelQuickBT: '* Quick backtrack: ', labelHesitate: '* Stutter on backtrack: ', + labelHesitateApex: '* Stutter at apex: ', + labelHesitateNode: '* Stutter at node: ', labelBTList: '* Backtrack list: ', labelRequireReset: '* Modifying this setting will require a reset.', @@ -1444,7 +1446,8 @@ class Renderer constructor(system, figureScale = 1, cameraMode = 0, camX = 0, camY = 0, camZ = 0, followFactor = 0.15, loopMode = 0, upright = false, quickDraw = false, quickBacktrack = false, backtrackList = '+-&^\\/|[', - loadModels = true, backtrackTail = false, hesitate = true) + loadModels = true, backtrackTail = false, hesitateApex = true, + hesitateNode = true) { /** * @type {LSystem} the L-system being handled. @@ -1504,7 +1507,8 @@ class Renderer this.backtrackList = new Set(backtrackList); this.loadModels = loadModels; this.backtrackTail = backtrackTail; - this.hesitate = hesitate; + this.hesitateApex = hesitateApex; + this.hesitateNode = hesitateNode; /** * @type {Vector3} the cursor's position. * @public but shouldn't be. @@ -1673,12 +1677,14 @@ class Renderer */ configure(figureScale, cameraMode, camX, camY, camZ, followFactor, loopMode, upright, quickDraw, quickBacktrack, backtrackList, loadModels, - backtrackTail, hesitate) + backtrackTail, hesitateApex, hesitateNode) { let requireReset = (figureScale !== this.figScaleStr) || (upright != this.upright) || (quickDraw != this.quickDraw) || (quickBacktrack != this.quickBacktrack) || - (loadModels != this.loadModels) || (hesitate != this.hesitate); + (loadModels != this.loadModels) || + (hesitateApex != this.hesitateApex) || + (hesitateNode != this.hesitateNode); this.figScaleStr = figureScale.toString(); this.figScaleExpr = MathExpression.parse(this.figScaleStr); @@ -1710,7 +1716,8 @@ class Renderer this.backtrackList = btl; this.loadModels = loadModels; this.backtrackTail = backtrackTail; - this.hesitate = hesitate; + this.hesitateApex = hesitateApex; + this.hesitateNode = hesitateNode; if(requireReset) this.reset(); @@ -1916,7 +1923,7 @@ class Renderer this.idxStack.pop(); if(moved) this.cooldown = 1; - if(this.hesitate && this.polygonMode <= 0) + if(this.hesitateNode && this.polygonMode <= 0) { ++this.i; return; @@ -1963,7 +1970,7 @@ class Renderer let btAhead = this.levels[this.lv][this.i + 1] == ']' || this.i == this.levels[this.lv].length - 1; - if(this.hesitate && btAhead) + if(this.hesitateApex && btAhead) this.cooldown = 1; if(this.quickDraw && breakAhead) @@ -2201,7 +2208,7 @@ class Renderer */ toString() { - return`${this.figScaleStr} ${this.cameraMode} ${this.camXStr} ${this.camYStr} ${this.camZStr} ${this.followFactor} ${this.loopMode} ${this.upright ? 1 : 0} ${this.quickDraw ? 1 : 0} ${this.quickBacktrack ? 1 : 0} ${[...this.backtrackList].join('')} ${this.loadModels ? 1 : 0} ${this.backtrackTail ? 1 : 0} ${this.hesitate}`; + return`${this.figScaleStr} ${this.cameraMode} ${this.camXStr} ${this.camYStr} ${this.camZStr} ${this.followFactor} ${this.loopMode} ${this.upright ? 1 : 0} ${this.quickDraw ? 1 : 0} ${this.quickBacktrack ? 1 : 0} ${[...this.backtrackList].join('')} ${this.loadModels ? 1 : 0} ${this.backtrackTail ? 1 : 0} ${this.hesitateApex} ${this.hesitateNode}`; } } @@ -3225,17 +3232,17 @@ let createConfigMenu = () => } } }); - let tmpHes = renderer.hesitate; - let hesLabel = ui.createLatexLabel + let tmpHesA = renderer.hesitateApex; + let hesALabel = ui.createLatexLabel ({ - text: getLoc('labelHesitate'), + text: getLoc('labelHesitateApex'), row: 2, column: 0, verticalOptions: LayoutOptions.CENTER }); - let hesSwitch = ui.createSwitch + let hesASwitch = ui.createSwitch ({ - isToggled: tmpHes, + isToggled: tmpHesA, row: 2, column: 1, horizontalOptions: LayoutOptions.END, @@ -3245,30 +3252,55 @@ let createConfigMenu = () => e.type == TouchType.LONGPRESS_RELEASED) { Sound.playClick(); - tmpHes = !tmpHes; - hesSwitch.isToggled = tmpHes; + tmpHesA = !tmpHesA; + hesASwitch.isToggled = tmpHesA; } } }); - let tmpEXB = [...renderer.backtrackList].join(''); - let EXBLabel = ui.createLatexLabel + let tmpHesN = renderer.hesitateNode; + let hesNLabel = ui.createLatexLabel ({ - text: getLoc('labelBTList'), + text: getLoc('labelHesitateNode'), row: 3, column: 0, verticalOptions: LayoutOptions.CENTER }); - let EXBEntry = ui.createEntry + let hesNSwitch = ui.createSwitch ({ - text: tmpEXB, + isToggled: tmpHesN, row: 3, column: 1, - horizontalTextAlignment: TextAlignment.END, - onTextChanged: (ot, nt) => + horizontalOptions: LayoutOptions.END, + onTouched: (e) => { - tmpEXB = nt; + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpHesN = !tmpHesN; + hesNSwitch.isToggled = tmpHesN; + } } }); + // let tmpEXB = [...renderer.backtrackList].join(''); + // let EXBLabel = ui.createLatexLabel + // ({ + // text: getLoc('labelBTList'), + // row: 3, + // column: 0, + // verticalOptions: LayoutOptions.CENTER + // }); + // let EXBEntry = ui.createEntry + // ({ + // text: tmpEXB, + // row: 3, + // column: 1, + // horizontalTextAlignment: TextAlignment.END, + // onTextChanged: (ot, nt) => + // { + // tmpEXB = nt; + // } + // }); let menu = ui.createPopup ({ @@ -3346,7 +3378,7 @@ let createConfigMenu = () => }), ui.createGrid ({ - // rowDefinitions: [40, 40, 40, 40, 40], + rowDefinitions: [40, 40, 40, 40], columnDefinitions: ['70*', '30*'], children: [ @@ -3366,10 +3398,10 @@ let createConfigMenu = () => verticalOptions: LayoutOptions.CENTER }), QBSwitch, - hesLabel, - hesSwitch, - EXBLabel, - EXBEntry + hesALabel, + hesASwitch, + hesNLabel, + hesNSwitch ] }) ] @@ -3402,8 +3434,8 @@ let createConfigMenu = () => Sound.playClick(); let requireReset = renderer.configure(tmpZE, tmpCM, tmpCX, tmpCY, tmpCZ, tmpFF, tmpLM, - tmpUpright, tmpQD, tmpQB, tmpEXB, tmpModel, - tmpTail, tmpHes); + tmpUpright, tmpQD, tmpQB, undefined, tmpModel, + tmpTail, tmpHesA, tmpHesN); lvlControls.updateDescription(); menu.hide(); } @@ -3435,8 +3467,10 @@ let createConfigMenu = () => modelSwitch.isToggled = rx.loadModels; tmpTail = rx.backtrackTail; tailSwitch.isToggled = rx.backtrackTail; - tmpHes = rx.hesitate; - hesSwitch.isToggled = rx.hesitate; + tmpHesA = rx.hesitateApex; + hesASwitch.isToggled = rx.hesitateApex; + tmpHesN = rx.hesitateNode; + hesNSwitch.isToggled = rx.hesitateNode; lvlControls.updateDescription(); // menu.hide(); } @@ -5061,9 +5095,10 @@ var getInternalState = () => JSON.stringify loadModels: renderer.loadModels, quickDraw: renderer.quickDraw, quickBacktrack: renderer.quickBacktrack, - backtrackList: [...renderer.backtrackList].join(''), + // backtrackList: [...renderer.backtrackList].join(''), backtrackTail: renderer.backtrackTail, - hesitate: renderer.hesitate + hesitateApex: renderer.hesitateApex, + hesitateNode: renderer.hesitateNode }, system: tmpSystem ? { @@ -5129,8 +5164,9 @@ var setInternalState = (stateStr) => state.renderer.camZ, state.renderer.followFactor, state.renderer.loopMode, state.renderer.upright, state.renderer.quickDraw, state.renderer.quickBacktrack, - state.renderer.backtrackList, state.renderer.loadModels, - state.renderer.backtrackTail, state.renderer.hesitate); + undefined, state.renderer.loadModels, + state.renderer.backtrackTail, state.renderer.hesitateApex, + state.renderer.hesitateNode); } else renderer = new Renderer(system); From 56a42f331b0f3316fd8731bc8a0d1e0f66a01aaf Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 19:19:59 +0700 Subject: [PATCH 22/94] Adapted button sizes to different resolutions --- TODO.md | 57 +++++++++++++------------ renderer.js | 117 +++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 118 insertions(+), 56 deletions(-) diff --git a/TODO.md b/TODO.md index 2074342..b42baa0 100644 --- a/TODO.md +++ b/TODO.md @@ -1,12 +1,13 @@ # LSR: To-do List - [LSR: To-do List](#lsr-to-do-list) - - [1.00, Mistletoe ed.](#100-mistletoe-ed) + - [1.0, Mistletoe ed.](#10-mistletoe-ed) + - [1.0: Completed](#10-completed) - [0.21: Completed](#021-completed) - [0.20: Completed](#020-completed) - [Impossible or Scrapped](#impossible-or-scrapped) -## 1.00, Mistletoe ed. +## 1.0, Mistletoe ed. - [ ] Arrange coding streams - Ask if people would be interested @@ -23,29 +24,7 @@ - [ ] Compress internal state? LZW, LZP - [ ] Ask Gilles about changing the spline used in 3D graph - [ ] How about locking rotation? (for Navier Stokes) -- [ ] Screen adaptive button sizes (40, 44, 48) plus other stuff maybe - [ ] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end -- [ ] Rework quickdraw / BT logic - - Progress: Regular, backtrack, quickdraw done - - Test suites: - - [x] Arrow (8/8) - - [x] Cantor (8/8) - - [ ] Snowflake (0/8) - still wasting time on ignored shits - - [x] Add a cooldown system - - [x] Hesitate on both ends if hesitation is on? - - [x] When just pushing onto the stack normally (on an F point), don't push - if the position hasn't changed, because the orientation doesn't matter if - the stack point isn't a `[` bracket point - - [x] Issue: quick BT still forces hesitation on the way forward - - [x] If the `]]]]]` are stacked, hesitation time is massive - - [x] If the stack hasn't detected any movement, just don't do anything - - [x] Hesitate only when the turtle was moved compared to last time? - - [ ] Does it work with ignored? - (because of the ignored stuff) - - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? - - [ ] Remove the backtrack list option - - Also, backtrack on the way back and forward needs different lists? -- [x] Turtle controls summary page in guide - [ ] Revamp sequence menu - Level 0: 10 chars (`View`) - Classic LS: displays the entire string in a label @@ -55,12 +34,10 @@ - [ ] Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians -- [x] Implement new RNG (Xorshift) instead of th fucjuing Lcg - - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Can multiple derivations on the same rule still be made? Ruins parity - - [x] Allow both modes to exist (implemented in Classic) + - [x] Allow both modes to exist (ONLY in Classic) - [ ] Investigate tropism (capital T) - [ ] Investigate sunlight heading (heliotropism) (`$`) @@ -140,6 +117,32 @@ }; ``` +## 1.0: Completed + +- [x] Implement new RNG (Xorshift) instead of th fucjuing Lcg +- [x] Screen adaptive button sizes (40, 44, 48) plus other stuff maybe +- [x] Rework quickdraw / BT logic (**good enough!**) + - Progress: Regular, backtrack, quickdraw done + - Test suites: + - [x] Arrow (8/8) + - [x] Cantor (8/8) + - [ ] Snowflake (0/8) - still wasting time on ignored shits + - [x] Add a cooldown system + - [x] Hesitate on both ends if hesitation is on? + - [x] When just pushing onto the stack normally (on an F point), don't push + if the position hasn't changed, because the orientation doesn't matter if + the stack point isn't a `[` bracket point + - [x] Issue: quick BT still forces hesitation on the way forward + - [x] If the `]]]]]` are stacked, hesitation time is massive + - [x] If the stack hasn't detected any movement, just don't do anything + - [x] Hesitate only when the turtle was moved compared to last time? + - [ ] Does it work with ignored? No + (because of the ignored stuff) + - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? + - [x] Remove the backtrack list option + - Also, backtrack on the way back and forward needs different lists? +- [x] Turtle controls summary page in guide + ## 0.21: Completed - [x] Renderer menu: diff --git a/renderer.js b/renderer.js index 63ac7df..e831ebe 100644 --- a/renderer.js +++ b/renderer.js @@ -87,7 +87,56 @@ let menuLang = Localization.language; let savedSystems = new Map(); -const DEFAULT_BUTTON_HEIGHT = Math.max(ui.screenHeight * 0.055, 48); +let getImageSize = (width) => +{ + if(width >= 1080) + return 48; + if(width >= 720) + return 36; + if(width >= 360) + return 24; + + return 20; +} + +let getBtnSize = (width) => +{ + if(width >= 1080) + return 96; + if(width >= 720) + return 72; + if(width >= 360) + return 48; + + return 40; +} + +let getMediumBtnSize = (width) => +{ + if(width >= 1080) + return 88; + if(width >= 720) + return 66; + if(width >= 360) + return 44; + + return 36; +} + +let getSmallBtnSize = (width) => +{ + if(width >= 1080) + return 80; + if(width >= 720) + return 60; + if(width >= 360) + return 40; + + return 32; +} + +const BUTTON_HEIGHT = getBtnSize(ui.screenWidth); +const SMALL_BUTTON_HEIGHT = getSmallBtnSize(ui.screenWidth); const ENTRY_CHAR_LIMIT = 5000; const locStrings = { @@ -2237,7 +2286,7 @@ class VariableControls { this.varBtn.content.text = this.variable.getDescription(); } - createVariableButton(callback = null, height = DEFAULT_BUTTON_HEIGHT) + createVariableButton(callback = null, height = BUTTON_HEIGHT) { if(this.varBtn !== null) return this.varBtn; @@ -2292,7 +2341,7 @@ class VariableControls this.refundBtn.content.textColor = this.variable.level > 0 ? Color.TEXT : Color.TEXT_MEDIUM; } - createRefundButton(symbol = '-', height = DEFAULT_BUTTON_HEIGHT) + createRefundButton(symbol = '-', height = BUTTON_HEIGHT) { if(this.refundBtn !== null) return this.refundBtn; @@ -2359,7 +2408,7 @@ class VariableControls this.buyBtn.content.textColor = this.variable.level < this.variable.maxLevel ? Color.TEXT : Color.TEXT_MEDIUM; } - createBuyButton(symbol = '+', height = DEFAULT_BUTTON_HEIGHT) + createBuyButton(symbol = '+', height = BUTTON_HEIGHT) { if(this.buyBtn !== null) return this.buyBtn; @@ -2786,7 +2835,7 @@ var getEquationOverlay = () => return result; } -let createButton = (label, callback, height = DEFAULT_BUTTON_HEIGHT) => +let createButton = (label, callback, height = BUTTON_HEIGHT) => { let frame = ui.createFrame ({ @@ -2883,7 +2932,7 @@ var getUpgradeListDelegate = () => renderer.constructSystem = tmpSystem; tmpSystem = null; } - }, Math.max(ui.screenHeight * 0.05, 44)); + }, getMediumBtnSize(ui.screenWidth)); resumeButton.content.horizontalOptions = LayoutOptions.CENTER; resumeButton.isVisible = () => tmpSystem ? true : false; resumeButton.margin = new Thickness(0, 0, 0, 2); @@ -2902,8 +2951,8 @@ var getUpgradeListDelegate = () => rowSpacing: 6, rowDefinitions: [ - DEFAULT_BUTTON_HEIGHT, - DEFAULT_BUTTON_HEIGHT + BUTTON_HEIGHT, + BUTTON_HEIGHT ], columnDefinitions: ['50*', '50*'], children: @@ -2947,9 +2996,9 @@ var getUpgradeListDelegate = () => rowSpacing: 6, rowDefinitions: [ - DEFAULT_BUTTON_HEIGHT, - DEFAULT_BUTTON_HEIGHT, - DEFAULT_BUTTON_HEIGHT + BUTTON_HEIGHT, + BUTTON_HEIGHT, + BUTTON_HEIGHT ], columnDefinitions: ['50*', '50*'], children: @@ -3355,7 +3404,11 @@ let createConfigMenu = () => }), ui.createGrid ({ - rowDefinitions: [40, 40], + rowDefinitions: + [ + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT + ], columnDefinitions: ['70*', '30*'], children: [ @@ -3378,7 +3431,13 @@ let createConfigMenu = () => }), ui.createGrid ({ - rowDefinitions: [40, 40, 40, 40], + rowDefinitions: + [ + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT + ], columnDefinitions: ['70*', '30*'], children: [ @@ -3420,7 +3479,7 @@ let createConfigMenu = () => }), ui.createGrid ({ - minimumHeightRequest: 64, + minimumHeightRequest: BUTTON_HEIGHT, columnDefinitions: ['50*', '50*'], children: [ @@ -3589,7 +3648,7 @@ let createSystemMenu = () => ({ text: getLoc('btnReroll'), column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -3685,7 +3744,7 @@ let createSystemMenu = () => }), ui.createGrid ({ - minimumHeightRequest: 64, + minimumHeightRequest: BUTTON_HEIGHT, columnDefinitions: ['50*', '50*'], children: [ @@ -3788,7 +3847,7 @@ let createNamingMenu = () => text: getLoc('btnOverwrite'), row: 0, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -3812,8 +3871,8 @@ let createNamingMenu = () => }); let systemGridScroll = ui.createScrollView ({ - heightRequest: () => Math.max(40, Math.min(ui.screenHeight * 0.2, - systemGrid.height)), + heightRequest: () => Math.max(SMALL_BUTTON_HEIGHT, + Math.min(ui.screenHeight * 0.2, systemGrid.height)), content: systemGrid }); @@ -4167,7 +4226,7 @@ let createViewMenu = (title) => text: getLoc('btnAdd'), row: 0, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -4216,7 +4275,7 @@ let createViewMenu = (title) => ({ text: getLoc('btnReroll'), column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -4359,7 +4418,7 @@ let createViewMenu = (title) => }), ui.createGrid ({ - minimumHeightRequest: 64, + minimumHeightRequest: BUTTON_HEIGHT, columnDefinitions: ['30*', '30*', '30*'], children: [ @@ -4460,7 +4519,7 @@ let createSaveMenu = () => text: getLoc('btnView'), row: 0, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -4482,8 +4541,8 @@ let createSaveMenu = () => }); let systemGridScroll = ui.createScrollView ({ - heightRequest: () => Math.max(40, Math.min(ui.screenHeight * 0.32, - systemGrid.height)), + heightRequest: () => Math.max(SMALL_BUTTON_HEIGHT, + Math.min(ui.screenHeight * 0.32, systemGrid.height)), content: systemGrid }); let menu = ui.createPopup @@ -4510,7 +4569,7 @@ let createSaveMenu = () => text: getLoc('btnClipboard'), row: 0, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { let clipMenu = createSystemClipboardMenu( @@ -4529,7 +4588,7 @@ let createSaveMenu = () => text: getLoc('btnSave'), row: 0, column: 2, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -4696,7 +4755,7 @@ let createManualMenu = () => contentsTable[i] + 1), row: i, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); @@ -5027,7 +5086,7 @@ let createWorldMenu = () => text: getLoc('btnClipboard'), row: 6, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { let clipMenu = createStateClipboardMenu( From 689e9c5dbc48b273a9bff4b40d2588a4a0110832 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 19:36:45 +0700 Subject: [PATCH 23/94] Fixed cooldown interfering with polygon mode --- TODO.md | 1 + renderer.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index b42baa0..dd7e817 100644 --- a/TODO.md +++ b/TODO.md @@ -42,6 +42,7 @@ - [ ] Investigate tropism (capital T) - [ ] Investigate sunlight heading (heliotropism) (`$`) +- [x] Issue: models are broken because of backtrack rework - [ ] Change how models work: - Stochastic models are no longer available - Instead define stochastic rules for the actual symbol instead, pre-model diff --git a/renderer.js b/renderer.js index e831ebe..83a1f01 100644 --- a/renderer.js +++ b/renderer.js @@ -1897,7 +1897,7 @@ class Renderer // log(`${Math.round(this.elapsed)}, ${this.i} ` + // `${this.levels[this.lv][this.i]} (-${this.cooldown}): ` + // `${this.stack.length} stacked`) - if(this.cooldown > 0) + if(this.cooldown > 0 && this.polygonMode <= 0) { --this.cooldown; return; @@ -1948,7 +1948,7 @@ class Renderer this.stack.push([this.state, this.ori]); break; case ']': - if(this.cooldown > 0) + if(this.cooldown > 0 && this.polygonMode <= 0) { --this.cooldown; return; @@ -2006,7 +2006,7 @@ class Renderer ++this.i; return; default: - if(this.cooldown > 0) + if(this.cooldown > 0 && this.polygonMode <= 0) { --this.cooldown; return; From 971a6f98358f647617261857765a5753985ba421 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 23:01:39 +0700 Subject: [PATCH 24/94] First implementation of detached models --- TODO.md | 26 +++++--- renderer.js | 183 ++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 181 insertions(+), 28 deletions(-) diff --git a/TODO.md b/TODO.md index dd7e817..904a0aa 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,14 @@ # LSR: To-do List - [LSR: To-do List](#lsr-to-do-list) + - [Other considerations](#other-considerations) - [1.0, Mistletoe ed.](#10-mistletoe-ed) - [1.0: Completed](#10-completed) - [0.21: Completed](#021-completed) - [0.20: Completed](#020-completed) - [Impossible or Scrapped](#impossible-or-scrapped) -## 1.0, Mistletoe ed. +## Other considerations - [ ] Arrange coding streams - Ask if people would be interested @@ -24,7 +25,11 @@ - [ ] Compress internal state? LZW, LZP - [ ] Ask Gilles about changing the spline used in 3D graph - [ ] How about locking rotation? (for Navier Stokes) + +## 1.0, Mistletoe ed. + - [ ] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end + - [ ] Revamp sequence menu - Level 0: 10 chars (`View`) - Classic LS: displays the entire string in a label @@ -34,16 +39,14 @@ - [ ] Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians -- [ ] Investigate Houdini stochastic syntax for weighted derivations -`[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - - Can multiple derivations on the same rule still be made? Ruins parity - - [x] Allow both modes to exist (ONLY in Classic) - - [ ] Investigate tropism (capital T) + - [ ] Separate starting quaternions for upright and sideways + - Stop swizzling! + - Tropism is still the same direction, so we can simulate sideways vines - [ ] Investigate sunlight heading (heliotropism) (`$`) - [x] Issue: models are broken because of backtrack rework -- [ ] Change how models work: +- [x] Change how models work: - Stochastic models are no longer available - Instead define stochastic rules for the actual symbol instead, pre-model - Models are no longer recursively derived @@ -55,7 +58,8 @@ - Easy, just add the model map's keys to the set - Update the manual - Backtrack models? -- [ ] Counter argument: +- [ ] Update guide about models +- Counter argument: - Permanence can be solved by cutting with `%`, albeit with a 1 tick cost for renderer hesitation (or 2) - Solution: Renderer only pushes on `[` if the position / ori has changed @@ -69,6 +73,10 @@ - [x] Update the manual - Lemma's Garden: Complex models such as flowers will bog down the growth cost +- [ ] Investigate Houdini stochastic syntax for weighted derivations +`[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` + - Stochastic in PLSR: has to be on the same line + - [ ] Parametric systems - Different classes - Button in LS menu / save menu to switch modes? @@ -120,6 +128,8 @@ ## 1.0: Completed +- Can multiple derivations on the same rule still be made? Ruins parity + - [x] Allow both modes to exist (ONLY in Classic) - [x] Implement new RNG (Xorshift) instead of th fucjuing Lcg - [x] Screen adaptive button sizes (40, 44, 48) plus other stuff maybe - [x] Rework quickdraw / BT logic (**good enough!**) diff --git a/renderer.js b/renderer.js index 83a1f01..2d212da 100644 --- a/renderer.js +++ b/renderer.js @@ -1272,7 +1272,7 @@ class LSystem * @type {string} the starting sequence. * @public */ - this.axiom = this.getRecursiveModels(axiom).result; + this.axiom = axiom; /** * @type {number} the turning angle (in degrees). * @public @@ -1300,7 +1300,7 @@ class LSystem } rerollAxiom() { - this.axiom = this.getRecursiveModels(this.userInput.axiom).result; + this.axiom = this.userInput.axiom; } getRecursiveModels(sequence) { @@ -1353,10 +1353,9 @@ class LSystem derive(sequence, start = 0) { let result = ''; - let count = 0; for(let i = start; i < sequence.length; ++i) { - if(result.length + count > maxCharsPerTick) + if(result.length > maxCharsPerTick) { return { next: i, @@ -1386,19 +1385,10 @@ class LSystem else continue; } - else if(sequence[i] == '~' && this.models.has(sequence[i + 1])) - { - let r = this.getRecursiveModels( - this.models.get(sequence[i + 1])); - deriv = r.result; - count += r.count - r.result.length; - } + else if(sequence[i] == '~') + continue; else if(this.rules.has(sequence[i])) - { - let r = this.getRecursiveModels(this.rules.get(sequence[i])); - deriv = r.result; - count += r.count - r.result.length; - } + deriv = this.rules.get(sequence[i]); else deriv = sequence[i]; @@ -1696,6 +1686,8 @@ class Renderer this.stack = []; this.idxStack = []; this.i = 0; + this.models = []; + this.mdi = []; this.cooldown = 0; this.polygonMode = 0; if(clearGraph) @@ -1892,7 +1884,8 @@ class Renderer from hesitating for 1 tick every loop. */ let j, t, moved; - for(j = 0; j < 2; ++j) + let loopLimit = 2; // Shenanigans may arise with models? Try this + for(j = 0; j < loopLimit; ++j) { // log(`${Math.round(this.elapsed)}, ${this.i} ` + // `${this.levels[this.lv][this.i]} (-${this.cooldown}): ` + @@ -1903,19 +1896,163 @@ class Renderer return; } - if(this.models.length) + if(this.models.length > 0) { + // log(this.models.toString()); + // log(this.mdi.toString()); + // Unreadable pile of shit for(; this.mdi[this.mdi.length - 1] < this.models[this.models.length - 1].length; ++this.mdi[this.mdi.length - 1]) { - // Process it like the regular switch - continue; + switch(this.models[this.models.length - 1][this.mdi[this.mdi.length - 1]]) + { + case ' ': + log('Blank space detected.') + break; + case '+': + this.ori = this.system.rotations.get('+').mul(this.ori); + break; + case '-': + this.ori = this.system.rotations.get('-').mul(this.ori); + break; + case '&': + this.ori = this.system.rotations.get('&').mul(this.ori); + break; + case '^': + this.ori = this.system.rotations.get('^').mul(this.ori); + break; + case '\\': + this.ori = this.system.rotations.get('\\').mul( + this.ori); + break; + case '/': + this.ori = this.system.rotations.get('/').mul(this.ori); + break; + case '|': + this.ori = ZAxisQuat.mul(this.ori); + break; + case '~': + ++this.mdi[this.mdi.length - 1]; + this.models.push(this.system.models.get(this.models[this.models.length - 1][this.mdi[this.mdi.length - 1]])); + this.mdi.push(0); + return; + case '[': + this.idxStack.push(this.stack.length); + this.stack.push([this.state, this.ori]); + break; + case ']': + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + if(this.stack.length == 0) + { + log('You\'ve clearly made a bracket error.'); + break; + } + + moved = this.state !== + this.stack[this.stack.length - 1][0]; + + t = this.stack.pop(); + this.state = t[0]; + this.ori = t[1]; + if(this.stack.length == + this.idxStack[this.idxStack.length - 1]) + { + this.idxStack.pop(); + if(moved) + this.cooldown = 1; + if(this.hesitateNode && this.polygonMode <= 0) + { + ++this.mdi[this.mdi.length - 1]; + return; + } + else + { + break; + } + } + if(this.polygonMode <= 0) + return; + else + { + --this.mdi[this.mdi.length - 1]; + break; + } + case '%': + // Nothing to do here, all handled by LSystem derivation + break; + case '{': + ++this.polygonMode; + break; + case '}': + --this.polygonMode; + break; + case '.': + if(this.polygonMode <= 0) + log('You\'re cannot register a vertex outside of ' + + 'polygon drawing.'); + else + ++this.mdi[this.mdi.length - 1]; + return; + default: + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + let ignored = this.system.ignoreList.has( + this.models[this.models.length - 1][this.mdi[this.mdi.length - 1]]); + let breakAhead = this.backtrackList.has( + this.models[this.models.length - 1][this.mdi[this.mdi.length - 1] + 1]); + let btAhead = this.models[this.models.length - 1][this.mdi[this.mdi.length - 1] + 1] == ']' || + this.mdi[this.mdi.length - 1] == this.models[this.models.length - 1].length - 1; + + if(this.hesitateApex && btAhead) + this.cooldown = 1; + + if(this.quickDraw && breakAhead) + this.cooldown = 1; + + moved = this.stack.length == 0 || + (this.stack.length > 0 && this.state !== + this.stack[this.stack.length - 1][0]); + + if(!this.quickBacktrack && moved && !ignored) + this.stack.push([this.state, this.ori]); + + if(!ignored) + this.forward(); + + if(this.quickBacktrack && breakAhead) + this.stack.push([this.state, this.ori]); + + if(this.quickDraw && !btAhead) + break; + else if(this.polygonMode <= 0) + { + ++this.mdi[this.mdi.length - 1]; + return; + } + else + break; + } } + this.models.pop(); + this.mdi.pop(); + ++loopLimit; + // continue prevents the regular loop from running continue; } for(; this.i < this.levels[this.lv].length; ++this.i) { + // if(this.models.length > 0) + // break; switch(this.levels[this.lv][this.i]) { case ' ': @@ -1943,6 +2080,12 @@ class Renderer case '|': this.ori = ZAxisQuat.mul(this.ori); break; + case '~': + ++this.i; + this.models.push(this.system.models.get( + this.levels[this.lv][this.i])); + this.mdi.push(0); + return; case '[': this.idxStack.push(this.stack.length); this.stack.push([this.state, this.ori]); From acb67d5e466f1caa524dc017b1f3edd0312fb3f3 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 13 Feb 2023 23:29:41 +0700 Subject: [PATCH 25/94] Cleaned long lines and comments --- renderer.js | 57 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/renderer.js b/renderer.js index 2d212da..9363c57 100644 --- a/renderer.js +++ b/renderer.js @@ -1905,36 +1905,44 @@ class Renderer this.models[this.models.length - 1].length; ++this.mdi[this.mdi.length - 1]) { - switch(this.models[this.models.length - 1][this.mdi[this.mdi.length - 1]]) + switch(this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) { case ' ': log('Blank space detected.') break; case '+': - this.ori = this.system.rotations.get('+').mul(this.ori); + this.ori = this.system.rotations.get('+').mul( + this.ori); break; case '-': - this.ori = this.system.rotations.get('-').mul(this.ori); + this.ori = this.system.rotations.get('-').mul( + this.ori); break; case '&': - this.ori = this.system.rotations.get('&').mul(this.ori); + this.ori = this.system.rotations.get('&').mul( + this.ori); break; case '^': - this.ori = this.system.rotations.get('^').mul(this.ori); + this.ori = this.system.rotations.get('^').mul( + this.ori); break; case '\\': this.ori = this.system.rotations.get('\\').mul( this.ori); break; case '/': - this.ori = this.system.rotations.get('/').mul(this.ori); + this.ori = this.system.rotations.get('/').mul( + this.ori); break; case '|': this.ori = ZAxisQuat.mul(this.ori); break; case '~': ++this.mdi[this.mdi.length - 1]; - this.models.push(this.system.models.get(this.models[this.models.length - 1][this.mdi[this.mdi.length - 1]])); + this.models.push(this.system.models.get( + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]])); this.mdi.push(0); return; case '[': @@ -1984,7 +1992,7 @@ class Renderer break; } case '%': - // Nothing to do here, all handled by LSystem derivation + // Nothing to do here break; case '{': ++this.polygonMode; @@ -1994,7 +2002,7 @@ class Renderer break; case '.': if(this.polygonMode <= 0) - log('You\'re cannot register a vertex outside of ' + + log('You cannot register a vertex outside of ' + 'polygon drawing.'); else ++this.mdi[this.mdi.length - 1]; @@ -2007,11 +2015,15 @@ class Renderer } let ignored = this.system.ignoreList.has( - this.models[this.models.length - 1][this.mdi[this.mdi.length - 1]]); + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]); let breakAhead = this.backtrackList.has( - this.models[this.models.length - 1][this.mdi[this.mdi.length - 1] + 1]); - let btAhead = this.models[this.models.length - 1][this.mdi[this.mdi.length - 1] + 1] == ']' || - this.mdi[this.mdi.length - 1] == this.models[this.models.length - 1].length - 1; + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1] + 1]); + let btAhead = this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1] + 1] == ']' || + this.mdi[this.mdi.length - 1] == + this.models[this.models.length - 1].length - 1; if(this.hesitateApex && btAhead) this.cooldown = 1; @@ -2143,7 +2155,7 @@ class Renderer break; case '.': if(this.polygonMode <= 0) - log('You\'re cannot register a vertex outside of ' + + log('You cannot register a vertex outside of ' + 'polygon drawing.'); else ++this.i; @@ -2168,14 +2180,6 @@ class Renderer if(this.quickDraw && breakAhead) this.cooldown = 1; - // if(ignored) - // { - // if(this.quickDraw && this.stack.length > 0 && - // this.ori === this.stack[this.stack.length - 1][1]) - // this.stack.push([this.state, this.ori]); - // break; - // } - moved = this.stack.length == 0 || (this.stack.length > 0 && this.state !== this.stack[this.stack.length - 1][0]); @@ -2198,13 +2202,6 @@ class Renderer } else break; - - // if(this.quickDraw && !breakAhead && - // (this.quickBacktrack || this.stack.length > 0 && - // this.ori === this.stack[this.stack.length - 1][1]) && - // this.i < this.levels[this.lv].length - 1) - // break; - } } if(!this.backtrackTail || this.stack.length == 0) @@ -2696,6 +2693,8 @@ class Measurer } const XAxisQuat = new Quaternion(0, 1, 0, 0); +const UprightQuat = new Quaternion(Math.cos(Math.PI / 4), 0, 0, +-Math.sin(Math.PI / 4)).mul(XAxisQuat); const ZAxisQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); From 3b7a096c57aaf8e604dd9e6e76429e87442f368d Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 00:55:21 +0700 Subject: [PATCH 26/94] Changed fundamentally how upright works --- TODO.md | 4 ++-- renderer.js | 63 +++++++++++++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/TODO.md b/TODO.md index 904a0aa..4d5510a 100644 --- a/TODO.md +++ b/TODO.md @@ -40,7 +40,7 @@ - [ ] Button to change mode between degrees and radians - [ ] Investigate tropism (capital T) - - [ ] Separate starting quaternions for upright and sideways + - [x] Separate starting quaternions for upright and sideways - Stop swizzling! - Tropism is still the same direction, so we can simulate sideways vines - [ ] Investigate sunlight heading (heliotropism) (`$`) @@ -58,7 +58,7 @@ - Easy, just add the model map's keys to the set - Update the manual - Backtrack models? -- [ ] Update guide about models +- [x] Update guide about models - Counter argument: - Permanence can be solved by cutting with `%`, albeit with a 1 tick cost for renderer hesitation (or 2) diff --git a/renderer.js b/renderer.js index 9363c57..9bd8f01 100644 --- a/renderer.js +++ b/renderer.js @@ -219,7 +219,7 @@ const locStrings = labelFollowFactor: 'Follow factor (0-1): ', labelLoopMode: 'Looping mode: {0}', loopModes: ['Off', 'Level', 'Playlist'], - labelUpright: '* Upright x-axis: ', + labelUpright: '* Upright figure: ', labelBTTail: 'Draw tail end: ', labelLoadModels: '* (Teaser) Load models: ', labelQuickdraw: '* Quickdraw (unstable): ', @@ -496,7 +496,7 @@ Turning angle: 30° Applies static camera: Scale: 1.5*2^lv -Centre: (1.2*2^lv, 0, 0) +Centre: (0, 1.2*2^lv, 0) Upright` }, { @@ -533,7 +533,7 @@ Turning angle: 22.5° Applies static camera: Scale: 1.5*2^lv -Centre: (1.2*2^lv, 0, 0) +Centre: (0, 1.2*2^lv, 0) Upright` }, { @@ -589,7 +589,7 @@ Turning angle: 8° Applies static camera: Scale: 2*2^lv -Centre: (1.2*2^lv, 0, 0) +Centre: (0, 1.2*2^lv, 0) Upright`, source: 'https://www.bioquest.org/products/files/13157_Real-time%203D%20Plant%20Structure%20Modeling%20by%20L-System.pdf' }, @@ -622,7 +622,7 @@ Turning angle: 4° Applies static camera: (mathematically unproven) Scale: 3*1.3^lv -Centre: (1.8*1.3^lv, 0, 0) +Centre: (0, 1.8*1.3^lv, 0) Upright`, source: 'http://jobtalle.com/lindenmayer_systems.html' }, @@ -659,7 +659,7 @@ Turning angle: 27° Applies static camera: Scale: lv -Centre: (lv/2-1, 0, 0) +Centre: (0, lv/2-1, 0) Upright` }, { @@ -676,25 +676,30 @@ To declare a model rule, attach a tilde in front of the symbol on the left side: To reference a model in another rule, attach a tilde in front of the symbol ` + `in the same way it was declared. Note: The symbol will not disappear from the rule after the model has been ` + -`drawn, but it will be ignored by the turtle.` +`drawn, but it will be ignored by the turtle. +Note 2: The model only lasts for one level, and needs to be refreshed ` + +`(example follows in the next page).` }, { title: 'Example: Lilac branch', contents: `Ripped straight off of page 92 of The Algorithmic Beauty of Plants. But I ` + `made the model myself. +K represents the flower, and its model is refreshed every level with the ` + +`rule K = ~K. Axiom: A~K A = [--//~K][++//~K]I///A I = Fi i = Fj j = J[--FFA][++FFA] +K = ~K ~K = F[+++[--F+F]^^^[--F+F]^^^[--F+F]^^^[--F+F]] Turning angle: 30° Applies static camera: Scale: 3*lv -Centre: (1.5*lv, 0, 0) +Centre: (0, 1.5*lv, 0) Upright` }, { @@ -820,7 +825,7 @@ Turning angle: 15° Applies static camera: Scale: 2^lv -Centre: (2^lv, 0, 0) +Centre: (0, 2^lv, 0) Upright` }, { @@ -854,7 +859,7 @@ Turning angle: 22.5° Applies static camera: (mathematically unproven) Scale: 3^lv -Centre: (0.75*3^lv, -0.25*3^lv, 0) +Centre: (0.25*3^lv, 0.75*3^lv, 0) Upright` }, { @@ -1557,7 +1562,7 @@ class Renderer * @type {Quaternion} the cursor's orientation. * @public stay away from me. */ - this.ori = new Quaternion(); + this.ori = this.upright ? uprightQuat : new Quaternion(); /** * @type {string[]} stores the system's every level. * @public don't touch me. @@ -1682,7 +1687,7 @@ class Renderer reset(clearGraph = true) { this.state = new Vector3(0, 0, 0); - this.ori = new Quaternion(); + this.ori = this.upright ? uprightQuat : new Quaternion(); this.stack = []; this.idxStack = []; this.i = 0; @@ -2237,8 +2242,8 @@ class Renderer swizzle(coords) { // The game uses left-handed Y-up, I mean Y-down coordinates. - if(this.upright) - return new Vector3(-coords.y, -coords.x, coords.z); + // if(this.upright) + // return new Vector3(-coords.y, -coords.x, coords.z); return new Vector3(coords.x, -coords.y, coords.z); } @@ -2692,9 +2697,8 @@ class Measurer } } +const uprightQuat = new Quaternion(Math.sqrt(2)/2, 0, 0, -Math.sqrt(2)/2); const XAxisQuat = new Quaternion(0, 1, 0, 0); -const UprightQuat = new Quaternion(Math.cos(Math.PI / 4), 0, 0, --Math.sin(Math.PI / 4)).mul(XAxisQuat); const ZAxisQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); @@ -2703,11 +2707,6 @@ let globalRNG = new Xorshift(Date.now()); let contentsTable = [1, 2, 3, 4, 5, 6, 7, 10, 12, 15, 19, 21, 23, 24, 27]; let manualSystems = { - 11: - { - system: arrow, - config: ['1.5*2^lv', '1.2*2^lv', 0, 0, true] - }, 8: { system: new LSystem('FX', ['Y=-FX-Y', 'X=X+YF+'], 90), @@ -2718,13 +2717,18 @@ let manualSystems = system: new LSystem('X', ['X=+Y-X-Y+', 'Y=-X+Y+X-'], 60), config: ['2^lv', '0.5*2^lv', 'sqrt(3)/4*2^lv', 0, false] }, + 11: + { + system: arrow, + config: ['1.5*2^lv', 0, '1.2*2^lv', 0, true] + }, 13: { system: new LSystem('X', [ 'F=FF', 'X=F-[[X]+X]+F[+FX]-X,F+[[X]-X]-F[-FX]+X' ], 22.5), - config: ['1.5*2^lv', '1.2*2^lv', 0, 0, true] + config: ['1.5*2^lv', 0, '1.2*2^lv', 0, true] }, luckyFlower: { @@ -2735,7 +2739,7 @@ let manualSystems = 'R=+++I,++I,++++I', 'F=[---[I+I]--I+I][+++[I-I]++I-I]II' ], 12), - config: [6, 6, 0, 0, true] + config: [6, 0, 6, 0, true] }, 14: { @@ -2757,7 +2761,7 @@ let manualSystems = 'Y=Z-ZY+', 'Z=ZZ' ], 8), - config: ['2*2^lv', '1.2*2^lv', 0, 0, true] + config: ['2*2^lv', 0, '1.2*2^lv', 0, true] }, 17: { @@ -2774,7 +2778,7 @@ let manualSystems = 'C=[---------FF][+++++++++FF]B&&+C', 'D=[---------FF][+++++++++FF]B&&-D' ], 4), - config: ['3*1.3^lv', '1.8*1.3^lv', 0, 0, true] + config: ['3*1.3^lv', 0, '1.8*1.3^lv', 0, true] }, 20: { @@ -2783,7 +2787,7 @@ let manualSystems = 'B=[-B]C.', 'C=GC' ], 27), - config: ['lv', 'lv/2-1', 0, 0, true] + config: ['lv', 0, 'lv/2-1', 0, true] }, 22: { @@ -2792,14 +2796,15 @@ let manualSystems = 'I=Fi', 'i=Fj', 'j=J[--FFA][++FFA]', + 'K=~K', '~K=F[+++[--F+F]^^^[--F+F]^^^[--F+F]^^^[--F+F]]' ], 30), - config: ['3*lv', '1.5*lv', 0, 0, true] + config: ['3*lv', 0, '1.5*lv', 0, true] }, 28: { system: new LSystem('X', ['F=FF', 'X=F-[[X]+X]+F[-X]-X'], 15), - config: ['2^lv', '2^lv', 0, 0, true] + config: ['2^lv', 0, '2^lv', 0, true] }, 29: { @@ -2813,7 +2818,7 @@ let manualSystems = 'F=FX+[E]X', 'X=F-[X+[X[++E]F]]+F[X+FX]-X' ], 22.5), - config: ['3^lv', '0.75*3^lv', '-0.25*3^lv', 0, true] + config: ['3^lv', '0.25*3^lv', '0.75*3^lv', 0, true] } }; let tmpSystem = null; From 04a26b1290be86aa7d97e8a640b05fedc69eb3f8 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 01:08:50 +0700 Subject: [PATCH 27/94] Updated guide with new changes --- renderer.js | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/renderer.js b/renderer.js index 9bd8f01..951c65e 100644 --- a/renderer.js +++ b/renderer.js @@ -289,8 +289,7 @@ Tickspeed: controls the renderer's drawing speed (up to 10 lines/sec, which ` + `pausing the renderer. Holding + afterwards will return the renderer to the ` + `previously anchored speed. -Reroll: located on the top right. Pressing this button will reroll the ` + -`system's seed (only applicable for stochastic systems). +Reset: located on the top right. Pressing this button will reset the renderer. Menu buttons: You pressed on one of them to get here, did you? - L-system menu: allows you to edit the currently displayed system. @@ -304,11 +303,11 @@ Menu buttons: You pressed on one of them to get here, did you? `Design your L-system using the L-systems menu. - Axiom: the system's starting sequence. -- Turning angle: the angle the turtle turns when the turtle turns (in degrees). +- Turning angle: the angle the turtle turns when turns the turtle (in degrees). - Production rules: an unlimited number of rules can be added using the ` + `'Add' button. - Ignored symbols: the turtle will stand still when encountering these symbols. -- Seed: sets the seed of a stochastic system. +- Seed: the seed for a stochastic system can be rerolled or manually set. Note: Any blank rules will be trimmed afterwards.` }, @@ -324,10 +323,10 @@ Camera options: - Camera mode: toggles between Fixed, Linear and Quadratic. The latter two ` + `modes follow the turtle. - Fixed camera centre: determines camera position in Fixed mode using a ` + -`formula, similar to figure scale. +`written formula similar to figure scale. - Follow factor: changes how quickly the camera follows the turtle. -- Upright x-axis: rotates figure by 90 degrees counter-clockwise around the ` + -`z-axis. +- Upright figure: rotates the figure by 90 degrees counter-clockwise around ` + +`the z-axis so that it heads upwards. Renderer logic: - Looping mode: the Level mode repeats a single level, while the Playlist ` + @@ -338,9 +337,8 @@ Renderer logic: Advanced stroke options: - Quickdraw (unstable): skips over straight consecutive segments. - Quick backtrack: works similarly, but on the way back. -- Stutter on backtrack: pause for one tick after backtracking for more ` + -`accurate figures. -- Backtrack list: sets stopping symbols for backtracking.` +- Stutter at apex: pause for one tick at the tips of lines. +- Stutter at node: pause for one tick after backtracking through branches.` }, { title: 'Saving and loading', @@ -640,8 +638,9 @@ Upright`, Normal commands inside a polygon block will not draw lines, making it great ` + `for hiding away any scaffolding in the creation of models. -Note: Due to how the rendering engine works, the polygon tool in LSR works ` + -`a bit differently from that described in The Algorithmic Beauty of Plants. ` + + +Note: Due to how Exponential Idle's 3D graph works, the polygon tool in LSR ` + +`works differently from that described in The Algorithmic Beauty of Plants. ` + `Therefore, it is advised to make some adjustments when adopting schemes ` + `from the book into LSR.` }, @@ -675,8 +674,10 @@ To declare a model rule, attach a tilde in front of the symbol on the left side: To reference a model in another rule, attach a tilde in front of the symbol ` + `in the same way it was declared. + Note: The symbol will not disappear from the rule after the model has been ` + `drawn, but it will be ignored by the turtle. + Note 2: The model only lasts for one level, and needs to be refreshed ` + `(example follows in the next page).` }, @@ -751,7 +752,7 @@ Now, while tickspeed might be more of a familiar concept to the idle ` + `between corners occasionally, mimicking leaf shapes on a tree. - 0.5 sec: with slight occasional overshoots, tick length 0.5 proves itself ` + `of use when it comes to bringing that rough sketch feeling to a figure. -- 0.6 sec and above: don't care, class dismissed.` +- 0.6 sec and above: I don't care, class dismissed.` }, { title: 'Advanced artistry in LSR (2)', @@ -767,14 +768,11 @@ Now, open your renderer menu textbook to the last section. There are about 4 ` + `comes to both precision and aesthetics. - Quick backtrack: this one's a reliable one, trading only a little beauty ` + `for some extra speed. -- Stutter on backtrack: now, this is what I mean when I say hesitation is ` + +- Stutter at apex/node: now, this is what I mean when I say hesitation is ` + `not defeat. Pausing for even just one tick can give your figure just enough ` + `cohesion it really needs. To prove this, try loading the Arrow weed then ` + -`alternate between drawing with this option on and off, while on tick length ` + -`0.1, or 10 tickspeed. There will be a noticeable difference, even from afar. -- Backtrack list: usually, I would say that if you are here to draw ` + -`L-systems, I recommend not to edit this option, but for the brave and ` + -`worthy, you could create truly mesmerising results with this. +`alternate between drawing with these option on and off, at 0.1 tick length, ` + +`or 10 tickspeed. There will be a noticeable difference, even from afar. Class dismissed, and stay tuned for next week's lecture, on the Art of Looping!` }, From cccb3c12c60051dc00971f30693f677e86ce5c99 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 02:08:45 +0700 Subject: [PATCH 28/94] Revamped sequence menu --- TODO.md | 85 +++++++++++++++++++--------------------------- renderer.js | 98 +++++++++++++++++++++++++++++++---------------------- 2 files changed, 92 insertions(+), 91 deletions(-) diff --git a/TODO.md b/TODO.md index 4d5510a..513884d 100644 --- a/TODO.md +++ b/TODO.md @@ -12,10 +12,6 @@ - [ ] Arrange coding streams - Ask if people would be interested -- [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - -- [ ] Add more comments in the code -- [ ] Update docstrings - [ ] A more detailed README - Showcases the power of tickspeed and stroke options - Discusses limitations of the game @@ -28,11 +24,15 @@ ## 1.0, Mistletoe ed. +- [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr +- [ ] Add more comments in the code +- [ ] Update docstrings + - [ ] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end - [ ] Revamp sequence menu - Level 0: 10 chars (`View`) - - Classic LS: displays the entire string in a label + - [x] Classic LS: displays the entire string in a label - Parametric LS: displays symbols and parameters side by side, one symbol/row - [ ] Turning angles @@ -45,34 +45,6 @@ - Tropism is still the same direction, so we can simulate sideways vines - [ ] Investigate sunlight heading (heliotropism) (`$`) -- [x] Issue: models are broken because of backtrack rework -- [x] Change how models work: - - Stochastic models are no longer available - - Instead define stochastic rules for the actual symbol instead, pre-model - - Models are no longer recursively derived - - This will remove their permanence and increase performance - - Instead, they will be processed by the renderer using a queue - - The processing code will be positioned below (?) the main renderer loop - - Almost the exact same code as main loop, but with `~` queue controls - - Having a model also means that symbol should be ignored (no extra F) - - Easy, just add the model map's keys to the set - - Update the manual - - Backtrack models? -- [x] Update guide about models -- Counter argument: - - Permanence can be solved by cutting with `%`, albeit with a 1 tick cost for - renderer hesitation (or 2) - - Solution: Renderer only pushes on `[` if the position / ori has changed - - This makes more sense thematically, as cut wounds will leave scars - - Lemma's Garden: this will slightly slow down growth - - If models were to be processed by renderer, then they cannot evolve - - On the other hand, they can 'evolve' in another sense where each parameter - value can have a different model - - [x] Having a model also means that symbol should be ignored (no extra F) - - Easy, just add the model map's keys to the set - - [x] Update the manual - - Lemma's Garden: Complex models such as flowers will bog down the growth cost - - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line @@ -108,26 +80,24 @@ - Ancestor means the index of whomever the fuck is on top of the idx stack. - Does this work with the dynamic loading system with all the data passing? - If stored by maps: Keys can be any data type. - - If stored by objects: - ```js - // v2 - let contextRulesLR = - { - 'ABC': 'D', // Two ways: AC = D - 'FBG': 'H' // FG = H - }; - let contextRulesL = - { - 'AB': 'E' // One way: AA = E - }; - ``` + - If stored by objects: written in `parametric_lsystem.js` ## 1.0: Completed +- [x] Issue: models are broken because of backtrack rework +- [x] Change how models work: + - Stochastic models are no longer available + - Instead define stochastic rules for the actual symbol instead, pre-model + - Models are no longer recursively derived + - This will remove their permanence and increase performance + - Instead, they will be processed by the renderer using a queue + - The processing code will be positioned below (?) the main renderer loop + - Almost the exact same code as main loop, but with `~` queue controls + - Having a model also means that symbol should be ignored (no extra F) + - Easy, just add the model map's keys to the set + - Update the manual + - Backtrack models? +- [x] Update guide about models - Can multiple derivations on the same rule still be made? Ruins parity - [x] Allow both modes to exist (ONLY in Classic) - [x] Implement new RNG (Xorshift) instead of th fucjuing Lcg @@ -261,4 +231,17 @@ needs to store two boolean properties `isContextSensitive` and `isParametric`. - How are they referenced in systems? As a list of names? An ID that is the index of an array? - Model storage - - How to load? How to edit? \ No newline at end of file + - How to load? How to edit? +- Counter argument to new model format: + - Permanence can be solved by cutting with `%`, albeit with a 1 tick cost for + renderer hesitation (or 2) + - Solution: Renderer only pushes on `[` if the position / ori has changed + - This makes more sense thematically, as cut wounds will leave scars + - Lemma's Garden: this will slightly slow down growth + - If models were to be processed by renderer, then they cannot evolve + - On the other hand, they can 'evolve' in another sense where each parameter + value can have a different model + - [x] Having a model also means that symbol should be ignored (no extra F) + - Easy, just add the model map's keys to the set + - [x] Update the manual + - Lemma's Garden: Complex models such as flowers will bog down the growth cost diff --git a/renderer.js b/renderer.js index 951c65e..10b6182 100644 --- a/renderer.js +++ b/renderer.js @@ -34,6 +34,7 @@ import { TouchType } from '../api/ui/properties/TouchType'; import { Localization } from '../api/Localization'; import { MathExpression } from '../api/MathExpression'; import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; +import { LineBreakMode } from '../api/ui/properties/LineBreakMode'; var id = 'L_systems_renderer'; var getName = (language) => @@ -198,8 +199,8 @@ const locStrings = rerollSeed: 'You are about to reroll the system\'s seed.', resetRenderer: 'You are about to reset the renderer.', - menuSequence: 'Sequence Menu', - labelLevelSeq: 'Level {0}: ', + menuSequence: '{0} (Level {1})', + labelLevelSeq: 'Level {0}: {1} chars', labelChars: '({0} chars)', menuLSystem: 'L-system Menu', @@ -4973,6 +4974,46 @@ let createManualMenu = () => return menu; } +let createSeqViewMenu = (level) => +{ + let pageContents = ui.createLabel + ({ + fontFamily: FontFamily.CMU_REGULAR, + fontSize: 16, + text: renderer.levels[level], + lineBreakMode: LineBreakMode.CHARACTER_WRAP + }); + + let menu = ui.createPopup + ({ + title: Localization.format(getLoc('menuSequence'), tmpSystemName, + level), + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + ui.createFrame + ({ + padding: new Thickness(8, 6), + heightRequest: ui.screenHeight * 0.28, + content: ui.createScrollView + ({ + content: ui.createStackLayout + ({ + children: + [ + pageContents + ] + }) + }) + }) + ] + }) + }); + return menu; +} + let createSequenceMenu = () => { let tmpLvls = []; @@ -4980,67 +5021,44 @@ let createSequenceMenu = () => { tmpLvls.push(ui.createLatexLabel ({ - text: Localization.format(getLoc('labelLevelSeq'), i), + text: Localization.format(getLoc('labelLevelSeq'), i, + renderer.levels[i].length), row: i, column: 0, verticalOptions: LayoutOptions.CENTER })); - tmpLvls.push(ui.createGrid + tmpLvls.push(ui.createButton ({ - columnDefinitions: ['80*', 'auto'], + text: getLoc('btnView'), row: i, column: 1, - children: - [ - ui.createEntry - ({ - text: renderer.levels[i], - row: 0, - column: 0 - }), - ui.createLatexLabel - ({ - text: Localization.format(getLoc('labelChars'), - renderer.levels[i].length), - row: 0, - column: 1, - horizontalOptions: LayoutOptions.END_AND_EXPAND, - verticalOptions: LayoutOptions.CENTER - }) - ] + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let viewMenu = createSeqViewMenu(i); + viewMenu.show(); + } })); } let seqGrid = ui.createGrid ({ - columnDefinitions: ['20*', '80*'], + columnDefinitions: ['70*', '30*'], children: tmpLvls }); let menu = ui.createPopup ({ - title: getLoc('menuSequence'), + title: tmpSystemName, content: ui.createStackLayout ({ children: [ ui.createScrollView ({ - // heightRequest: ui.screenHeight * 0.3, + heightRequest: () => Math.max(SMALL_BUTTON_HEIGHT, + Math.min(ui.screenHeight * 0.36, seqGrid.height)), content: seqGrid - }), - ui.createBox - ({ - heightRequest: 1, - margin: new Thickness(0, 6) - }), - ui.createButton - ({ - text: getLoc('btnClose'), - onClicked: () => - { - Sound.playClick(); - menu.hide(); - } }) ] }) From a19db65fcad39a4b3d8e667ce062577a9c0d599e Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 02:23:36 +0700 Subject: [PATCH 29/94] Added char count to sequence view --- renderer.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/renderer.js b/renderer.js index 10b6182..d83a4b6 100644 --- a/renderer.js +++ b/renderer.js @@ -4976,6 +4976,15 @@ let createManualMenu = () => let createSeqViewMenu = (level) => { + let pageTitle = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelChars'), + renderer.levels[level].length), + margin: new Thickness(0, 4), + heightRequest: 20, + horizontalOptions: LayoutOptions.CENTER, + verticalOptions: LayoutOptions.CENTER + }); let pageContents = ui.createLabel ({ fontFamily: FontFamily.CMU_REGULAR, @@ -4993,6 +5002,7 @@ let createSeqViewMenu = (level) => ({ children: [ + pageTitle, ui.createFrame ({ padding: new Thickness(8, 6), From 7cd31f360f1e1e0be7087cc11721bca228b3d751 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 13:16:37 +0700 Subject: [PATCH 30/94] Fixed renderer.tick() cutting off final tick --- TODO.md | 2 +- renderer.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TODO.md b/TODO.md index 513884d..d7b262a 100644 --- a/TODO.md +++ b/TODO.md @@ -28,7 +28,7 @@ - [ ] Add more comments in the code - [ ] Update docstrings -- [ ] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end +- [x] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end - [ ] Revamp sequence menu - Level 0: 10 chars (`View`) diff --git a/renderer.js b/renderer.js index d83a4b6..58fd58e 100644 --- a/renderer.js +++ b/renderer.js @@ -1880,7 +1880,7 @@ class Renderer return; // This is to prevent the renderer from skipping the first point. - if(this.elapsed == 0) + if(this.elapsed <= 0.101) return; /* @@ -2952,15 +2952,15 @@ var tick = (elapsedTime, multiplier) => } else { - renderer.draw(l.level, !timeCheck(elapsedTime)); renderer.tick(elapsedTime); + renderer.draw(l.level, !timeCheck(elapsedTime)); } if(measurePerformance) drawMeasurer.stamp(); let msTime = renderer.elapsedTime; - min.value = msTime[0] + msTime[1] / 100; + min.value = 1e-8 + msTime[0] + msTime[1] / 100; progress.value = renderer.progressPercent; theory.invalidateTertiaryEquation(); } From 3ef3b6c71f1c8836b5910f9f929050e15a5b6a00 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 14:14:56 +0700 Subject: [PATCH 31/94] Converted LayoutOptions to TextAlignment --- renderer.js | 206 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 135 insertions(+), 71 deletions(-) diff --git a/renderer.js b/renderer.js index 58fd58e..04cdc51 100644 --- a/renderer.js +++ b/renderer.js @@ -35,6 +35,7 @@ import { Localization } from '../api/Localization'; import { MathExpression } from '../api/MathExpression'; import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; import { LineBreakMode } from '../api/ui/properties/LineBreakMode'; +import { StackOrientation } from '../api/ui/properties/StackOrientation'; var id = 'L_systems_renderer'; var getName = (language) => @@ -1448,7 +1449,8 @@ class LSystem */ toString() { - let result = `${this.axiom} ${this.turnAngle} ${this.seed} ${[...this.ignoreList].join('')}`; + let result = `${this.axiom} ${this.turnAngle} ${this.seed} ` + + `${[...this.ignoreList].join('')}`; for(let [key, value] of this.rules) { if(typeof value === 'string') @@ -2382,7 +2384,9 @@ class Renderer if(typeof this.levels[this.lv] === 'undefined') return this.loadingString; - return `\\begin{matrix}x=${getCoordString(this.state.x)},&y=${getCoordString(this.state.y)},&z=${getCoordString(this.state.z)},&${this.progressString}\\end{matrix}`; + return `\\begin{matrix}x=${getCoordString(this.state.x)},& + y=${getCoordString(this.state.y)},&z=${getCoordString(this.state.z)},& + ${this.progressString}\\end{matrix}`; } /** * Returns the cursor's orientation as a string. @@ -2393,7 +2397,8 @@ class Renderer if(typeof this.levels[this.lv] === 'undefined') return this.loadingString; - return `\\begin{matrix}q=${this.ori.toString()},&${this.progressString}\\end{matrix}`; + return `\\begin{matrix}q=${this.ori.toString()},&${this.progressString} + \\end{matrix}`; } /** * Returns the renderer's string representation. @@ -2401,7 +2406,12 @@ class Renderer */ toString() { - return`${this.figScaleStr} ${this.cameraMode} ${this.camXStr} ${this.camYStr} ${this.camZStr} ${this.followFactor} ${this.loopMode} ${this.upright ? 1 : 0} ${this.quickDraw ? 1 : 0} ${this.quickBacktrack ? 1 : 0} ${[...this.backtrackList].join('')} ${this.loadModels ? 1 : 0} ${this.backtrackTail ? 1 : 0} ${this.hesitateApex} ${this.hesitateNode}`; + return `${this.figScaleStr} ${this.cameraMode} ${this.camXStr} ` + + `${this.camYStr} ${this.camZStr} ${this.followFactor} ` + + `${this.loopMode} ${this.upright ? 1 : 0} ${this.quickDraw ? 1 : 0} ` + + `${this.quickBacktrack ? 1 : 0} ${[...this.backtrackList].join('')} ` + + `${this.loadModels ? 1 : 0} ${this.backtrackTail ? 1 : 0} ` + + `${this.hesitateApex} ${this.hesitateNode}`; } } @@ -2444,7 +2454,7 @@ class VariableControls content: ui.createLatexLabel ({ text: this.variable.getDescription(), - verticalOptions: LayoutOptions.CENTER, + verticalTextAlignment: TextAlignment.CENTER, textColor: Color.TEXT_MEDIUM }), borderColor: Color.TRANSPARENT @@ -2506,8 +2516,8 @@ class VariableControls content: ui.createLatexLabel ({ text: symbol, - horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, textColor: this.variable.level > 0 ? Color.TEXT : Color.TEXT_MEDIUM }), @@ -2573,8 +2583,8 @@ class VariableControls content: ui.createLatexLabel ({ text: symbol, - horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, textColor: this.variable.level < this.variable.maxLevel ? Color.TEXT : Color.TEXT_MEDIUM }), @@ -2981,6 +2991,46 @@ var getEquationOverlay = () => return result; } +// var getCurrencyBarDelegate = () => +// { +// let stack = ui.createGrid +// ({ +// columnDefinitions: ['1*', '1*'], +// children: +// [ +// ui.createLatexLabel +// ({ +// column: 0, +// text: () => +// { +// let msTime = renderer.elapsedTime; +// return `${msTime[0] < 10 ? '0' : ''}${msTime[0]}:` + +// `${msTime[1] < 10 ? '0' : ''}${msTime[1].toFixed(1)} ` + +// `elapsed`; +// min.value = 1e-8 + msTime[0] + msTime[1] / 100; +// }, +// fontSize: 11, +// horizontalTextAlignment: TextAlignment.CENTER, +// verticalTextAlignment: TextAlignment.END +// }), +// ui.createLatexLabel +// ({ +// column: 1, +// text: () => `${renderer.progressPercent.toFixed(2)}\\%`, +// fontSize: 11, +// horizontalTextAlignment: TextAlignment.CENTER, +// verticalTextAlignment: TextAlignment.END +// }) +// ] +// }); +// return ui.createFrame +// ({ +// padding: new Thickness(0, 6), +// // margin: new Thickness(0, -1), +// content: stack +// }); +// } + let createButton = (label, callback, height = BUTTON_HEIGHT) => { let frame = ui.createFrame @@ -2992,7 +3042,7 @@ let createButton = (label, callback, height = BUTTON_HEIGHT) => content: ui.createLatexLabel ({ text: label, - verticalOptions: LayoutOptions.CENTER, + verticalTextAlignment: TextAlignment.CENTER, textColor: Color.TEXT }), onTouched: (e) => @@ -3183,7 +3233,7 @@ let createConfigMenu = () => getLoc('camModes')[tmpCM]), row: 1, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let CMSlider = ui.createSlider ({ @@ -3221,7 +3271,7 @@ let createConfigMenu = () => isVisible: tmpCM == 0, row: 2, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let camGrid = ui.createEntry ({ @@ -3259,8 +3309,8 @@ let createConfigMenu = () => text: getLoc('labelCamOffset'), row: 0, column: 0, - // horizontalOptions: LayoutOptions.END, - verticalOptions: LayoutOptions.CENTER + // horizontalTextAlignment: TextAlignment.END, + verticalTextAlignment: TextAlignment.CENTER }), CYEntry ] @@ -3283,7 +3333,7 @@ let createConfigMenu = () => text: getLoc('labelFollowFactor'), row: 2, column: 0, - verticalOptions: LayoutOptions.CENTER, + verticalTextAlignment: TextAlignment.CENTER, isVisible: tmpCM > 0 }); let FFEntry = ui.createEntry @@ -3324,7 +3374,7 @@ let createConfigMenu = () => getLoc('loopModes')[tmpLM]), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let LMSlider = ui.createSlider ({ @@ -3372,7 +3422,7 @@ let createConfigMenu = () => text: getLoc('labelLoadModels'), row: 2, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let modelSwitch = ui.createSwitch ({ @@ -3433,7 +3483,7 @@ let createConfigMenu = () => text: getLoc('labelHesitateApex'), row: 2, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let hesASwitch = ui.createSwitch ({ @@ -3458,7 +3508,7 @@ let createConfigMenu = () => text: getLoc('labelHesitateNode'), row: 3, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let hesNSwitch = ui.createSwitch ({ @@ -3483,7 +3533,7 @@ let createConfigMenu = () => // text: getLoc('labelBTList'), // row: 3, // column: 0, - // verticalOptions: LayoutOptions.CENTER + // verticalTextAlignment: TextAlignment.CENTER // }); // let EXBEntry = ui.createEntry // ({ @@ -3522,7 +3572,8 @@ let createConfigMenu = () => text: getLoc('labelFigScale'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), zoomEntry, CMLabel, @@ -3538,7 +3589,8 @@ let createConfigMenu = () => text: getLoc('labelUpright'), row: 4, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), uprightSwitch, ] @@ -3565,7 +3617,8 @@ let createConfigMenu = () => text: getLoc('labelBTTail'), row: 1, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), tailSwitch ] @@ -3592,7 +3645,8 @@ let createConfigMenu = () => text: getLoc('labelQuickdraw'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), QDSwitch, ui.createLatexLabel @@ -3600,7 +3654,8 @@ let createConfigMenu = () => text: getLoc('labelQuickBT'), row: 1, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), QBSwitch, hesALabel, @@ -3621,7 +3676,7 @@ let createConfigMenu = () => ({ text: getLoc('labelRequireReset'), margin: new Thickness(0, 0, 0, 4), - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), ui.createGrid ({ @@ -3733,7 +3788,7 @@ let createSystemMenu = () => let rulesLabel = ui.createLatexLabel ({ text: Localization.format(getLoc('labelRules'), ruleEntries.length), - verticalOptions: LayoutOptions.CENTER, + verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }); let ruleStack = ui.createStackLayout @@ -3788,7 +3843,7 @@ let createSystemMenu = () => ({ text: getLoc('labelSeed'), column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), ui.createButton ({ @@ -3840,7 +3895,8 @@ let createSystemMenu = () => text: getLoc('labelAxiom'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), axiomEntry, ui.createLatexLabel @@ -3848,7 +3904,8 @@ let createSystemMenu = () => text: getLoc('labelAngle'), row: 0, column: 2, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), angleEntry, ] @@ -3873,7 +3930,8 @@ let createSystemMenu = () => text: getLoc('labelIgnored'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), ignoreEntry, seedLabel, @@ -3977,7 +4035,7 @@ let createNamingMenu = () => text: key, row: i, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER })); let btnO = createOverwriteButton(key); btnO.row = i; @@ -4039,7 +4097,7 @@ let createNamingMenu = () => text: getLoc('labelName'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), nameEntry ] @@ -4054,7 +4112,7 @@ let createNamingMenu = () => text: getLoc('labelDesc'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), descEntry ] @@ -4068,8 +4126,8 @@ let createNamingMenu = () => ({ text: Localization.format(getLoc('labelSavedSystems'), savedSystems.size), - // horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER, + // horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }), systemGridScroll, @@ -4123,7 +4181,7 @@ let createSystemClipboardMenu = (values) => text: Localization.format(getLoc('labelEntryCharLimit'), ENTRY_CHAR_LIMIT), margin: new Thickness(0, 0, 0, 4), - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let menu = ui.createPopup @@ -4183,7 +4241,7 @@ let createStateClipboardMenu = (values) => text: Localization.format(getLoc('labelEntryCharLimit'), ENTRY_CHAR_LIMIT), margin: new Thickness(0, 0, 0, 4), - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let menu = ui.createPopup @@ -4246,7 +4304,7 @@ let createViewMenu = (title) => text: getLoc('labelCamCentre'), row: 1, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let camGrid = ui.createEntry ({ @@ -4271,8 +4329,8 @@ let createViewMenu = (title) => text: getLoc('labelCamOffset'), row: 0, column: 0, - // horizontalOptions: LayoutOptions.END, - verticalOptions: LayoutOptions.CENTER + // horizontalTextAlignment: TextAlignment.END, + verticalTextAlignment: TextAlignment.CENTER }), ui.createEntry ({ @@ -4360,7 +4418,7 @@ let createViewMenu = (title) => let rulesLabel = ui.createLatexLabel ({ text: Localization.format(getLoc('labelRules'), ruleEntries.length), - verticalOptions: LayoutOptions.CENTER, + verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }); let ruleStack = ui.createStackLayout @@ -4415,7 +4473,7 @@ let createViewMenu = (title) => ({ text: getLoc('labelSeed'), column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), ui.createButton ({ @@ -4462,8 +4520,8 @@ let createViewMenu = (title) => ({ text: tmpDesc, margin: new Thickness(0, 6), - horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER }), ui.createGrid ({ @@ -4475,7 +4533,8 @@ let createViewMenu = (title) => text: getLoc('labelAxiom'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), axiomEntry, ui.createLatexLabel @@ -4483,7 +4542,8 @@ let createViewMenu = (title) => text: getLoc('labelAngle'), row: 0, column: 2, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), angleEntry ] @@ -4508,7 +4568,8 @@ let createViewMenu = (title) => text: getLoc('labelIgnored'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), ignoreEntry, seedLabel, @@ -4523,8 +4584,9 @@ let createViewMenu = (title) => ui.createLatexLabel ({ text: getLoc('labelApplyCamera'), - // horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER, + // horizontalTextAlignment: + // TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }), ui.createGrid @@ -4537,7 +4599,8 @@ let createViewMenu = (title) => text: getLoc('labelFigScale'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), zoomEntry, camLabel, @@ -4549,7 +4612,8 @@ let createViewMenu = (title) => text: getLoc('labelUpright'), row: 3, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: + TextAlignment.CENTER }), uprightSwitch ] @@ -4631,8 +4695,8 @@ let createSaveMenu = () => ({ text: Localization.format(getLoc('labelSavedSystems'), savedSystems.size), - // horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER, + // horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }); let getSystemGrid = () => @@ -4646,7 +4710,7 @@ let createSaveMenu = () => text: key, row: i, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER })); let btn = createViewButton(key); btn.row = i; @@ -4708,7 +4772,7 @@ let createSaveMenu = () => text: getLoc('labelCurrentSystem'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), ui.createButton ({ @@ -4770,8 +4834,8 @@ let createManualMenu = () => text: manualPages[page].title, margin: new Thickness(0, 4), heightRequest: 20, - horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER }); let pageContents = ui.createLabel ({ @@ -4796,8 +4860,8 @@ let createManualMenu = () => text: getLoc('labelSource'), row: 0, column: 0, - horizontalOptions: LayoutOptions.END_AND_EXPAND, - verticalOptions: LayoutOptions.CENTER + horizontalOptions: LayoutOptions.END, + verticalTextAlignment: TextAlignment.CENTER }), sourceEntry ] @@ -4893,7 +4957,7 @@ let createManualMenu = () => text: manualPages[contentsTable[i]].title, row: i, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER })); children.push(ui.createButton ({ @@ -4982,8 +5046,8 @@ let createSeqViewMenu = (level) => renderer.levels[level].length), margin: new Thickness(0, 4), heightRequest: 20, - horizontalOptions: LayoutOptions.CENTER, - verticalOptions: LayoutOptions.CENTER + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER }); let pageContents = ui.createLabel ({ @@ -5035,7 +5099,7 @@ let createSequenceMenu = () => renderer.levels[i].length), row: i, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER })); tmpLvls.push(ui.createButton ({ @@ -5121,7 +5185,7 @@ let createWorldMenu = () => getLoc('terEqModes')[Number(tmpAC)]), row: 2, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }); let ACSwitch = ui.createSwitch ({ @@ -5210,7 +5274,7 @@ let createWorldMenu = () => text: getLoc('labelOfflineReset'), row: 0, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), ODSwitch, ui.createLatexLabel @@ -5218,7 +5282,7 @@ let createWorldMenu = () => text: getLoc('labelResetLvl'), row: 1, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), RLSwitch, ACLabel, @@ -5228,7 +5292,7 @@ let createWorldMenu = () => text: getLoc('labelMeasure'), row: 3, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), MPSwitch, ui.createLatexLabel @@ -5236,7 +5300,7 @@ let createWorldMenu = () => text: getLoc('debugCamPath'), row: 4, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), DCPSwitch, ui.createLatexLabel @@ -5244,7 +5308,7 @@ let createWorldMenu = () => text: getLoc('labelMaxCharsPerTick'), row: 5, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), MCPTEntry, ui.createLatexLabel @@ -5252,7 +5316,7 @@ let createWorldMenu = () => text: getLoc('labelInternalState'), row: 6, column: 0, - verticalOptions: LayoutOptions.CENTER + verticalTextAlignment: TextAlignment.CENTER }), ui.createButton ({ From e20a0217760056a41d0fde7caba743c7b12ce09c Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 14 Feb 2023 14:49:32 +0700 Subject: [PATCH 32/94] Fixed crash when a model is not found --- renderer.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/renderer.js b/renderer.js index 04cdc51..0b9d38f 100644 --- a/renderer.js +++ b/renderer.js @@ -1945,6 +1945,11 @@ class Renderer this.ori = ZAxisQuat.mul(this.ori); break; case '~': + if(!this.system.models.has( + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1] + 1])) + break; + ++this.mdi[this.mdi.length - 1]; this.models.push(this.system.models.get( this.models[this.models.length - 1][ @@ -2099,6 +2104,10 @@ class Renderer this.ori = ZAxisQuat.mul(this.ori); break; case '~': + if(!this.system.models.has( + this.levels[this.lv][this.i + 1])) + break; + ++this.i; this.models.push(this.system.models.get( this.levels[this.lv][this.i])); From e6fbf0da114df4c95c31a1dc337718bd52e9f983 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 20 Feb 2023 02:21:21 +0700 Subject: [PATCH 33/94] Implemented tropism! --- TODO.md | 8 +++- renderer.js | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 4 deletions(-) diff --git a/TODO.md b/TODO.md index d7b262a..96879d0 100644 --- a/TODO.md +++ b/TODO.md @@ -43,8 +43,12 @@ - [x] Separate starting quaternions for upright and sideways - Stop swizzling! - Tropism is still the same direction, so we can simulate sideways vines -- [ ] Investigate sunlight heading (heliotropism) (`$`) - +- [ ] Investigate vertical heading (`$`) (NOT helio-tropism) + - Houdini: $(x,y,z) + Rotates the turtle so the up vector is (0,1,0). Points the turtle in the direction of the point (x,y,z). Default behavior is only to orient and not to change the direction. + - Abop: The symbol $ rolls the turtle around its own axis so that vector L pointing to the left of the turtle is brought to a horizontal position. Consequently, the branch plane is “closest to a horizontal plane,” as required by Honda’s model. From a technical point of view, $ modifies the turtle orientation in space according to the formulae + L = V × H / |V × H| and U = H × L, + where vectors H, L and U are the heading (`\ /`), left (`& ^`) and up (`+ -`) vectors associated with the turtle, V is the direction opposite to gravity, and |A| denotes the length of vector A. - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line diff --git a/renderer.js b/renderer.js index 0b9d38f..ebf41bf 100644 --- a/renderer.js +++ b/renderer.js @@ -1130,6 +1130,23 @@ class Quaternion { return new Quaternion(this.r, -this.i, -this.j, -this.k); } + /** + * Computes the norm of a quaternion. + * @returns {number} the norm. + */ + get norm() + { + return Math.sqrt(this.r ** 2 + this.i ** 2 + this.j ** 2 + this.k ** 2); + } + /** + * Normalises a quaternion. + * @returns {Quaternion} the normalised quaternion. + */ + get normalise() + { + let n = this.norm; + return new Quaternion(this.r / n, this.i / n, this.j / n, this.k / n); + } /** * Returns a rotation vector from the quaternion. * @returns {Vector3} the rotation vector. @@ -1139,6 +1156,82 @@ class Quaternion let r = this.neg.mul(XAxisQuat).mul(this); return new Vector3(r.i, r.j, r.k); } + /** + * Applies a gravi-tropism to the quaternion. + * @param {number} weight the weight of the vector (negative for upwards). + * @returns {Quaternion} a new sagged quaternion. + */ + applyTropism(weight = 0) + { + if(weight == 0) + return this; + + let curRot = this.rotVector; + let newRot = curRot + new Vector3(0, weight, 0); + let n = newRot.length; + if(n == 0) + return this; + newRot /= n; + let dp = curRot.x * newRot.x + curRot.y * newRot.y + + curRot.z * newRot.z; + let axis; + if(dp < -1 + 1e-8) + { + /* Edge case + If the two vectors are in opposite directions, select an axis for + fun. + */ + // Cross product with (0, 0, 1) + axis = new Vector3(-curRot.y, curRot.x, 0); + let an = axis.norm; + if(Math.abs(an) < 0.1) + { + // Cross product with (1, 0, 0) + axis = new Vector3(0, -curRot.z, curRot.y); + } + an = axis.norm; + axis /= an; + return new Quaternion(0, axis.x, axis.y, axis.z).mul(this); + } + axis = new Vector3( + curRot.y * newRot.z - curRot.z * newRot.y, + curRot.z * newRot.x - curRot.x * newRot.z, + curRot.x * newRot.y - curRot.y * newRot.x, + ); + let s = Math.sqrt((1 + dp) * 2); + return new Quaternion( + s / 2, + axis.x / s, + axis.y / s, + axis.z / s + ).mul(this); +// float cosTheta = Vector3f::DotProduct(forward, direction); +// Vector3f axis; + +// if (cosTheta < -1 + 0.001f) { +// // special case when vectors in opposite directions: +// // there is no "ideal" rotation axis +// // So guess one; any will do as long as it's perpendicular to start +// axis = Vector3f::CrossProduct(Vector3f(0.0f, 0.0f, 1.0f), forward); + +// if (axis.Length() * axis.Length() < 0.01) +// axis = Vector3f::CrossProduct(Vector3f(1.0f, 0.0f, 0.0f), forward); + +// axis = Vector3f::Normalize(axis); +// return Quaternion(axis.x, axis.y, axis.z, DegreesToRadians(0)); +// } + +// axis = Vector3f::CrossProduct(forward, direction); +// float s = sqrt((1 + cosTheta) * 2); +// float invs = 1 / s; + +// return Quaternion( +// axis.x * invs, +// axis.y * invs, +// axis.z * invs, +// s * 0.5f +// ); + } /** * Returns the quaternion's string representation. * @returns {string} the string. @@ -1163,7 +1256,7 @@ class LSystem * systems. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', models = {}) + ignoreList = '', models = {}, tropism = 0) { this.userInput = { @@ -1490,7 +1583,7 @@ class Renderer */ constructor(system, figureScale = 1, cameraMode = 0, camX = 0, camY = 0, camZ = 0, followFactor = 0.15, loopMode = 0, upright = false, - quickDraw = false, quickBacktrack = false, backtrackList = '+-&^\\/|[', + quickDraw = false, quickBacktrack = false, backtrackList = '+-&^\\/|[$T', loadModels = true, backtrackTail = false, hesitateApex = true, hesitateNode = true) { @@ -1944,6 +2037,9 @@ class Renderer case '|': this.ori = ZAxisQuat.mul(this.ori); break; + case 'T': + this.ori = this.ori.applyTropism(0.5); + break; case '~': if(!this.system.models.has( this.models[this.models.length - 1][ @@ -2103,6 +2199,9 @@ class Renderer case '|': this.ori = ZAxisQuat.mul(this.ori); break; + case 'T': + this.ori = this.ori.applyTropism(0.5); + break; case '~': if(!this.system.models.has( this.levels[this.lv][this.i + 1])) @@ -2715,6 +2814,7 @@ class Measurer } } +// const sidewayQuat = new Quaternion(1, 0, 0, 0); const uprightQuat = new Quaternion(Math.sqrt(2)/2, 0, 0, -Math.sqrt(2)/2); const XAxisQuat = new Quaternion(0, 1, 0, 0); const ZAxisQuat = new Quaternion(0, 0, 0, 1); From 68ef02128fbaf1e3b74f6936d7d7398163c925d7 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 20 Feb 2023 14:26:39 +0700 Subject: [PATCH 34/94] Fixed calculation bugs with tropism; Added tropism input to systems --- renderer.js | 138 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 80 insertions(+), 58 deletions(-) diff --git a/renderer.js b/renderer.js index ebf41bf..9da8768 100644 --- a/renderer.js +++ b/renderer.js @@ -209,6 +209,7 @@ const locStrings = labelAngle: 'Turning angle (°): ', labelRules: 'Production rules: {0}', labelIgnored: 'Ignored symbols: ', + labelTropism: 'Tropism (gravity): ', labelSeed: 'Seed (non-zero): ', menuRenderer: 'Renderer Menu', @@ -1157,7 +1158,8 @@ class Quaternion return new Vector3(r.i, r.j, r.k); } /** - * Applies a gravi-tropism to the quaternion. + * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion + * Applies a gravi-tropism to the quaternion. Why is negative for upwards? * @param {number} weight the weight of the vector (negative for upwards). * @returns {Quaternion} a new sagged quaternion. */ @@ -1167,7 +1169,7 @@ class Quaternion return this; let curRot = this.rotVector; - let newRot = curRot + new Vector3(0, weight, 0); + let newRot = curRot - new Vector3(0, weight, 0); let n = newRot.length; if(n == 0) return this; @@ -1178,20 +1180,10 @@ class Quaternion if(dp < -1 + 1e-8) { /* Edge case - If the two vectors are in opposite directions, select an axis for - fun. + If the two vectors are in opposite directions, just do the sensible + thing. */ - // Cross product with (0, 0, 1) - axis = new Vector3(-curRot.y, curRot.x, 0); - let an = axis.norm; - if(Math.abs(an) < 0.1) - { - // Cross product with (1, 0, 0) - axis = new Vector3(0, -curRot.z, curRot.y); - } - an = axis.norm; - axis /= an; - return new Quaternion(0, axis.x, axis.y, axis.z).mul(this); + return ZAxisQuat.mul(this); } axis = new Vector3( curRot.y * newRot.z - curRot.z * newRot.y, @@ -1199,38 +1191,13 @@ class Quaternion curRot.x * newRot.y - curRot.y * newRot.x, ); let s = Math.sqrt((1 + dp) * 2); + // I forgore that our quaternions have to be all negative return new Quaternion( - s / 2, + -s / 2, axis.x / s, axis.y / s, axis.z / s ).mul(this); -// float cosTheta = Vector3f::DotProduct(forward, direction); -// Vector3f axis; - -// if (cosTheta < -1 + 0.001f) { -// // special case when vectors in opposite directions: -// // there is no "ideal" rotation axis -// // So guess one; any will do as long as it's perpendicular to start -// axis = Vector3f::CrossProduct(Vector3f(0.0f, 0.0f, 1.0f), forward); - -// if (axis.Length() * axis.Length() < 0.01) -// axis = Vector3f::CrossProduct(Vector3f(1.0f, 0.0f, 0.0f), forward); - -// axis = Vector3f::Normalize(axis); -// return Quaternion(axis.x, axis.y, axis.z, DegreesToRadians(0)); -// } - -// axis = Vector3f::CrossProduct(forward, direction); -// float s = sqrt((1 + cosTheta) * 2); -// float invs = 1 / s; - -// return Quaternion( -// axis.x * invs, -// axis.y * invs, -// axis.z * invs, -// s * 0.5f -// ); } /** * Returns the quaternion's string representation. @@ -1256,7 +1223,7 @@ class LSystem * systems. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', models = {}, tropism = 0) + ignoreList = '', models = {}, tropism = 0.5) { this.userInput = { @@ -1265,7 +1232,8 @@ class LSystem turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, - models: models + models: models, + tropism: tropism }; /** * @type {string[]} the production rules. @@ -1395,6 +1363,8 @@ class LSystem this.rotations.set('^', new Quaternion(c, 0, s, 0)); this.rotations.set('\\', new Quaternion(c, -s, 0, 0)); this.rotations.set('/', new Quaternion(c, s, 0, 0)); + + this.tropism = tropism; } rerollAxiom() { @@ -1533,7 +1503,8 @@ class LSystem turnAngle: this.userInput.turnAngle, seed: this.userInput.seed, ignoreList: this.userInput.ignoreList, - models: this.userInput.models + models: this.userInput.models, + tropism: this.userInput.tropism }; } /** @@ -2038,7 +2009,8 @@ class Renderer this.ori = ZAxisQuat.mul(this.ori); break; case 'T': - this.ori = this.ori.applyTropism(0.5); + this.ori = this.ori.applyTropism( + this.system.tropism); break; case '~': if(!this.system.models.has( @@ -2200,7 +2172,7 @@ class Renderer this.ori = ZAxisQuat.mul(this.ori); break; case 'T': - this.ori = this.ori.applyTropism(0.5); + this.ori = this.ori.applyTropism(this.system.tropism); break; case '~': if(!this.system.models.has( @@ -3940,10 +3912,23 @@ let createSystemMenu = () => tmpIgnore = nt; } }); + let tmpTropism = values.tropism; + let tropismEntry = ui.createEntry + ({ + text: tmpTropism.toString(), + keyboard: Keyboard.NUMERIC, + row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpTropism = Number(nt); + } + }); let tmpSeed = values.seed; let seedLabel = ui.createGrid ({ - row: 1, + row: 2, column: 0, columnDefinitions: ['40*', '30*'], children: @@ -3971,7 +3956,7 @@ let createSystemMenu = () => ({ text: tmpSeed.toString(), keyboard: Keyboard.NUMERIC, - row: 1, + row: 2, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4043,6 +4028,15 @@ let createSystemMenu = () => TextAlignment.CENTER }), ignoreEntry, + ui.createLatexLabel + ({ + text: getLoc('labelTropism'), + row: 1, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + tropismEntry, seedLabel, seedEntry ] @@ -4070,7 +4064,8 @@ let createSystemMenu = () => { Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, - tmpRules, tmpAngle, tmpSeed, tmpIgnore); + tmpRules, tmpAngle, tmpSeed, tmpIgnore, + undefined, tmpTropism); if(tmpSystem) { tmpSystem = null; @@ -4097,6 +4092,7 @@ let createSystemMenu = () => getLoc('labelRules'), ruleEntries.length); ruleStack.children = ruleEntries; ignoreEntry.text = values.ignoreList; + tropismEntry.text = values.tropism.toString(); seedEntry.text = values.seed.toString(); } }) @@ -4318,7 +4314,8 @@ let createSystemClipboardMenu = (values) => tmpSystemDesc = sv.desc; renderer.constructSystem = new LSystem(sv.system.axiom, sv.system.rules, sv.system.turnAngle, - sv.system.seed, sv.system.ignoreList); + sv.system.seed, sv.system.ignoreList, undefined, + sv.system.tropism); tmpSystem = null; if('config' in sv) renderer.configureStaticCamera(...sv.config); @@ -4495,7 +4492,7 @@ let createViewMenu = (title) => tmpAxiom = nt; } }); - let tmpAngle = values.turnAngle; + let tmpAngle = values.turnAngle || 0; let angleEntry = ui.createEntry ({ text: tmpAngle.toString(), @@ -4570,10 +4567,23 @@ let createViewMenu = (title) => tmpIgnore = nt; } }); - let tmpSeed = values.seed; - let seedLabel = ui.createGrid + let tmpTropism = values.tropism || 0.5; + let tropismEntry = ui.createEntry ({ + text: tmpTropism.toString(), + keyboard: Keyboard.NUMERIC, row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpTropism = Number(nt); + } + }); + let tmpSeed = values.seed || 0; + let seedLabel = ui.createGrid + ({ + row: 2, column: 0, columnDefinitions: ['40*', '30*'], children: @@ -4601,7 +4611,7 @@ let createViewMenu = (title) => ({ text: tmpSeed.toString(), keyboard: Keyboard.NUMERIC, - row: 1, + row: 2, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4681,6 +4691,15 @@ let createViewMenu = (title) => TextAlignment.CENTER }), ignoreEntry, + ui.createLatexLabel + ({ + text: getLoc('labelTropism'), + row: 1, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + tropismEntry, seedLabel, seedEntry ] @@ -4750,7 +4769,8 @@ let createViewMenu = (title) => { Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, - tmpRules, tmpAngle, tmpSeed, tmpIgnore); + tmpRules, tmpAngle, tmpSeed, tmpIgnore, + undefined, tmpTropism); tmpSystem = null; renderer.configureStaticCamera(tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright); @@ -4771,7 +4791,8 @@ let createViewMenu = (title) => { desc: tmpDesc, system: new LSystem(tmpAxiom, tmpRules, - tmpAngle, tmpSeed, tmpIgnore).object, + tmpAngle, tmpSeed, tmpIgnore, undefined, + tmpTropism).object, config: [tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright] }); @@ -5559,7 +5580,8 @@ var setInternalState = (stateStr) => tmpSystemName = state.system.title; tmpSystemDesc = state.system.desc; tmpSystem = new LSystem(state.system.axiom, state.system.rules, - state.system.turnAngle, state.system.seed, state.system.ignoreList); + state.system.turnAngle, state.system.seed, state.system.ignoreList, + undefined, state.system.tropism); } if('renderer' in state) From 477a2a07b56c2ae83cd8d91b7e1e76829c535699 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 20 Feb 2023 22:33:24 +0700 Subject: [PATCH 35/94] Attempted to implement vertical alignment --- TODO.md | 6 +- renderer.js | 173 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 118 insertions(+), 61 deletions(-) diff --git a/TODO.md b/TODO.md index 96879d0..9d67ea4 100644 --- a/TODO.md +++ b/TODO.md @@ -26,7 +26,7 @@ - [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Add more comments in the code -- [ ] Update docstrings +- [ ] Update docstrings (done up to Quaternion) - [x] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end @@ -39,7 +39,7 @@ - [ ] Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians -- [ ] Investigate tropism (capital T) +- [x] Investigate tropism (capital T) - [x] Separate starting quaternions for upright and sideways - Stop swizzling! - Tropism is still the same direction, so we can simulate sideways vines @@ -49,6 +49,8 @@ - Abop: The symbol $ rolls the turtle around its own axis so that vector L pointing to the left of the turtle is brought to a horizontal position. Consequently, the branch plane is “closest to a horizontal plane,” as required by Honda’s model. From a technical point of view, $ modifies the turtle orientation in space according to the formulae L = V × H / |V × H| and U = H × L, where vectors H, L and U are the heading (`\ /`), left (`& ^`) and up (`+ -`) vectors associated with the turtle, V is the direction opposite to gravity, and |A| denotes the length of vector A. +- [ ] Add T and $ to gude + - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line diff --git a/renderer.js b/renderer.js index 9da8768..e426a4e 100644 --- a/renderer.js +++ b/renderer.js @@ -167,7 +167,7 @@ const locStrings = saPatienceHint: 'Be patient.', btnSave: 'Save', - btnClear: 'Clear', + btnClear: 'Clear All', btnDefault: '* Reset to Defaults', btnAdd: 'Add', btnReroll: 'Reroll', @@ -874,8 +874,8 @@ Upright` /** * Returns a localised string. - * @param {string} name the internal name of the string. - * @returns {string} the string. + * @param {string} name the string's internal name. + * @returns {string} */ let getLoc = (name, lang = menuLang) => { @@ -890,7 +890,7 @@ let getLoc = (name, lang = menuLang) => /** * Returns a string of a fixed decimal number, with a fairly uniform width. - * @returns {string} the string. + * @returns {string} */ let getCoordString = (x) => x.toFixed(x >= -0.01 ? (x <= 9.999 ? 3 : (x <= 99.99 ? 2 : 1)) : @@ -898,10 +898,10 @@ let getCoordString = (x) => x.toFixed(x >= -0.01 ? ); /** - * Compares for every member of two sets. + * Compares equality for every member of two sets, disregarding order. * @param {Set} xs set 1. * @param {Set} ys set 2. - * @returns {boolean} whether two sets are the exact same (disregarding order). + * @returns {boolean} */ let eqSet = (xs, ys) => xs.size === ys.size && [...xs].every((x) => ys.has(x)); @@ -918,29 +918,25 @@ class LCG { /** * @type {number} the mod of this realm. - * @public but not really. */ this.m = 0x80000000; // 2**31; /** * @type {number} some constant - * @public but shouldn't be. */ this.a = 1103515245; /** * @type {number} some other constant. - * @public please leave me pretty be. */ this.c = 12345; /** * @type {number} the LCG's current state. - * @public honestly. */ this.state = seed % this.m; } /** * Returns a random integer within [0, 2^31). - * @returns {number} the next integer in the generator. + * @returns {number} */ get nextInt() { @@ -951,7 +947,7 @@ class LCG * Returns a random floating point number within [0, 1] or [0, 1). * @param {boolean} [includeEnd] (default: false) whether to include the * number 1 in the range. - * @returns {number} the floating point, corresponding to the next integer. + * @returns {number} */ nextFloat(includeEnd = false) { @@ -970,7 +966,7 @@ class LCG * Returns a random integer within a range of [start, end). * @param {number} start the range's lower bound. * @param {number} end the range's upper bound, plus 1. - * @returns {number} the integer. + * @returns {number} */ nextRange(start, end) { @@ -981,7 +977,7 @@ class LCG /** * Returns a random element from an array. * @param {any[]} array the array. - * @returns the element. + * @returns {any} */ choice(array) { @@ -998,11 +994,11 @@ class Xorshift { this.state = seed; this.mod = 0x100000000; - // 0xffff ffff + // 0x ffffffff + 1 } /** * Returns a random integer within [0, 2^32) probably. - * @returns {number} the next integer in the generator. + * @returns {number} */ get nextInt() { @@ -1017,7 +1013,7 @@ class Xorshift * Returns a random floating point number within [0, 1] or [0, 1). * @param {boolean} [includeEnd] (default: false) whether to include the * number 1 in the range. - * @returns {number} the floating point, corresponding to the next integer. + * @returns {number} */ nextFloat(includeEnd = false) { @@ -1033,7 +1029,7 @@ class Xorshift * Returns a random integer within a range of [start, end). * @param {number} start the range's lower bound. * @param {number} end the range's upper bound, plus 1. - * @returns {number} the integer. + * @returns {number} */ nextRange(start, end) { @@ -1044,7 +1040,7 @@ class Xorshift /** * Returns a random element from an array. * @param {any[]} array the array. - * @returns the element. + * @returns {any} */ choice(array) { @@ -1068,22 +1064,18 @@ class Quaternion { /** * @type {number} the real component. - * @public */ this.r = r; /** * @type {number} the imaginary i component. - * @public */ this.i = i; /** * @type {number} the imaginary j component. - * @public */ this.j = j; /** * @type {number} the imaginary k component. - * @public */ this.k = k; } @@ -1092,7 +1084,7 @@ class Quaternion * Computes the sum of the current quaternion with another. Does not modify * the original quaternion. * @param {Quaternion} quat this other quaternion. - * @returns {Quaternion} the sum. + * @returns {Quaternion} */ add(quat) { @@ -1107,7 +1099,7 @@ class Quaternion * Computes the product of the current quaternion with another. Does not * modify the original quaternion. * @param {Quaternion} quat this other quaternion. - * @returns {Quaternion} the product. + * @returns {Quaternion} */ mul(quat) { @@ -1125,7 +1117,7 @@ class Quaternion * Computes the negation of a quaternion. The negation also acts as the * inverse if the quaternion's norm is 1, which is the case with rotation * quaternions. - * @returns {Quaternion} the negation. + * @returns {Quaternion} */ get neg() { @@ -1133,7 +1125,7 @@ class Quaternion } /** * Computes the norm of a quaternion. - * @returns {number} the norm. + * @returns {number} */ get norm() { @@ -1141,7 +1133,7 @@ class Quaternion } /** * Normalises a quaternion. - * @returns {Quaternion} the normalised quaternion. + * @returns {Quaternion} */ get normalise() { @@ -1149,33 +1141,42 @@ class Quaternion return new Quaternion(this.r / n, this.i / n, this.j / n, this.k / n); } /** - * Returns a rotation vector from the quaternion. - * @returns {Vector3} the rotation vector. + * Returns a heading vector from the quaternion. + * @returns {Vector3} */ - get rotVector() + get headingVector() { - let r = this.neg.mul(XAxisQuat).mul(this); + let r = this.neg.mul(xUpQuat).mul(this); return new Vector3(r.i, r.j, r.k); } /** - * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion - * Applies a gravi-tropism to the quaternion. Why is negative for upwards? - * @param {number} weight the weight of the vector (negative for upwards). - * @returns {Quaternion} a new sagged quaternion. + * Returns an up vector from the quaternion. + * @returns {Vector3} */ - applyTropism(weight = 0) + get upVector() { - if(weight == 0) - return this; - - let curRot = this.rotVector; - let newRot = curRot - new Vector3(0, weight, 0); - let n = newRot.length; - if(n == 0) - return this; - newRot /= n; - let dp = curRot.x * newRot.x + curRot.y * newRot.y + - curRot.z * newRot.z; + let r = this.neg.mul(yUpQuat).mul(this); + return new Vector3(r.i, r.j, r.k); + } + /** + * Returns a side vector (left or right?) from the quaternion. + * @returns {Vector3} + */ + get sideVector() + { + let r = this.neg.mul(zUpQuat).mul(this); + return new Vector3(r.i, r.j, r.k); + } + /** + * Rotate from a heading vector to another. + * @param {Vector3} src the current heading. + * @param {Vector3} dst the target heading. + * @returns {Quaternion} + */ + rotateFrom(src, dst) + { + let dp = src.x * dst.x + src.y * dst.y + + src.z * dst.z; let axis; if(dp < -1 + 1e-8) { @@ -1183,15 +1184,15 @@ class Quaternion If the two vectors are in opposite directions, just do the sensible thing. */ - return ZAxisQuat.mul(this); + return zUpQuat.mul(this); } axis = new Vector3( - curRot.y * newRot.z - curRot.z * newRot.y, - curRot.z * newRot.x - curRot.x * newRot.z, - curRot.x * newRot.y - curRot.y * newRot.x, + src.y * dst.z - src.z * dst.y, + src.z * dst.x - src.x * dst.z, + src.x * dst.y - src.y * dst.x, ); let s = Math.sqrt((1 + dp) * 2); - // I forgore that our quaternions have to be all negative + // I forgore that our quaternions have to be all negative, dunnoe why return new Quaternion( -s / 2, axis.x / s, @@ -1199,9 +1200,53 @@ class Quaternion axis.z / s ).mul(this); } + /** + * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion + * Applies a gravi-tropism vector to the quaternion. + * @param {number} weight the vector's weight (negative for upwards). + * @returns {Quaternion} + */ + applyTropism(weight = 0) + { + if(weight == 0) + return this; + + let curHead = this.headingVector; + let newHead = curHead - new Vector3(0, weight, 0); + let n = newHead.length; + if(n == 0) + return this; + newHead /= n; + return this.rotateFrom(curHead, newHead); + } + /** + * Rolls the quaternion so that its up vector aligns with the earth. + * @returns {Quaternion} + */ + alignToVertical() + { + // L = V×H / |V×H| and U = H×L + let curHead = this.headingVector; + let curUp = this.upVector; + // Can we take a shortcut and just align the side vectors? + let l = new Vector3(curHead.z, 0, -curHead.x); + let n = l.length; + if(n == 0) + return this; + l /= n; + let newUp = new Vector3( + curHead.y * l.z - curHead.z * l.y, + curHead.z * l.x - curHead.x * l.z, + curHead.x * l.y - curHead.y * l.x, + ); + if(newUp.y < 0) + newUp = -newUp; + log(`${curUp}\n\t--> ${newUp}`); + return this.rotateFrom(curUp, newUp); + } /** * Returns the quaternion's string representation. - * @returns {string} the string. + * @returns {string} */ toString() { @@ -1628,6 +1673,9 @@ class Renderer * @public stay away from me. */ this.ori = this.upright ? uprightQuat : new Quaternion(); + log(this.ori.headingVector.toString()); + log(this.ori.upVector.toString()); + log(this.ori.sideVector.toString()); /** * @type {string[]} stores the system's every level. * @public don't touch me. @@ -1905,7 +1953,7 @@ class Renderer */ forward() { - this.state += this.ori.rotVector; + this.state += this.ori.headingVector; } /** * Ticks the clock. @@ -2006,7 +2054,10 @@ class Renderer this.ori); break; case '|': - this.ori = ZAxisQuat.mul(this.ori); + this.ori = zUpQuat.mul(this.ori); + break; + case '$': + this.ori = this.ori.alignToVertical(); break; case 'T': this.ori = this.ori.applyTropism( @@ -2169,7 +2220,10 @@ class Renderer this.ori = this.system.rotations.get('/').mul(this.ori); break; case '|': - this.ori = ZAxisQuat.mul(this.ori); + this.ori = zUpQuat.mul(this.ori); + break; + case '$': + this.ori = this.ori.alignToVertical(); break; case 'T': this.ori = this.ori.applyTropism(this.system.tropism); @@ -2788,8 +2842,9 @@ class Measurer // const sidewayQuat = new Quaternion(1, 0, 0, 0); const uprightQuat = new Quaternion(Math.sqrt(2)/2, 0, 0, -Math.sqrt(2)/2); -const XAxisQuat = new Quaternion(0, 1, 0, 0); -const ZAxisQuat = new Quaternion(0, 0, 0, 1); +const xUpQuat = new Quaternion(0, 1, 0, 0); +const yUpQuat = new Quaternion(0, 0, 1, 0); +const zUpQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); From 164c285db975578ae21d03e3f989b3649d5a5a38 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 21 Feb 2023 15:56:30 +0700 Subject: [PATCH 36/94] Implemented vertical alignment --- TODO.md | 3 ++- renderer.js | 59 ++++++++++++++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/TODO.md b/TODO.md index 9d67ea4..c1b4a45 100644 --- a/TODO.md +++ b/TODO.md @@ -43,12 +43,13 @@ - [x] Separate starting quaternions for upright and sideways - Stop swizzling! - Tropism is still the same direction, so we can simulate sideways vines -- [ ] Investigate vertical heading (`$`) (NOT helio-tropism) +- [x] Investigate vertical heading (`$`) (NOT helio-tropism) - Houdini: $(x,y,z) Rotates the turtle so the up vector is (0,1,0). Points the turtle in the direction of the point (x,y,z). Default behavior is only to orient and not to change the direction. - Abop: The symbol $ rolls the turtle around its own axis so that vector L pointing to the left of the turtle is brought to a horizontal position. Consequently, the branch plane is “closest to a horizontal plane,” as required by Honda’s model. From a technical point of view, $ modifies the turtle orientation in space according to the formulae L = V × H / |V × H| and U = H × L, where vectors H, L and U are the heading (`\ /`), left (`& ^`) and up (`+ -`) vectors associated with the turtle, V is the direction opposite to gravity, and |A| denotes the length of vector A. + - main: roll the turtle around the H axis so that H and U lie in a common vertical plane with U closest to up - [ ] Add T and $ to gude - [ ] Investigate Houdini stochastic syntax for weighted derivations diff --git a/renderer.js b/renderer.js index e426a4e..9d85fb7 100644 --- a/renderer.js +++ b/renderer.js @@ -210,7 +210,7 @@ const locStrings = labelRules: 'Production rules: {0}', labelIgnored: 'Ignored symbols: ', labelTropism: 'Tropism (gravity): ', - labelSeed: 'Seed (non-zero): ', + labelSeed: 'Seed: ', menuRenderer: 'Renderer Menu', labelInitScale: '* Initial scale: ', @@ -1177,16 +1177,15 @@ class Quaternion { let dp = src.x * dst.x + src.y * dst.y + src.z * dst.z; - let axis; + let rotAxis; if(dp < -1 + 1e-8) { /* Edge case - If the two vectors are in opposite directions, just do the sensible - thing. + If the two vectors are in opposite directions, just reverse. */ return zUpQuat.mul(this); } - axis = new Vector3( + rotAxis = new Vector3( src.y * dst.z - src.z * dst.y, src.z * dst.x - src.x * dst.z, src.x * dst.y - src.y * dst.x, @@ -1195,10 +1194,10 @@ class Quaternion // I forgore that our quaternions have to be all negative, dunnoe why return new Quaternion( -s / 2, - axis.x / s, - axis.y / s, - axis.z / s - ).mul(this); + rotAxis.x / s, + rotAxis.y / s, + rotAxis.z / s + ).mul(this).normalise; } /** * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion @@ -1220,29 +1219,33 @@ class Quaternion return this.rotateFrom(curHead, newHead); } /** + * https://gamedev.stackexchange.com/questions/198977/how-to-solve-for-the-angle-of-a-axis-angle-rotation-that-gets-me-closest-to-a-sp/199027#199027 * Rolls the quaternion so that its up vector aligns with the earth. * @returns {Quaternion} */ alignToVertical() { - // L = V×H / |V×H| and U = H×L + // L = V×H / |V×H| let curHead = this.headingVector; let curUp = this.upVector; - // Can we take a shortcut and just align the side vectors? - let l = new Vector3(curHead.z, 0, -curHead.x); - let n = l.length; + let side = new Vector3(curHead.z, 0, -curHead.x); + let n = side.length; if(n == 0) return this; - l /= n; + side /= n; + // U = HxL let newUp = new Vector3( - curHead.y * l.z - curHead.z * l.y, - curHead.z * l.x - curHead.x * l.z, - curHead.x * l.y - curHead.y * l.x, + curHead.y * side.z - curHead.z * side.y, + curHead.z * side.x - curHead.x * side.z, + curHead.x * side.y - curHead.y * side.x, ); - if(newUp.y < 0) - newUp = -newUp; - log(`${curUp}\n\t--> ${newUp}`); - return this.rotateFrom(curUp, newUp); + let a = Math.atan2( + curUp.x * side.x + curUp.y * side.y + curUp.z * side.z, + curUp.x * newUp.x + curUp.y * newUp.y + newUp.z * newUp.z, + ) / 2; + let s = Math.sin(a); + let c = Math.cos(a); + return new Quaternion(-c, s, 0, 0).mul(this).normalise; } /** * Returns the quaternion's string representation. @@ -1402,12 +1405,12 @@ class LSystem * @public but shouldn't be. */ this.rotations = new Map(); - this.rotations.set('+', new Quaternion(c, 0, 0, -s)); - this.rotations.set('-', new Quaternion(c, 0, 0, s)); - this.rotations.set('&', new Quaternion(c, 0, -s, 0)); - this.rotations.set('^', new Quaternion(c, 0, s, 0)); - this.rotations.set('\\', new Quaternion(c, -s, 0, 0)); - this.rotations.set('/', new Quaternion(c, s, 0, 0)); + this.rotations.set('+', new Quaternion(-c, 0, 0, s)); + this.rotations.set('-', new Quaternion(-c, 0, 0, -s)); + this.rotations.set('&', new Quaternion(-c, 0, s, 0)); + this.rotations.set('^', new Quaternion(-c, 0, -s, 0)); + this.rotations.set('\\', new Quaternion(-c, s, 0, 0)); + this.rotations.set('/', new Quaternion(-c, -s, 0, 0)); this.tropism = tropism; } @@ -2841,7 +2844,7 @@ class Measurer } // const sidewayQuat = new Quaternion(1, 0, 0, 0); -const uprightQuat = new Quaternion(Math.sqrt(2)/2, 0, 0, -Math.sqrt(2)/2); +const uprightQuat = new Quaternion(-Math.sqrt(2)/2, 0, 0, Math.sqrt(2)/2); const xUpQuat = new Quaternion(0, 1, 0, 0); const yUpQuat = new Quaternion(0, 0, 1, 0); const zUpQuat = new Quaternion(0, 0, 0, 1); From 58484b419d45c25eb3bc6e47b874449db400724b Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 21 Feb 2023 16:24:05 +0700 Subject: [PATCH 37/94] Added T and $ to guide --- TODO.md | 3 ++- renderer.js => classic.js | 40 +++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 21 deletions(-) rename renderer.js => classic.js (99%) diff --git a/TODO.md b/TODO.md index c1b4a45..ab771c3 100644 --- a/TODO.md +++ b/TODO.md @@ -50,7 +50,7 @@ L = V × H / |V × H| and U = H × L, where vectors H, L and U are the heading (`\ /`), left (`& ^`) and up (`+ -`) vectors associated with the turtle, V is the direction opposite to gravity, and |A| denotes the length of vector A. - main: roll the turtle around the H axis so that H and U lie in a common vertical plane with U closest to up -- [ ] Add T and $ to gude +- [x] Add T and $ to gude - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` @@ -66,6 +66,7 @@ - Buttons in LS menu to move up down (swap rules) - How to update rule entries? - [ ] Regex magic to separate string into actual sequence of symbols + - [ ] Issue: regex for nested brackets in parameters? - Equal comparison changed to `==` instead of `=` in abop to differentiate from the syntax - Store as an extra array of objects diff --git a/renderer.js b/classic.js similarity index 99% rename from renderer.js rename to classic.js index 9d85fb7..6c73a60 100644 --- a/renderer.js +++ b/classic.js @@ -225,7 +225,7 @@ const locStrings = labelUpright: '* Upright figure: ', labelBTTail: 'Draw tail end: ', labelLoadModels: '* (Teaser) Load models: ', - labelQuickdraw: '* Quickdraw (unstable): ', + labelQuickdraw: '* Quickdraw: ', labelQuickBT: '* Quick backtrack: ', labelHesitate: '* Stutter on backtrack: ', labelHesitateApex: '* Stutter at apex: ', @@ -268,9 +268,9 @@ const locStrings = { title: 'Introduction', contents: -`Welcome to the L-systems Renderer! This guide aims to help you understand ` + -`the basics of L-systems, as well as instructions on how to effectively use ` + -`this theory to construct and render them. +`Welcome to the (Classic) L-systems Renderer! This guide aims to help you ` + +`understand the basics of L-systems, as well as instructions on how to ` + +`effectively use this theory to construct and render them. Let's start discovering the wonders of L-systems.` }, @@ -310,6 +310,8 @@ Menu buttons: You pressed on one of them to get here, did you? - Production rules: an unlimited number of rules can be added using the ` + `'Add' button. - Ignored symbols: the turtle will stand still when encountering these symbols. +- Tropism (gravity): determines the amount of gravity applied by the tropism ` + +`(T) command. A negative value will instead lift the branch upwards. - Seed: the seed for a stochastic system can be rerolled or manually set. Note: Any blank rules will be trimmed afterwards.` @@ -338,7 +340,7 @@ Renderer logic: `sequence. Advanced stroke options: -- Quickdraw (unstable): skips over straight consecutive segments. +- Quickdraw: skips over straight consecutive segments. - Quick backtrack: works similarly, but on the way back. - Stutter at apex: pause for one tick at the tips of lines. - Stutter at node: pause for one tick after backtracking through branches.` @@ -416,8 +418,8 @@ F: moves turtle forward to draw a line of length 1. Note: In the original grammar, the lower-case f is used to move the turtle ` + `forward without drawing anything, but that is simply impossible with this ` + `game's 3D graph. So in this theory, any non-reserved symbol will draw a ` + -`line. This includes both upper- and lower-case letters, and potentially ` + -`anything you can throw at it.` +`line. This includes both upper- and lower-case letters (except T), and ` + +`potentially anything you can throw at it.` }, { title: 'Example: The dragon curve', @@ -461,7 +463,7 @@ Scale: 2^lv Centre: (0.5*2^lv, sqrt(3)/4*2^lv, 0)` }, { - title: 'Stacking mechanism', + title: 'Branching mechanisms', contents: `Although numerous fractals can be created using only the basic symbols, ` + `when it comes to modelling branching structures such as trees, the turtle ` + @@ -473,8 +475,8 @@ Stack operations are represented with square brackets: [: records the turtle's position and facing onto a stack. ]: take the topmost element (position and facing) off the stack, and move ` + `the turtle there. -%: cuts off the remainder of its branch by searching for the closing bracket ` + -`] in the branch. +%: cuts off the remainder of a branch, by deleting every symbol up until ` + +`the closing bracket ] in the branch. Note: Due to the game's 3D graph only allowing one continuous path to be ` + `drawn, the turtle will not actually divide itself, but instead backtrack ` + @@ -561,7 +563,14 @@ Centre: (0, 0, 0)` + -: rotate turtle on the z-axis (yaw). & ^: rotate turtle on the y-axis (pitch). \\ /: rotate turtle on the x-axis (roll). -|: reverses turtle direction. + +|: reverses the turtle's direction. +T: applies a force of gravity (tropism) to the turtle's current heading, so ` + +`that it droops downward (with a positive tropism factor), or heads upward ` + +`(with a negative tropism factor). +$: rolls the turtle around its own axis, so that its up vector is closest to ` + +`absolute verticality i.e. the y-axis, and subsequently, its direction is ` + +`closest to lying on a horizontal plane. Note: In other L-system implementations, < and > may be used instead of \\ ` + `and / like in this theory. @@ -1676,9 +1685,6 @@ class Renderer * @public stay away from me. */ this.ori = this.upright ? uprightQuat : new Quaternion(); - log(this.ori.headingVector.toString()); - log(this.ori.upVector.toString()); - log(this.ori.sideVector.toString()); /** * @type {string[]} stores the system's every level. * @public don't touch me. @@ -2008,9 +2014,6 @@ class Renderer let loopLimit = 2; // Shenanigans may arise with models? Try this for(j = 0; j < loopLimit; ++j) { - // log(`${Math.round(this.elapsed)}, ${this.i} ` + - // `${this.levels[this.lv][this.i]} (-${this.cooldown}): ` + - // `${this.stack.length} stacked`) if(this.cooldown > 0 && this.polygonMode <= 0) { --this.cooldown; @@ -2019,8 +2022,6 @@ class Renderer if(this.models.length > 0) { - // log(this.models.toString()); - // log(this.mdi.toString()); // Unreadable pile of shit for(; this.mdi[this.mdi.length - 1] < this.models[this.models.length - 1].length; @@ -2349,7 +2350,6 @@ class Renderer } if(!this.backtrackTail || this.stack.length == 0) { - // log(this.stateString) switch(this.loopMode) { case 2: From a8a93ff61a76c4f99c1a5cf9d1af6d059a728f85 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 21 Feb 2023 17:28:31 +0700 Subject: [PATCH 38/94] Removed models argument from LSystem --- TODO.md | 27 +++++++++++++-------------- classic.js | 20 ++++++++------------ parametric_lsystem.js | 3 +-- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/TODO.md b/TODO.md index ab771c3..b20f326 100644 --- a/TODO.md +++ b/TODO.md @@ -20,7 +20,6 @@ - [ ] Folders for saved systems - [ ] Compress internal state? LZW, LZP - [ ] Ask Gilles about changing the spline used in 3D graph -- [ ] How about locking rotation? (for Navier Stokes) ## 1.0, Mistletoe ed. @@ -39,24 +38,12 @@ - [ ] Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians -- [x] Investigate tropism (capital T) - - [x] Separate starting quaternions for upright and sideways - - Stop swizzling! - - Tropism is still the same direction, so we can simulate sideways vines -- [x] Investigate vertical heading (`$`) (NOT helio-tropism) - - Houdini: $(x,y,z) - Rotates the turtle so the up vector is (0,1,0). Points the turtle in the direction of the point (x,y,z). Default behavior is only to orient and not to change the direction. - - Abop: The symbol $ rolls the turtle around its own axis so that vector L pointing to the left of the turtle is brought to a horizontal position. Consequently, the branch plane is “closest to a horizontal plane,” as required by Honda’s model. From a technical point of view, $ modifies the turtle orientation in space according to the formulae - L = V × H / |V × H| and U = H × L, - where vectors H, L and U are the heading (`\ /`), left (`& ^`) and up (`+ -`) vectors associated with the turtle, V is the direction opposite to gravity, and |A| denotes the length of vector A. - - main: roll the turtle around the H axis so that H and U lie in a common vertical plane with U closest to up -- [x] Add T and $ to gude - - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line - [ ] Parametric systems + - [ ] New option in constructor for MathExpression variables - Different classes - Button in LS menu / save menu to switch modes? - Theory settings? @@ -92,6 +79,18 @@ ## 1.0: Completed +- [x] Investigate tropism (capital T) + - [x] Separate starting quaternions for upright and sideways + - Stop swizzling! + - Tropism is still the same direction, so we can simulate sideways vines +- [x] Investigate vertical heading (`$`) (NOT helio-tropism) + - Houdini: $(x,y,z) + Rotates the turtle so the up vector is (0,1,0). Points the turtle in the direction of the point (x,y,z). Default behavior is only to orient and not to change the direction. + - Abop: The symbol $ rolls the turtle around its own axis so that vector L pointing to the left of the turtle is brought to a horizontal position. Consequently, the branch plane is “closest to a horizontal plane,” as required by Honda’s model. From a technical point of view, $ modifies the turtle orientation in space according to the formulae + L = V × H / |V × H| and U = H × L, + where vectors H, L and U are the heading (`\ /`), left (`& ^`) and up (`+ -`) vectors associated with the turtle, V is the direction opposite to gravity, and |A| denotes the length of vector A. + - main: roll the turtle around the H axis so that H and U lie in a common vertical plane with U closest to up +- [x] Add T and $ to gude - [x] Issue: models are broken because of backtrack rework - [x] Change how models work: - Stochastic models are no longer available diff --git a/classic.js b/classic.js index 6c73a60..eeb056e 100644 --- a/classic.js +++ b/classic.js @@ -1280,7 +1280,7 @@ class LSystem * systems. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', models = {}, tropism = 0.5) + ignoreList = '', tropism = 0.5) { this.userInput = { @@ -1289,7 +1289,6 @@ class LSystem turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, - models: models, tropism: tropism }; /** @@ -1304,8 +1303,6 @@ class LSystem */ this.ignoreList = new Set(ignoreList); this.models = new Map(); - for(let key in models) - this.models.set(key, models[key]); for(let i = 0; i < rules.length; ++i) { @@ -1560,7 +1557,6 @@ class LSystem turnAngle: this.userInput.turnAngle, seed: this.userInput.seed, ignoreList: this.userInput.ignoreList, - models: this.userInput.models, tropism: this.userInput.tropism }; } @@ -2233,7 +2229,7 @@ class Renderer this.ori = this.ori.applyTropism(this.system.tropism); break; case '~': - if(!this.system.models.has( + if(!this.loadModels || !this.system.models.has( this.levels[this.lv][this.i + 1])) break; @@ -4123,7 +4119,7 @@ let createSystemMenu = () => Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore, - undefined, tmpTropism); + tmpTropism); if(tmpSystem) { tmpSystem = null; @@ -4372,7 +4368,7 @@ let createSystemClipboardMenu = (values) => tmpSystemDesc = sv.desc; renderer.constructSystem = new LSystem(sv.system.axiom, sv.system.rules, sv.system.turnAngle, - sv.system.seed, sv.system.ignoreList, undefined, + sv.system.seed, sv.system.ignoreList, sv.system.tropism); tmpSystem = null; if('config' in sv) @@ -4828,7 +4824,7 @@ let createViewMenu = (title) => Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore, - undefined, tmpTropism); + tmpTropism); tmpSystem = null; renderer.configureStaticCamera(tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright); @@ -4849,8 +4845,8 @@ let createViewMenu = (title) => { desc: tmpDesc, system: new LSystem(tmpAxiom, tmpRules, - tmpAngle, tmpSeed, tmpIgnore, undefined, - tmpTropism).object, + tmpAngle, tmpSeed, tmpIgnore, tmpTropism). + object, config: [tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright] }); @@ -5639,7 +5635,7 @@ var setInternalState = (stateStr) => tmpSystemDesc = state.system.desc; tmpSystem = new LSystem(state.system.axiom, state.system.rules, state.system.turnAngle, state.system.seed, state.system.ignoreList, - undefined, state.system.tropism); + state.system.tropism); } if('renderer' in state) diff --git a/parametric_lsystem.js b/parametric_lsystem.js index d35ef4e..9a6ff73 100644 --- a/parametric_lsystem.js +++ b/parametric_lsystem.js @@ -9,7 +9,7 @@ const LS_CONTEXT = class ParametricLSystem { constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', models = {}) + ignoreList = '') { // User input this.userInput = @@ -19,7 +19,6 @@ class ParametricLSystem turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, - models: models }; // Use regex magic to separate let axiomMatches = [...axiom.replace(TRIM_SP, '').matchAll(LS_SYMBOL)]; From 2cb21df18fc95afbdf0c85479b4d6b725f5c2ded Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 21 Feb 2023 17:48:29 +0700 Subject: [PATCH 39/94] Added the loadModels switch for Renderer --- classic.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/classic.js b/classic.js index eeb056e..48ed670 100644 --- a/classic.js +++ b/classic.js @@ -224,7 +224,7 @@ const locStrings = loopModes: ['Off', 'Level', 'Playlist'], labelUpright: '* Upright figure: ', labelBTTail: 'Draw tail end: ', - labelLoadModels: '* (Teaser) Load models: ', + labelLoadModels: '* Load models: ', labelQuickdraw: '* Quickdraw: ', labelQuickBT: '* Quick backtrack: ', labelHesitate: '* Stutter on backtrack: ', @@ -1344,8 +1344,6 @@ class LSystem this.models.set(rs[0][1], [existingDer, rs[1]]); else this.models.set(rs[0][1], [...existingDer, rs[1]]); - - this.ignoreList.add(rs[0][1]); } } else // Stochastic rule @@ -1372,8 +1370,6 @@ class LSystem this.models.set(rs[0][1], [existingDer, rder]); else this.models.set(rs[0][1], [...existingDer, rder]); - - this.ignoreList.add(rs[0][1]); } } } @@ -2146,6 +2142,9 @@ class Renderer let ignored = this.system.ignoreList.has( this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) || + this.loadModels && this.system.models.has( + this.models[this.models.length - 1][ this.mdi[this.mdi.length - 1]]); let breakAhead = this.backtrackList.has( this.models[this.models.length - 1][ @@ -2308,7 +2307,8 @@ class Renderer } let ignored = this.system.ignoreList.has( - this.levels[this.lv][this.i]); + this.levels[this.lv][this.i]) || this.loadModels && + this.system.models.has(this.levels[this.lv][this.i]); let breakAhead = this.backtrackList.has( this.levels[this.lv][this.i + 1]); let btAhead = this.levels[this.lv][this.i + 1] == ']' || @@ -3739,6 +3739,7 @@ let createConfigMenu = () => ({ rowDefinitions: [ + SMALL_BUTTON_HEIGHT, SMALL_BUTTON_HEIGHT, SMALL_BUTTON_HEIGHT ], @@ -3755,7 +3756,9 @@ let createConfigMenu = () => verticalTextAlignment: TextAlignment.CENTER }), - tailSwitch + tailSwitch, + modelLabel, + modelSwitch ] }), ui.createBox From 0ac6554fc2f8fd15d50ab8a8b2b821800965ccad Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 21 Feb 2023 18:15:52 +0700 Subject: [PATCH 40/94] Separated angle entry from axiom entry --- classic.js | 66 +++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/classic.js b/classic.js index 48ed670..efd277e 100644 --- a/classic.js +++ b/classic.js @@ -210,7 +210,7 @@ const locStrings = labelRules: 'Production rules: {0}', labelIgnored: 'Ignored symbols: ', labelTropism: 'Tropism (gravity): ', - labelSeed: 'Seed: ', + labelSeed: 'Seed (≠ 0): ', menuRenderer: 'Renderer Menu', labelInitScale: '* Initial scale: ', @@ -3901,8 +3901,8 @@ let createSystemMenu = () => ({ text: tmpAngle.toString(), keyboard: Keyboard.NUMERIC, - row: 0, - column: 3, + row: 1, + column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => { @@ -3974,7 +3974,7 @@ let createSystemMenu = () => ({ text: tmpTropism.toString(), keyboard: Keyboard.NUMERIC, - row: 1, + row: 2, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -3985,7 +3985,7 @@ let createSystemMenu = () => let tmpSeed = values.seed; let seedLabel = ui.createGrid ({ - row: 2, + row: 3, column: 0, columnDefinitions: ['40*', '30*'], children: @@ -4013,7 +4013,7 @@ let createSystemMenu = () => ({ text: tmpSeed.toString(), keyboard: Keyboard.NUMERIC, - row: 2, + row: 3, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4038,7 +4038,7 @@ let createSystemMenu = () => [ ui.createGrid ({ - columnDefinitions: ['20*', '40*', '25*', '15*'], + columnDefinitions: ['20*', '80*'], children: [ ui.createLatexLabel @@ -4050,15 +4050,6 @@ let createSystemMenu = () => TextAlignment.CENTER }), axiomEntry, - ui.createLatexLabel - ({ - text: getLoc('labelAngle'), - row: 0, - column: 2, - verticalTextAlignment: - TextAlignment.CENTER - }), - angleEntry, ] }), ui.createGrid @@ -4087,12 +4078,21 @@ let createSystemMenu = () => ignoreEntry, ui.createLatexLabel ({ - text: getLoc('labelTropism'), + text: getLoc('labelAngle'), row: 1, column: 0, verticalTextAlignment: TextAlignment.CENTER }), + angleEntry, + ui.createLatexLabel + ({ + text: getLoc('labelTropism'), + row: 2, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), tropismEntry, seedLabel, seedEntry @@ -4554,8 +4554,8 @@ let createViewMenu = (title) => ({ text: tmpAngle.toString(), keyboard: Keyboard.NUMERIC, - row: 0, - column: 3, + row: 1, + column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => { @@ -4629,7 +4629,7 @@ let createViewMenu = (title) => ({ text: tmpTropism.toString(), keyboard: Keyboard.NUMERIC, - row: 1, + row: 2, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4640,7 +4640,7 @@ let createViewMenu = (title) => let tmpSeed = values.seed || 0; let seedLabel = ui.createGrid ({ - row: 2, + row: 3, column: 0, columnDefinitions: ['40*', '30*'], children: @@ -4668,7 +4668,7 @@ let createViewMenu = (title) => ({ text: tmpSeed.toString(), keyboard: Keyboard.NUMERIC, - row: 2, + row: 3, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4701,7 +4701,7 @@ let createViewMenu = (title) => }), ui.createGrid ({ - columnDefinitions: ['20*', '40*', '25*', '15*'], + columnDefinitions: ['20*', '80*'], children: [ ui.createLatexLabel @@ -4713,15 +4713,6 @@ let createViewMenu = (title) => TextAlignment.CENTER }), axiomEntry, - ui.createLatexLabel - ({ - text: getLoc('labelAngle'), - row: 0, - column: 2, - verticalTextAlignment: - TextAlignment.CENTER - }), - angleEntry ] }), ui.createGrid @@ -4750,12 +4741,21 @@ let createViewMenu = (title) => ignoreEntry, ui.createLatexLabel ({ - text: getLoc('labelTropism'), + text: getLoc('labelAngle'), row: 1, column: 0, verticalTextAlignment: TextAlignment.CENTER }), + angleEntry, + ui.createLatexLabel + ({ + text: getLoc('labelTropism'), + row: 2, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), tropismEntry, seedLabel, seedEntry From 2d923f09eaa6878211c3064784f86a3a265ad9d5 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 21 Feb 2023 21:52:53 +0700 Subject: [PATCH 41/94] Implemented Abop-accurate tropism --- TODO.md | 7 +++++-- classic.js | 52 ++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/TODO.md b/TODO.md index b20f326..a418c0b 100644 --- a/TODO.md +++ b/TODO.md @@ -34,9 +34,11 @@ - [x] Classic LS: displays the entire string in a label - Parametric LS: displays symbols and parameters side by side, one symbol/row -- [ ] Turning angles +- [ ] Investigate actual tropism formula + +- [ ] Turning angles (and tropism) - [ ] Formula expressions allow shenanigans such as `360/7`, mostly - - [ ] Button to change mode between degrees and radians + - [ ] Button to change mode between degrees and radians? - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` @@ -83,6 +85,7 @@ - [x] Separate starting quaternions for upright and sideways - Stop swizzling! - Tropism is still the same direction, so we can simulate sideways vines + - Houdini: Apply tropism vector (gravity). This angles the turtle towards the negative Y axis. The amount of change is governed by g. The default change is to use the Gravity parameter. - [x] Investigate vertical heading (`$`) (NOT helio-tropism) - Houdini: $(x,y,z) Rotates the turtle so the up vector is (0,1,0). Points the turtle in the direction of the point (x,y,z). Default behavior is only to orient and not to change the direction. diff --git a/classic.js b/classic.js index efd277e..6492bea 100644 --- a/classic.js +++ b/classic.js @@ -312,7 +312,7 @@ Menu buttons: You pressed on one of them to get here, did you? - Ignored symbols: the turtle will stand still when encountering these symbols. - Tropism (gravity): determines the amount of gravity applied by the tropism ` + `(T) command. A negative value will instead lift the branch upwards. -- Seed: the seed for a stochastic system can be rerolled or manually set. +- Seed: the seed for a stochastic system. Can be manually set or rerolled. Note: Any blank rules will be trimmed afterwards.` }, @@ -567,7 +567,8 @@ Centre: (0, 0, 0)` |: reverses the turtle's direction. T: applies a force of gravity (tropism) to the turtle's current heading, so ` + `that it droops downward (with a positive tropism factor), or heads upward ` + -`(with a negative tropism factor). +`(with a negative tropism factor). This factor should be in the range from ` + +`-1 to 1. $: rolls the turtle around its own axis, so that its up vector is closest to ` + `absolute verticality i.e. the y-axis, and subsequently, its direction is ` + `closest to lying on a horizontal plane. @@ -1177,7 +1178,7 @@ class Quaternion return new Vector3(r.i, r.j, r.k); } /** - * Rotate from a heading vector to another. + * (Deprecated) Rotate from a heading vector to another. Inaccurate! * @param {Vector3} src the current heading. * @param {Vector3} dst the target heading. * @returns {Quaternion} @@ -1210,22 +1211,53 @@ class Quaternion } /** * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion - * Applies a gravi-tropism vector to the quaternion. - * @param {number} weight the vector's weight (negative for upwards). + * (Deprecated) Applies a gravi-tropism vector to the quaternion. Inaccurat! + * @param {number} weight the vector's length (negative for upwards). * @returns {Quaternion} */ - applyTropism(weight = 0) + applyTropismVector(weight = 0) { if(weight == 0) return this; - + let curHead = this.headingVector; let newHead = curHead - new Vector3(0, weight, 0); + log(`${curHead}\n\t--> ${newHead}`) let n = newHead.length; if(n == 0) return this; newHead /= n; - return this.rotateFrom(curHead, newHead); + let result = this.rotateFrom(curHead, newHead); + log(`Expected: ${newHead}\nActual: ${result.headingVector}`); + return result; + } + /** + * Applies a gravi-tropism vector to the quaternion. + * @param {number} weight the branch's susceptibility to bending. + * @returns {Quaternion} + */ + applyTropism(weight = 0) + { + if(weight == 0) + return this; + + // a = e * |HxT| (n) + let curHead = this.headingVector; + let rotAxis = new Vector3(curHead.z, 0, -curHead.x); + let n = rotAxis.length; + if(n == 0) + return this; + rotAxis /= n; + let a = weight * n / 2; + let s = Math.sin(a); + let c = Math.cos(a); + // I don't know why it works the opposite way this time + return this.mul(new Quaternion( + -c, + rotAxis.x * s, + rotAxis.y * s, + rotAxis.z * s + )).normalise; } /** * https://gamedev.stackexchange.com/questions/198977/how-to-solve-for-the-angle-of-a-axis-angle-rotation-that-gets-me-closest-to-a-sp/199027#199027 @@ -1280,7 +1312,7 @@ class LSystem * systems. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', tropism = 0.5) + ignoreList = '', tropism = 0.25) { this.userInput = { @@ -4624,7 +4656,7 @@ let createViewMenu = (title) => tmpIgnore = nt; } }); - let tmpTropism = values.tropism || 0.5; + let tmpTropism = values.tropism || 0.25; let tropismEntry = ui.createEntry ({ text: tmpTropism.toString(), From 1a5e99631b734c7dc44c04893c4b9ce375e348fa Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 22 Feb 2023 00:32:53 +0700 Subject: [PATCH 42/94] Implemented MathExpressions for angle and tropism --- TODO.md | 6 ++---- classic.js | 61 +++++++++++++++++++++++------------------------------- 2 files changed, 28 insertions(+), 39 deletions(-) diff --git a/TODO.md b/TODO.md index a418c0b..6abf20f 100644 --- a/TODO.md +++ b/TODO.md @@ -34,10 +34,8 @@ - [x] Classic LS: displays the entire string in a label - Parametric LS: displays symbols and parameters side by side, one symbol/row -- [ ] Investigate actual tropism formula - -- [ ] Turning angles (and tropism) - - [ ] Formula expressions allow shenanigans such as `360/7`, mostly +- [x] Turning angles (and tropism) + - Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians? - [ ] Investigate Houdini stochastic syntax for weighted derivations diff --git a/classic.js b/classic.js index 6492bea..ba8bf1a 100644 --- a/classic.js +++ b/classic.js @@ -1,20 +1,14 @@ /* L-systems Renderer implementation in Exponential Idle. -Disclaimer: The literature around (OL) L-system's symbols is generally not much -consistent. Therefore, the symbols used here may mean different things in other -implementations. One such example is that \ and / may be swapped; or that + -would turn the cursor clockwise instead of counter (as implemented here). -Another example would be that < and > are used instead of \ and /. - -The maths used in this theory do not resemble a paragon of correctness either, -particularly referencing the horrible butchery of quaternions, and all the -camera rotation slander in the world. In this theory, the vector is initially -heading in the X-axis, instead of the Y/Z-axis, which is more common in other -implementations of L-systems. I'm just a unit circle kind of person. - -If the X is the eyes of a laughing face, then the Y represents my waifu Ms. Y, -and the Z stands for Zombies. +Disclaimer: Differences between LSR and other L-system implementations all +around the web. +- / and \ may be swapped. +- + turns anti-clockwise, - turns clockwise. +- \ and / are used instead of < and >. +- Y-up is used here instead of Z-up. +- Quaternions are used instead of actually intuitive concepts such as matrices. +- Quaternions maths are absolutely butchered. (c) 2022 Temple of Pan (R) (TM) All rights reversed. */ @@ -35,7 +29,6 @@ import { Localization } from '../api/Localization'; import { MathExpression } from '../api/MathExpression'; import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; import { LineBreakMode } from '../api/ui/properties/LineBreakMode'; -import { StackOrientation } from '../api/ui/properties/StackOrientation'; var id = 'L_systems_renderer'; var getName = (language) => @@ -1425,7 +1418,7 @@ class LSystem * @type {number} the turning angle (in degrees). * @public */ - this.turnAngle = turnAngle; + this.turnAngle = MathExpression.parse(turnAngle.toString()).evaluate(); /** * @type {number} half the turning angle (in radians). * @public @@ -1446,7 +1439,7 @@ class LSystem this.rotations.set('\\', new Quaternion(-c, s, 0, 0)); this.rotations.set('/', new Quaternion(-c, -s, 0, 0)); - this.tropism = tropism; + this.tropism = MathExpression.parse(tropism.toString()).evaluate(); } rerollAxiom() { @@ -3928,17 +3921,16 @@ let createSystemMenu = () => tmpAxiom = nt; } }); - let tmpAngle = values.turnAngle; + let tmpAngle = values.turnAngle || '0'; let angleEntry = ui.createEntry ({ text: tmpAngle.toString(), - keyboard: Keyboard.NUMERIC, row: 1, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => { - tmpAngle = Number(nt); + tmpAngle = nt; } }); let tmpRules = values.rules; @@ -4001,20 +3993,19 @@ let createSystemMenu = () => tmpIgnore = nt; } }); - let tmpTropism = values.tropism; + let tmpTropism = values.tropism || '0'; let tropismEntry = ui.createEntry ({ text: tmpTropism.toString(), - keyboard: Keyboard.NUMERIC, row: 2, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => { - tmpTropism = Number(nt); + tmpTropism = nt; } }); - let tmpSeed = values.seed; + let tmpSeed = values.seed || '0'; let seedLabel = ui.createGrid ({ row: 3, @@ -4174,14 +4165,14 @@ let createSystemMenu = () => Sound.playClick(); let values = new LSystem().object; axiomEntry.text = values.axiom; - angleEntry.text = values.turnAngle.toString(); + angleEntry.text = values.turnAngle; tmpRules = values.rules; ruleEntries = []; rulesLabel.text = Localization.format( getLoc('labelRules'), ruleEntries.length); ruleStack.children = ruleEntries; ignoreEntry.text = values.ignoreList; - tropismEntry.text = values.tropism.toString(); + tropismEntry.text = values.tropism; seedEntry.text = values.seed.toString(); } }) @@ -4201,6 +4192,7 @@ let createNamingMenu = () => text: tmpName, row: 0, column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpName = nt; @@ -4212,6 +4204,7 @@ let createNamingMenu = () => text: tmpDesc, row: 0, column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpDesc = nt; @@ -4423,7 +4416,7 @@ let createStateClipboardMenu = (values) => let sysEntry = ui.createEntry ({ text: tmpState, - clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + // clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { tmpState = nt; @@ -4581,17 +4574,16 @@ let createViewMenu = (title) => tmpAxiom = nt; } }); - let tmpAngle = values.turnAngle || 0; + let tmpAngle = values.turnAngle || '0'; let angleEntry = ui.createEntry ({ text: tmpAngle.toString(), - keyboard: Keyboard.NUMERIC, row: 1, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => { - tmpAngle = Number(nt); + tmpAngle = nt; } }); let tmpRules = []; @@ -4656,20 +4648,19 @@ let createViewMenu = (title) => tmpIgnore = nt; } }); - let tmpTropism = values.tropism || 0.25; + let tmpTropism = values.tropism || '0'; let tropismEntry = ui.createEntry ({ text: tmpTropism.toString(), - keyboard: Keyboard.NUMERIC, row: 2, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => { - tmpTropism = Number(nt); + tmpTropism = nt; } }); - let tmpSeed = values.seed || 0; + let tmpSeed = values.seed || '0'; let seedLabel = ui.createGrid ({ row: 3, @@ -4804,7 +4795,7 @@ let createViewMenu = (title) => // horizontalTextAlignment: // TextAlignment.CENTER, verticalTextAlignment: TextAlignment.CENTER, - margin: new Thickness(0, 12) + margin: new Thickness(0, 9) }), ui.createGrid ({ From bc0cf8bcb2eaf03e81d2b902d87c1ecaba0ddea2 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 22 Feb 2023 11:51:48 +0700 Subject: [PATCH 43/94] Added buttons to move rules --- TODO.md | 25 ++++++----- classic.js | 96 +++++++++++++++++++++++++++++++++++++++---- parametric_lsystem.js | 8 +++- 3 files changed, 107 insertions(+), 22 deletions(-) diff --git a/TODO.md b/TODO.md index 6abf20f..532c331 100644 --- a/TODO.md +++ b/TODO.md @@ -27,17 +27,6 @@ - [ ] Add more comments in the code - [ ] Update docstrings (done up to Quaternion) -- [x] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end - -- [ ] Revamp sequence menu - - Level 0: 10 chars (`View`) - - [x] Classic LS: displays the entire string in a label - - Parametric LS: displays symbols and parameters side by side, one symbol/row - -- [x] Turning angles (and tropism) - - Formula expressions allow shenanigans such as `360/7`, mostly - - [ ] Button to change mode between degrees and radians? - - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line @@ -50,8 +39,6 @@ - Lemma stages? - Make `f` move without returning like `F` - Top-down processing priority - - Buttons in LS menu to move up down (swap rules) - - How to update rule entries? - [ ] Regex magic to separate string into actual sequence of symbols - [ ] Issue: regex for nested brackets in parameters? - Equal comparison changed to `==` instead of `=` in abop to differentiate @@ -77,8 +64,20 @@ - If stored by maps: Keys can be any data type. - If stored by objects: written in `parametric_lsystem.js` +- [ ] Revamp sequence menu + - Level 0: 10 chars (`View`) + - [x] Classic LS: displays the entire string in a label + - Parametric LS: displays symbols and parameters side by side, one symbol/row + +- [x] Turning angles (and tropism) + - Formula expressions allow shenanigans such as `360/7`, mostly + - [ ] Button to change mode between degrees and radians? + ## 1.0: Completed +- [x] Buttons in LS menu to move up down (swap rules) + - How to update rule entries? +- [x] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end - [x] Investigate tropism (capital T) - [x] Separate starting quaternions for upright and sideways - Stop swizzling! diff --git a/classic.js b/classic.js index ba8bf1a..bcea298 100644 --- a/classic.js +++ b/classic.js @@ -163,6 +163,8 @@ const locStrings = btnClear: 'Clear All', btnDefault: '* Reset to Defaults', btnAdd: 'Add', + btnUp: '▲', + btnDown: '▼', btnReroll: 'Reroll', btnConstruct: 'Construct', btnDelete: 'Delete', @@ -3935,10 +3937,13 @@ let createSystemMenu = () => }); let tmpRules = values.rules; let ruleEntries = []; + let ruleMoveBtns = []; for(let i = 0; i < tmpRules.length; ++i) { ruleEntries.push(ui.createEntry ({ + row: i, + column: 0, text: tmpRules[i], clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => @@ -3946,6 +3951,23 @@ let createSystemMenu = () => tmpRules[i] = nt; } })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } } let rulesLabel = ui.createLatexLabel ({ @@ -3953,22 +3975,25 @@ let createSystemMenu = () => verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }); - let ruleStack = ui.createStackLayout + let ruleStack = ui.createGrid ({ - children: ruleEntries + columnDefinitions: ['7*', '1*', 0], + children: [...ruleEntries, ...ruleMoveBtns] }); let addRuleButton = ui.createButton ({ text: getLoc('btnAdd'), row: 0, column: 1, - heightRequest: 40, + heightRequest: SMALL_BUTTON_HEIGHT, onClicked: () => { Sound.playClick(); let i = ruleEntries.length; ruleEntries.push(ui.createEntry ({ + row: i, + column: 0, text: '', clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => @@ -3976,9 +4001,26 @@ let createSystemMenu = () => tmpRules[i] = nt; } })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } rulesLabel.text = Localization.format(getLoc('labelRules'), ruleEntries.length); - ruleStack.children = ruleEntries; + ruleStack.children = [...ruleEntries, ...ruleMoveBtns]; } }); let tmpIgnore = values.ignoreList; @@ -4590,10 +4632,13 @@ let createViewMenu = (title) => for(let i = 0; i < values.rules.length; ++i) tmpRules[i] = values.rules[i]; let ruleEntries = []; + let ruleMoveBtns = []; for(let i = 0; i < tmpRules.length; ++i) { ruleEntries.push(ui.createEntry ({ + row: i, + column: 0, text: tmpRules[i], clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => @@ -4601,6 +4646,23 @@ let createViewMenu = (title) => tmpRules[i] = nt; } })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } } let rulesLabel = ui.createLatexLabel ({ @@ -4608,9 +4670,10 @@ let createViewMenu = (title) => verticalTextAlignment: TextAlignment.CENTER, margin: new Thickness(0, 12) }); - let ruleStack = ui.createStackLayout + let ruleStack = ui.createGrid ({ - children: ruleEntries + columnDefinitions: ['7*', '1*', 0], + children: [...ruleEntries, ...ruleMoveBtns] }); let addRuleButton = ui.createButton ({ @@ -4624,6 +4687,8 @@ let createViewMenu = (title) => let i = ruleEntries.length; ruleEntries.push(ui.createEntry ({ + row: i, + column: 0, text: '', clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => @@ -4631,9 +4696,26 @@ let createViewMenu = (title) => tmpRules[i] = nt; } })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } rulesLabel.text = Localization.format(getLoc('labelRules'), ruleEntries.length); - ruleStack.children = ruleEntries; + ruleStack.children = [...ruleEntries, ...ruleMoveBtns]; } }); let tmpIgnore = values.ignoreList; diff --git a/parametric_lsystem.js b/parametric_lsystem.js index 9a6ff73..b853ea1 100644 --- a/parametric_lsystem.js +++ b/parametric_lsystem.js @@ -2,7 +2,11 @@ import { MathExpression } from "../api/MathExpression"; const TRIM_SP = /\s+/g; const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; -const LS_SYMBOL = /(.)(\(([^\)]+)\))?/g; +// BIG TODO: instead of using regex to match nested brackets, just use regular +// loops to capture axiom and rule symbols. The other regexes are still fine. +const LS_SYMBOL_WITHOUT_NESTED_BRACKETS = /(.)(\(([^\)]+)\))?/g; +const LS_SYMBOL_STILL_WIP = /(.)(\((\(((?>[^()]+)|(?R))*\)|[^()])+\))?/g; +// Context doesn't need to check for nested brackets! const LS_CONTEXT = /((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; @@ -118,7 +122,7 @@ class ParametricLSystem // [i][2]: condition tmpRule.condition = MathExpression.parse(rulesMatches[i][2]); - // let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t==0 = [+(30)G]F/(180)A(2):0.5, [-(30)G]F\(180)A(2):0.5']); + // let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t==0=[+(30)G]F/(180)A(2):0.5,[-(30)G]F\(180)A(2):0.5']); // [i][4+4k]: derivation(s) // [i][6+4k]: probability From 7e0de23a3a2b29ba61f6b17493884d5615d7aba4 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 22 Feb 2023 11:56:54 +0700 Subject: [PATCH 44/94] Constructing in view menu now closes save menu --- classic.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/classic.js b/classic.js index bcea298..ab967e0 100644 --- a/classic.js +++ b/classic.js @@ -4504,7 +4504,7 @@ let createStateClipboardMenu = (values) => return menu; } -let createViewMenu = (title) => +let createViewMenu = (title, parentMenu) => { let systemObj = savedSystems.get(title); let values = systemObj.system; @@ -4938,6 +4938,7 @@ let createViewMenu = (title) => tmpCY, tmpCZ, tmpUpright); tmpSystemName = title; tmpSystemDesc = tmpDesc; + parentMenu.hide(); menu.hide(); } }), @@ -5025,7 +5026,7 @@ let createSaveMenu = () => onClicked: () => { Sound.playClick(); - let viewMenu = createViewMenu(title, systemGrid); + let viewMenu = createViewMenu(title, menu); viewMenu.onDisappearing = () => { systemGrid.children = getSystemGrid(); From 9cee138600f5c46e540924a16e2296310f5e2e63 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 22 Feb 2023 12:00:00 +0700 Subject: [PATCH 45/94] Removed 'margins' from move buttons --- classic.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classic.js b/classic.js index ab967e0..77aef73 100644 --- a/classic.js +++ b/classic.js @@ -3977,7 +3977,7 @@ let createSystemMenu = () => }); let ruleStack = ui.createGrid ({ - columnDefinitions: ['7*', '1*', 0], + columnDefinitions: ['7*', '1*'], children: [...ruleEntries, ...ruleMoveBtns] }); let addRuleButton = ui.createButton @@ -4672,7 +4672,7 @@ let createViewMenu = (title, parentMenu) => }); let ruleStack = ui.createGrid ({ - columnDefinitions: ['7*', '1*', 0], + columnDefinitions: ['7*', '1*'], children: [...ruleEntries, ...ruleMoveBtns] }); let addRuleButton = ui.createButton From 6be2804e5ff6cd2758cc032c4571c03b29f63d80 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 22 Feb 2023 12:13:40 +0700 Subject: [PATCH 46/94] Proofread guide pages --- classic.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/classic.js b/classic.js index 77aef73..448b1fb 100644 --- a/classic.js +++ b/classic.js @@ -267,25 +267,25 @@ const locStrings = `understand the basics of L-systems, as well as instructions on how to ` + `effectively use this theory to construct and render them. -Let's start discovering the wonders of L-systems.` +Let's start discovering the wonders of L-systems (and the renderer).` }, { title: 'Controls: Theory screen', contents: `The theory screen consists of the renderer and its controls. -Level: the system's iteration. Pressing + or - will grow/revert the system ` + -`respectively. +Level: the iteration/generation/stage of the system. Pressing + or - will ` + +`derive/revert the system. - Pressing the Level button will reveal all levels of the system. - Holding + or - will buy/refund levels in bulks of 10. Tickspeed: controls the renderer's drawing speed (up to 10 lines/sec, which ` + `produces less accurate lines). -- Pressing the Tickspeed button will toggle between the Tickspeed and Tick ` + +- Pressing the Tickspeed button will toggle between Tickspeed and Tick ` + `length modes. -- Holding - will create an 'anchor' on the current level then set it to 0, ` + -`pausing the renderer. Holding + afterwards will return the renderer to the ` + -`previously anchored speed. +- Holding - will create an 'anchor' on the current level before setting it ` + +`to 0, pausing the renderer. Holding + afterwards will return the renderer ` + +`to the previously anchored speed. Reset: located on the top right. Pressing this button will reset the renderer. @@ -306,8 +306,9 @@ Menu buttons: You pressed on one of them to get here, did you? `'Add' button. - Ignored symbols: the turtle will stand still when encountering these symbols. - Tropism (gravity): determines the amount of gravity applied by the tropism ` + -`(T) command. A negative value will instead lift the branch upwards. -- Seed: the seed for a stochastic system. Can be manually set or rerolled. +`(T) command. +- Seed: determines the seed for a stochastic system. Can be manually set or ` + +`rerolled. Note: Any blank rules will be trimmed afterwards.` }, @@ -561,8 +562,8 @@ Centre: (0, 0, 0)` |: reverses the turtle's direction. T: applies a force of gravity (tropism) to the turtle's current heading, so ` + -`that it droops downward (with a positive tropism factor), or heads upward ` + -`(with a negative tropism factor). This factor should be in the range from ` + +`that it drops downward (with a positive tropism factor), or lifts upward ` + +`(with a negative tropism factor). The factor should be in the range from ` + `-1 to 1. $: rolls the turtle around its own axis, so that its up vector is closest to ` + `absolute verticality i.e. the y-axis, and subsequently, its direction is ` + @@ -1307,7 +1308,7 @@ class LSystem * systems. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', tropism = 0.25) + ignoreList = '', tropism = 0) { this.userInput = { From e036970600d16f4f9e19a6837b20f071a829358e Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 23 Feb 2023 00:11:13 +0700 Subject: [PATCH 47/94] Opened gallery! Added advanced lilac branch in gallery --- classic.js | 82 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 16 deletions(-) diff --git a/classic.js b/classic.js index 448b1fb..436a372 100644 --- a/classic.js +++ b/classic.js @@ -267,7 +267,9 @@ const locStrings = `understand the basics of L-systems, as well as instructions on how to ` + `effectively use this theory to construct and render them. -Let's start discovering the wonders of L-systems (and the renderer).` +Let's start discovering the wonders of L-systems (and the renderer). + +Notice: A gallery for L-systems has opened! Visit page 28 for details.` }, { title: 'Controls: Theory screen', @@ -556,6 +558,7 @@ Centre: (0, 0, 0)` contents: `Using a yaw-pitch-roll orientation system, we can also generate figures in 3D. +Counter-clockwise and clockwise respectively, + -: rotate turtle on the z-axis (yaw). & ^: rotate turtle on the y-axis (pitch). \\ /: rotate turtle on the x-axis (roll). @@ -715,14 +718,16 @@ Upright` { title: 'Appendix: Summary of symbols', contents: -`Any letter: moves turtle forward to draw a line of length 1. +`Any letter (except T): moves turtle forward to draw a line of length 1. + -: rotate turtle on the z-axis (yaw). & ^: rotate turtle on the y-axis (pitch). \\ /: rotate turtle on the x-axis (roll). -(counter-clockwise and clockwise, respectively) + |: reverses turtle direction. +T: applies tropism (gravity) to branch. +$: aligns turtle's up vector to vertical. -[: pushes the turtle's state onto a stack. +[: pushes turtle state onto a stack. ]: pops the stack's topmost element onto the turtle. %: cuts off the remainder of a branch. @@ -739,6 +744,11 @@ Upright` `Welcome to the LSR Art Academy. Thanks for finishing the manual, by the way! And today's class: Tick length. +For a background observation, Exponential Idle's 3D graph seems to be using ` + +`a Bézier-like spline with no locality. Therefore, it is not suitable for ` + +`drawing straight lines. However, this does not mean we cannot get anything ` + +`out of it, and today's class will demonstrate otherwise. + Now, while tickspeed might be more of a familiar concept to the idle ` + `fellows, in LSR it posesses a flaw: it is not consistent. For instance, at ` + `9 tickspeed, the renderer would skip one tick out of every 10, making the ` + @@ -756,7 +766,8 @@ Now, while tickspeed might be more of a familiar concept to the idle ` + `would be too slow for large scale figures. - 0.3 sec: Tick length 0.3 holds the most powerful secret in this whole ` + `universe: it can create the straightest lines out of this family. No ` + -`trickery needed! +`trickery needed! As the 3D graph seems to be running on a 3-tick cycle, ` + +`the sampled points line up precisely with the renderer's drawing. - 0.4 sec: this one can really spice the figure up by tying up cute knots ` + `between corners occasionally, mimicking leaf shapes on a tree. - 0.5 sec: with slight occasional overshoots, tick length 0.5 proves itself ` + @@ -816,9 +827,37 @@ Generally, in figures such as this or the Koch snowflake, it'd be better to ` + `due to the tail end being a backtrack itself, of course.` }, { - title: 'Appendix: Botched L-systems', + title: 'Gallery', + contents: +`Welcome to a L-systems gallery. Enjoy! + +Notice: The gallery is open for submission! +Mail me your own L-systems, so it can be included in the gallery. +Maybe over Discord. Reddit account. Arcane-mail logistics!` + }, + { + title: 'Lilac branch (Advanced)', contents: -`Here are the systems created for another theory of mine, Botched L-system.` +`A more complex version of the previous lilac branch in the Models section, ` + +`complete with detailed models and copious utilisation of tropism. + +Axiom: +S~A +S = FS +A = T[--//~K][++//~K]I///~A +~A = [+++~a~a~a~a] +~a = -{[^-F.][--FF.][&-F.].}+^^^ +K = ~K +~K = [FT[F]+++~k~k~k~k] +~k = -{[^--F.][F-^-F.][^--F|++^--F|+F+F.][-F+F.][&--F|++&--F|+F+F.][F-&-F.][&--F.].}+^^^ +I = Fi +i = Fj +j = J[--FF~A][++FF~A] +Turning angle: 30° +Tropism: 0.16 + +Applies static camera: +Scale: 2*lv+1 +Centre: (2*lv+1, lv/2+3/4, 0)` }, { title: 'Botched Cultivar FF', @@ -868,11 +907,6 @@ Applies static camera: (mathematically unproven) Scale: 3^lv Centre: (0.25*3^lv, 0.75*3^lv, 0) Upright` - }, - { - title: 'Appendix: Lemma\'s Garden', - contents: -`Here's to LG, coming out in Never.` } ] } @@ -2876,7 +2910,7 @@ const zUpQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); let globalRNG = new Xorshift(Date.now()); -let contentsTable = [1, 2, 3, 4, 5, 6, 7, 10, 12, 15, 19, 21, 23, 24, 27]; +let contentsTable = [0, 1, 2, 3, 4, 5, 6, 7, 10, 12, 15, 19, 21, 23, 24, 27]; let manualSystems = { 8: @@ -2920,7 +2954,7 @@ let manualSystems = 'F=F[+i][-i]F', 'i=Ii,IIi' ], 60, 0, 'i'), - config: ["2*2^lv", 0, 0, 0, false] + config: ['2*2^lv', 0, 0, 0, false] }, 16: { @@ -2974,16 +3008,32 @@ let manualSystems = config: ['3*lv', 0, '1.5*lv', 0, true] }, 28: + { + system: new LSystem('+S~A', [ + 'S=FS', + 'A=T[--//~K][++//~K]I///~A', + '~A=[+++~a~a~a~a]', + '~a=-{[^-F.][--FF.][&-F.].}+^^^', + 'K=~K', + '~K=[FT[F]+++~k~k~k~k]', + '~k=-{[^--F.][F-^-F.][^--F|++^--F|+F+F.][-F+F.][&--F|++&--F|+F+F.][F-&-F.][&--F.].}+^^^', + 'I=Fi', + 'i=Fj', + 'j=J[--FF~A][++FF~A]' + ], 30, 0, '', 0.16), + config: ['2*lv+1', '2*lv+1', 'lv/2+3/4', 0, false] + }, + 29: { system: new LSystem('X', ['F=FF', 'X=F-[[X]+X]+F[-X]-X'], 15), config: ['2^lv', 0, '2^lv', 0, true] }, - 29: + 30: { system: new LSystem('X', ['F=F[+F]XF', 'X=F-[[X]+X]+F[-FX]-X'], 27), config: ['1.5*2^lv', '0.225*2^lv', '-0.75*2^lv', 0, false] }, - 30: + 31: { system: new LSystem('X', [ 'E=XEXF-', From 225ff908faf5544603483cb90cfa11bfc52211fe Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 24 Feb 2023 23:58:50 +0700 Subject: [PATCH 48/94] Updated docstrings for LSystem --- TODO.md | 7 +- classic.js | 162 ++++++++++++++---------------------------- parametric_lsystem.js | 76 +++++++++++++++----- 3 files changed, 117 insertions(+), 128 deletions(-) diff --git a/TODO.md b/TODO.md index 532c331..a905a8d 100644 --- a/TODO.md +++ b/TODO.md @@ -10,8 +10,6 @@ ## Other considerations -- [ ] Arrange coding streams - - Ask if people would be interested - [ ] A more detailed README - Showcases the power of tickspeed and stroke options - Discusses limitations of the game @@ -25,14 +23,17 @@ - [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Add more comments in the code -- [ ] Update docstrings (done up to Quaternion) +- [ ] Update docstrings (done up to LSystem) - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line +- [ ] Option to use old tropisme? + - [ ] Parametric systems - [ ] New option in constructor for MathExpression variables + - [ ] Button in LS menu next to axiom entry - Different classes - Button in LS menu / save menu to switch modes? - Theory settings? diff --git a/classic.js b/classic.js index 436a372..133a856 100644 --- a/classic.js +++ b/classic.js @@ -133,6 +133,7 @@ let getSmallBtnSize = (width) => const BUTTON_HEIGHT = getBtnSize(ui.screenWidth); const SMALL_BUTTON_HEIGHT = getSmallBtnSize(ui.screenWidth); const ENTRY_CHAR_LIMIT = 5000; +const TRIM_SP = /\s+/g; const locStrings = { en: @@ -1232,12 +1233,12 @@ class Quaternion ); let s = Math.sqrt((1 + dp) * 2); // I forgore that our quaternions have to be all negative, dunnoe why - return new Quaternion( + return this.mul(new Quaternion( -s / 2, rotAxis.x / s, rotAxis.y / s, rotAxis.z / s - ).mul(this).normalise; + )).normalise; } /** * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion @@ -1252,13 +1253,11 @@ class Quaternion let curHead = this.headingVector; let newHead = curHead - new Vector3(0, weight, 0); - log(`${curHead}\n\t--> ${newHead}`) let n = newHead.length; if(n == 0) return this; newHead /= n; let result = this.rotateFrom(curHead, newHead); - log(`Expected: ${newHead}\nActual: ${result.headingVector}`); return result; } /** @@ -1337,40 +1336,54 @@ class LSystem * @constructor * @param {string} axiom the starting sequence. * @param {string[]} rules the production rules. - * @param {number} turnAngle (default: 30) the turning angle (in degrees). + * @param {string} turnAngle (default: 0) the turning angle (in degrees). * @param {number} seed (default: 0) the seed used for stochastic * systems. + * @param {string} ignoreList a list of symbols to be ignored by the turtle. + * @param {string} tropism the tropism factor. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, ignoreList = '', tropism = 0) { + /** + * @type {object} the user input in its original form. + */ this.userInput = { axiom: axiom, - rules: this.getPurged(rules), + rules: this.purgeEmpty(rules), turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, tropism: tropism }; /** - * @type {string[]} the production rules. - * @public + * @type {string} the starting sequence. + */ + this.axiom = axiom; + /** + * @type {Map} the production rules. */ this.rules = new Map(); - this.contextRules = new Map(); /** - * @type {set} a list of symbols ignored by the renderer. - * @public + * @type {set} a set of symbols ignored by the turtle. */ this.ignoreList = new Set(ignoreList); + /** + * @type {Map} the models to be used by the renderer. + */ this.models = new Map(); + // Rules processing. for(let i = 0; i < rules.length; ++i) { if(rules[i] !== '') { - let rs = rules[i].split('='); + let rs = rules[i].replace(TRIM_SP, '').split('='); + /* + Old rules format where rules without a derivation get added to + the ignore list, due to the old internal state's limitations. + */ if(rs.length < 2) { if(i == 0) @@ -1381,8 +1394,6 @@ class LSystem ]); continue; } - for(let i = 0; i < 2; ++i) - rs[i] = rs[i].trim(); let rder = rs[1].split(','); if(rder.length == 1) // Regular rule @@ -1397,7 +1408,7 @@ class LSystem else this.rules.set(rs[0], [...existingDer, rs[1]]); } - else if(rs[0].length == 2 && rs[0][0] == '~') + else if(rs[0].length == 2 && rs[0][0] == '~') // Model { let existingDer = this.models.get(rs[0][1]); if(!existingDer) @@ -1410,9 +1421,6 @@ class LSystem } else // Stochastic rule { - for(let i = 0; i < rder.length; ++i) - rder[i] = rder[i].trim(); - if(rs[0].length == 1) { let existingDer = this.rules.get(rs[0]); @@ -1423,7 +1431,7 @@ class LSystem else this.rules.set(rs[0], [...existingDer, rder]); } - else if(rs[0].length == 2 && rs[0][0] == '~') + else if(rs[0].length == 2 && rs[0][0] == '~') // Model { let existingDer = this.models.get(rs[0][1]); if(!existingDer) @@ -1436,99 +1444,39 @@ class LSystem } } } - /** - * @type {number} the seed (for stochastic systems). - * @public - */ - this.seed = seed; /** * @type {Xorshift} the random number generator for this system. - * @public not sure, ask Itsuki. */ - this.RNG = new Xorshift(this.seed); + this.RNG = new Xorshift(seed); /** - * @type {string} the starting sequence. - * @public + * @type {number} half the turning angle (in radians) for use in quats. */ - this.axiom = axiom; - /** - * @type {number} the turning angle (in degrees). - * @public - */ - this.turnAngle = MathExpression.parse(turnAngle.toString()).evaluate(); - /** - * @type {number} half the turning angle (in radians). - * @public - */ - this.halfAngle = this.turnAngle * Math.PI / 360; - let s = Math.sin(this.halfAngle); - let c = Math.cos(this.halfAngle); + this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate() * + Math.PI / 360; /** * @type {Map} a map of rotation quaternions for * quicker calculations. - * @public but shouldn't be. */ this.rotations = new Map(); + let s = Math.sin(this.halfAngle); + let c = Math.cos(this.halfAngle); this.rotations.set('+', new Quaternion(-c, 0, 0, s)); this.rotations.set('-', new Quaternion(-c, 0, 0, -s)); this.rotations.set('&', new Quaternion(-c, 0, s, 0)); this.rotations.set('^', new Quaternion(-c, 0, -s, 0)); this.rotations.set('\\', new Quaternion(-c, s, 0, 0)); this.rotations.set('/', new Quaternion(-c, -s, 0, 0)); - + /** + * @type {number} the tropism factor. + */ this.tropism = MathExpression.parse(tropism.toString()).evaluate(); } - rerollAxiom() - { - this.axiom = this.userInput.axiom; - } - getRecursiveModels(sequence) - { - let result; - let count = 0; - if(typeof sequence === 'string') - { - result = ''; - for(let i = 0; i < sequence.length; ++i) - { - let deriv; - if(sequence[i] == '~' && this.models.has(sequence[i + 1])) - { - let r = this.getRecursiveModels( - this.models.get(sequence[i + 1])); - deriv = r.result; - count += r.count; - } - else - deriv = sequence[i]; - if(typeof deriv === 'string') - result += deriv; - else - result += deriv[this.RNG.nextRange(0, deriv.length)]; - - count += deriv.length; - } - } - else - { - result = []; - for(let i = 0; i < sequence.length; ++i) - { - let r = this.getRecursiveModels(sequence[i]); - result.push(r.result); - count += r.count; - } - } - return { - count: count, - result: result - }; - } /** * Derive a sequence from the input string. * @param {string} state the input string. - * @returns {string} the derivation. + * @returns {object} `next`: the starting position to be derived next tick. + * `result`: the work completed in the current tick. */ derive(sequence, start = 0) { @@ -1583,16 +1531,20 @@ class LSystem }; } /** - * Sets the system's seed. + * (Deprecated) Sets the system's seed from the outside in. * @param {number} seed the seed. */ - set rerollSeed(seed) + set seed(seed) { - this.seed = seed; this.userInput.seed = seed; this.RNG = new Xorshift(this.seed); } - getPurged(rules) + /** + * Purge the rules of empty lines. + * @param {string[]} rules rules. + * @returns {string[]} + */ + purgeEmpty(rules) { let result = []; let idx = 0; @@ -1607,11 +1559,15 @@ class LSystem } return result; } + /** + * Returns a deep copy (hopefully) of the user input to prevent overwrites. + * @returns {object} + */ get object() { return { axiom: this.userInput.axiom, - rules: this.getPurged(this.userInput.rules), + rules: this.purgeEmpty(this.userInput.rules), turnAngle: this.userInput.turnAngle, seed: this.userInput.seed, ignoreList: this.userInput.ignoreList, @@ -1620,20 +1576,11 @@ class LSystem } /** * Returns the system's string representation. - * @returns {string} the string. + * @returns {string} */ toString() { - let result = `${this.axiom} ${this.turnAngle} ${this.seed} ` + - `${[...this.ignoreList].join('')}`; - for(let [key, value] of this.rules) - { - if(typeof value === 'string') - result += ` ${key}=${value}`; - else - result += ` ${key}=${value.join(',')}`; - } - return result; + return JSON.stringify(this.userInput, undefined, 4); } } @@ -2004,8 +1951,7 @@ class Renderer */ set seed(seed) { - this.system.rerollSeed = seed; - this.system.rerollAxiom(); + this.system.seed = seed; this.nextDeriveIdx = 0; this.loaded = -1; this.loadTarget = this.lv; diff --git a/parametric_lsystem.js b/parametric_lsystem.js index b853ea1..3be92b1 100644 --- a/parametric_lsystem.js +++ b/parametric_lsystem.js @@ -2,18 +2,15 @@ import { MathExpression } from "../api/MathExpression"; const TRIM_SP = /\s+/g; const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; -// BIG TODO: instead of using regex to match nested brackets, just use regular -// loops to capture axiom and rule symbols. The other regexes are still fine. -const LS_SYMBOL_WITHOUT_NESTED_BRACKETS = /(.)(\(([^\)]+)\))?/g; -const LS_SYMBOL_STILL_WIP = /(.)(\((\(((?>[^()]+)|(?R))*\)|[^()])+\))?/g; // Context doesn't need to check for nested brackets! const LS_CONTEXT = /((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; +// But individual symbols do. class ParametricLSystem { constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '') + ignoreList = '', tropism = 0, variables = {}) { // User input this.userInput = @@ -23,21 +20,16 @@ class ParametricLSystem turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, + tropism: tropism, + variables: variables }; // Use regex magic to separate - let axiomMatches = [...axiom.replace(TRIM_SP, '').matchAll(LS_SYMBOL)]; - this.axiom = ''; - this.axiomParams = []; - // let axiomReassembly = ''; - for(let i = 0; i < axiomMatches.length; ++i) - { - // axiomReassembly += axiomMatches[i][0]; - this.axiom += axiomMatches[i][1]; - this.axiomParams.push(axiomMatches[i][3]); - // Indices 1 and 3 are symbol and parameters - } + let axiomMatches = this.parseSequence(axiom.replace(TRIM_SP, '')); + this.axiom = axiomMatches.sequence; + this.axiomParams = axiomMatches.params; + // console.log(this.axiom); - // console.log(axiomReassembly); + // console.log(this.axiomParams); for(let i = 0; i < this.axiomParams.length; ++i) { if(typeof this.axiomParams[i] == 'undefined') @@ -177,6 +169,56 @@ class ParametricLSystem }; } + /** + * Parse a sequence to return one array of characters and one of parameters. + * @param {string} sequence the sequence to be parsed. + * @returns {object} + */ + parseSequence(sequence) + { + let result = ''; + let resultParams = []; + let bracketLvl = 0; + let start = null; + for(let i = 0; i < sequence.length; ++i) + { + switch(sequence[i]) + { + case ' ': + log('Blank space detected.') + break; + case '(': + ++bracketLvl; + if(bracketLvl == 1) + start = i + 1; + break; + case ')': + if(!bracketLvl) + { + log('You\'ve clearly made a bracket error.'); + break; + } + --bracketLvl; + if(!bracketLvl) + resultParams.push(sequence.slice(start, i)); + break; + default: + if(bracketLvl) + break; + + result += sequence[i]; + if(sequence[i + 1] != '(') + resultParams.push(null); + break; + } + } + return { + sequence: result, + params: resultParams + }; + // Tested this out on Chrome console, it worked. + } + getAncestree(sequence) { // Scanning behaviour should be very similar to renderer drawing. From 1f919caf28c3199b52cf42a924f4c200fc89c775 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 25 Feb 2023 00:17:34 +0700 Subject: [PATCH 49/94] Enhanced looping behaviour with tails --- classic.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/classic.js b/classic.js index 133a856..33e57f2 100644 --- a/classic.js +++ b/classic.js @@ -2357,18 +2357,16 @@ class Renderer switch(this.loopMode) { case 2: - l.buy(1); - if(this.backtrackTail) + if(!this.backtrackTail) return; + l.buy(1); break; case 1: - this.reset(false); - if(this.backtrackTail) + if(!this.backtrackTail) return; + this.reset(false); break; case 0: - if(this.backtrackTail) - this.state = new Vector3(0, 0, 0); return; } } From 4c31e1cffc2f02f40bc551ad3ed7c7148cb19506 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 25 Feb 2023 03:45:45 +0700 Subject: [PATCH 50/94] Rewrote docstrings for Renderer --- TODO.md | 2 +- classic.js | 356 ++++++++++++++++++++++++++++------------------------- 2 files changed, 192 insertions(+), 166 deletions(-) diff --git a/TODO.md b/TODO.md index a905a8d..1f8a460 100644 --- a/TODO.md +++ b/TODO.md @@ -23,7 +23,7 @@ - [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Add more comments in the code -- [ ] Update docstrings (done up to LSystem) +- [ ] Update docstrings (done up to Renderer) - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` diff --git a/classic.js b/classic.js index 33e57f2..81aa597 100644 --- a/classic.js +++ b/classic.js @@ -29,6 +29,7 @@ import { Localization } from '../api/Localization'; import { MathExpression } from '../api/MathExpression'; import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; import { LineBreakMode } from '../api/ui/properties/LineBreakMode'; +import { BigNumber } from '../api/BigNumber'; var id = 'L_systems_renderer'; var getName = (language) => @@ -134,6 +135,7 @@ const BUTTON_HEIGHT = getBtnSize(ui.screenWidth); const SMALL_BUTTON_HEIGHT = getSmallBtnSize(ui.screenWidth); const ENTRY_CHAR_LIMIT = 5000; const TRIM_SP = /\s+/g; +const BACKTRACK_LIST = new Set('+-&^\\/|[$T'); const locStrings = { en: @@ -225,7 +227,7 @@ const locStrings = labelQuickBT: '* Quick backtrack: ', labelHesitate: '* Stutter on backtrack: ', labelHesitateApex: '* Stutter at apex: ', - labelHesitateNode: '* Stutter at node: ', + labelHesitateFork: '* Stutter at fork: ', labelBTList: '* Backtrack list: ', labelRequireReset: '* Modifying this setting will require a reset.', @@ -342,7 +344,7 @@ Advanced stroke options: - Quickdraw: skips over straight consecutive segments. - Quick backtrack: works similarly, but on the way back. - Stutter at apex: pause for one tick at the tips of lines. -- Stutter at node: pause for one tick after backtracking through branches.` +- Stutter at fork: pause for one tick after backtracking through branches.` }, { title: 'Saving and loading', @@ -789,7 +791,7 @@ Now, open your renderer menu textbook to the last section. There are about 4 ` + `comes to both precision and aesthetics. - Quick backtrack: this one's a reliable one, trading only a little beauty ` + `for some extra speed. -- Stutter at apex/node: now, this is what I mean when I say hesitation is ` + +- Stutter at apex/fork: now, this is what I mean when I say hesitation is ` + `not defeat. Pausing for even just one tick can give your figure just enough ` + `cohesion it really needs. To prove this, try loading the Arrow weed then ` + `alternate between drawing with these option on and off, at 0.1 tick length, ` + @@ -1336,9 +1338,8 @@ class LSystem * @constructor * @param {string} axiom the starting sequence. * @param {string[]} rules the production rules. - * @param {string} turnAngle (default: 0) the turning angle (in degrees). - * @param {number} seed (default: 0) the seed used for stochastic - * systems. + * @param {string} turnAngle the turning angle (in degrees). + * @param {number} seed the seed used for stochastic systems. * @param {string} ignoreList a list of symbols to be ignored by the turtle. * @param {string} tropism the tropism factor. */ @@ -1346,7 +1347,14 @@ class LSystem ignoreList = '', tropism = 0) { /** - * @type {object} the user input in its original form. + * @type {{ + * axiom: string, + * rules: string[], + * turnAngle: string, + * seed: number, + * ignoreList: string, + * tropism: string + * }} the user input in its original form. */ this.userInput = { @@ -1473,10 +1481,11 @@ class LSystem } /** - * Derive a sequence from the input string. + * Derive a sequence from the input string. `next` denotes the starting + * position to be derived next tick. `result` contains the work completed + * for the current tick. * @param {string} state the input string. - * @returns {object} `next`: the starting position to be derived next tick. - * `result`: the work completed in the current tick. + * @returns {{next: number, result: string}} */ derive(sequence, start = 0) { @@ -1561,7 +1570,14 @@ class LSystem } /** * Returns a deep copy (hopefully) of the user input to prevent overwrites. - * @returns {object} + * @returns {{ + * axiom: string, + * rules: string[], + * turnAngle: string, + * seed: number, + * ignoreList: string, + * tropism: string + * }} */ get object() { @@ -1580,7 +1596,7 @@ class LSystem */ toString() { - return JSON.stringify(this.userInput, undefined, 4); + return JSON.stringify(this.object, null, 4); } } @@ -1592,162 +1608,190 @@ class Renderer /** * @constructor * @param {LSystem} system the L-system to be handled. - * @param {string} figureScale (default: 1) the zoom level expression. - * @param {boolean} cameraMode (default: 0) the camera mode. - * @param {number} camX (default: 0) the camera's x-axis centre. - * @param {number} camY (default: 0) the camera's y-axis centre. - * @param {number} camZ (default: 0) the camera's z-axis centre. - * @param {number} followFactor (default: 0.1; between 0 and 1) the - * camera's cursor-following speed. - * @param {number} loopMode (default: 0; between 0 and 2) the renderer's - * looping mode. - * @param {boolean} upright (default: false) whether to rotate the system - * around the z-axis by 90 degrees. - * @param {boolean} quickDraw (default: false) whether to skip through - * straight lines on the way forward. - * @param {boolean} quickBacktrack (default: false) whether to skip through - * straight lines on the way backward. - * @param {string} backtrackList (default: '+-&^\\/|[') a list of symbols to - * act as stoppers for backtracking. + * @param {string} figureScale the zoom level expression. + * @param {boolean} cameraMode the camera mode. + * @param {string} camX the camera's x-axis centre. + * @param {string} camY the camera's y-axis centre. + * @param {string} camZ the camera's z-axis centre. + * @param {number} followFactor the camera's cursor-following speed. + * @param {number} loopMode the renderer's looping mode. + * @param {boolean} upright whether to rotate the system around the z-axis + * by 90 degrees. + * @param {boolean} quickDraw whether to skip through straight lines on the + * way forward. + * @param {boolean} quickBacktrack whether to skip through straight lines on + * the way backward. + * @param {boolean} loadModels whether to load dedicated models for symbols. + * @param {boolean} backtrackTail whether to backtrack at the end of a loop. + * @param {boolean} hesitateApex whether to stutter for 1 tick at apices. + * @param {boolean} hesitateFork whether to stutter for 1 tick at forks. */ constructor(system, figureScale = 1, cameraMode = 0, camX = 0, camY = 0, camZ = 0, followFactor = 0.15, loopMode = 0, upright = false, - quickDraw = false, quickBacktrack = false, backtrackList = '+-&^\\/|[$T', - loadModels = true, backtrackTail = false, hesitateApex = true, - hesitateNode = true) + quickDraw = false, quickBacktrack = false, loadModels = true, + backtrackTail = false, hesitateApex = true, hesitateFork = true) { /** * @type {LSystem} the L-system being handled. - * @public */ this.system = system; + /** + * @type {string} kept for comparison in the renderer menu. + */ this.figScaleStr = figureScale.toString(); + /** + * @type {MathExpression} the figure scale expression. + */ this.figScaleExpr = MathExpression.parse(this.figScaleStr); + /** + * @type {number} the calculated figure scale. + */ this.figureScale = 1; /** * @type {boolean} the camera mode. - * @public */ this.cameraMode = Math.round(Math.min(Math.max(cameraMode, 0), 2)); + /** + * @type {string} kept for comparison in the renderer menu. + */ this.camXStr = camX.toString(); + /** + * @type {string} kept for comparison in the renderer menu. + */ this.camYStr = camY.toString(); + /** + * @type {string} kept for comparison in the renderer menu. + */ this.camZStr = camZ.toString(); + /** + * @type {MathExpression} the camera x expression. + */ this.camXExpr = MathExpression.parse(this.camXStr); + /** + * @type {MathExpression} the camera y expression. + */ this.camYExpr = MathExpression.parse(this.camYStr); + /** + * @type {MathExpression} the camera z expression. + */ this.camZExpr = MathExpression.parse(this.camZStr); /** - * @type {Vector3} the static camera's coordinates. - * @public + * @type {Vector3} the calculated static camera coordinates. */ this.camCentre = new Vector3(0, 0, 0); /** * @type {number} the follow factor. - * @public */ this.followFactor = Math.min(Math.max(followFactor, 0), 1); /** * @type {number} the looping mode. - * @public */ this.loopMode = Math.round(Math.min(Math.max(loopMode, 0), 2)); /** * @type {boolean} the x-axis' orientation. - * @public */ this.upright = upright; /** * @type {boolean} whether to skip through straight lines on the way * forward. - * @public */ this.quickDraw = quickDraw; /** * @type {boolean} whether to skip through straight lines on the way * back. - * @public */ this.quickBacktrack = quickBacktrack; /** - * @type {string} a list of symbols to act as stoppers for backtracking. - * @public + * @type {boolean} whether to load models. */ - this.backtrackList = new Set(backtrackList); this.loadModels = loadModels; + /** + * @type {boolean} whether to backtrack at the end. + */ this.backtrackTail = backtrackTail; + /** + * @type {boolean} whether to hesitate at apices. + */ this.hesitateApex = hesitateApex; - this.hesitateNode = hesitateNode; /** - * @type {Vector3} the cursor's position. - * @public but shouldn't be. + * @type {boolean} whether to hesitate at forks. + */ + this.hesitateFork = hesitateFork; + /** + * @type {Vector3} the turtle's position. */ this.state = new Vector3(0, 0, 0); /** - * @type {Quaternion} the cursor's orientation. - * @public stay away from me. + * @type {Quaternion} the turtle's orientation. */ this.ori = this.upright ? uprightQuat : new Quaternion(); /** - * @type {string[]} stores the system's every level. - * @public don't touch me. + * @type {string[]} every level of the current system. */ this.levels = []; /** * @type {number} the current level (updates after buying the variable). - * @public don't modify this please. */ this.lv = -1; /** * @type {number} the maximum level loaded. - * @public don't mothify this either. */ this.loaded = -1; /** - * @type {number} the load target. - * @public don't. + * @type {number} the load target level. */ this.loadTarget = 0; /** * @type {[Vector3, Quaternion][]} stores cursor states for brackets. - * @public no. */ this.stack = []; /** * @type {number[]} stores the indices of the other stack. - * @public don't touch this. */ this.idxStack = []; + /** + * @type {string[]} keeps the currently rendered models. + */ this.models = []; + /** + * @type {number[]} keeps the indices of the other stack. + */ this.mdi = []; /** * @type {number} the current index of the sequence. - * @public don't know. */ this.i = 0; /** * @type {number} the elapsed time. - * @public */ this.elapsed = 0; + /** + * @type {number} the number of turns before the renderer starts working + * again. + */ this.cooldown = 0; /** * @type {Vector3} the last tick's camera position. - * @public didn't tell you so. */ this.lastCamera = new Vector3(0, 0, 0); + /** + * @type {Vector3} the last tick's camera velocity. + */ this.lastCamVel = new Vector3(0, 0, 0); /** * @type {number} the next index to update for the current level. - * @public I told you so many times that you shouldn't access these. */ this.nextDeriveIdx = 0; + /** + * @type {number} how many nested polygons currently in (pls keep at 1). + */ this.polygonMode = 0; } /** * Updates the renderer's level. * @param {number} level the target level. - * @param {boolean} seedChanged (default: false) whether the seed has - * changed. + * @param {boolean} seedChanged whether the seed has changed. */ update(level, seedChanged = false) { @@ -1830,9 +1874,9 @@ class Renderer * Configures every parameter of the renderer, except the system. * @param {string} figureScale the zoom level expression. * @param {boolean} cameraMode the camera mode. - * @param {number} camX the camera's x-axis centre. - * @param {number} camY the camera's y-axis centre. - * @param {number} camZ the camera's z-axis centre. + * @param {string} camX the camera's x-axis centre. + * @param {string} camY the camera's y-axis centre. + * @param {string} camZ the camera's z-axis centre. * @param {number} followFactor the camera's cursor-following speed. * @param {number} loopMode the renderer's looping mode. * @param {boolean} upright whether to rotate the system around the z-axis @@ -1841,19 +1885,21 @@ class Renderer * way forward. * @param {boolean} quickBacktrack whether to skip through straight lines * on the way backward. - * @param {string} backtrackList a list of symbols to act as stoppers for - * backtracking. + * @param {boolean} loadModels whether to load dedicated models for symbols. + * @param {boolean} backtrackTail whether to backtrack at the end of a loop. + * @param {boolean} hesitateApex whether to stutter for 1 tick at apices. + * @param {boolean} hesitateFork whether to stutter for 1 tick at forks. */ configure(figureScale, cameraMode, camX, camY, camZ, followFactor, - loopMode, upright, quickDraw, quickBacktrack, backtrackList, loadModels, - backtrackTail, hesitateApex, hesitateNode) + loopMode, upright, quickDraw, quickBacktrack, loadModels, backtrackTail, + hesitateApex, hesitateFork) { let requireReset = (figureScale !== this.figScaleStr) || (upright != this.upright) || (quickDraw != this.quickDraw) || (quickBacktrack != this.quickBacktrack) || (loadModels != this.loadModels) || (hesitateApex != this.hesitateApex) || - (hesitateNode != this.hesitateNode); + (hesitateFork != this.hesitateFork); this.figScaleStr = figureScale.toString(); this.figScaleExpr = MathExpression.parse(this.figScaleStr); @@ -1879,26 +1925,20 @@ class Renderer this.upright = upright; this.quickDraw = quickDraw; this.quickBacktrack = quickBacktrack; - let btl = new Set(backtrackList); - if(!eqSet(btl, this.backtrackList)) - requireReset = true; - this.backtrackList = btl; this.loadModels = loadModels; this.backtrackTail = backtrackTail; this.hesitateApex = hesitateApex; - this.hesitateNode = hesitateNode; + this.hesitateFork = hesitateFork; if(requireReset) this.reset(); - - return requireReset; } /** * Configures only the parameters related to the static camera mode. * @param {string} figureScale the zoom level expression. - * @param {number} camX the camera's x-axis centre. - * @param {number} camY the camera's y-axis centre. - * @param {number} camZ the camera's z-axis centre. + * @param {string} camX the camera's x-axis centre. + * @param {string} camY the camera's y-axis centre. + * @param {string} camZ the camera's z-axis centre. * @param {boolean} upright whether to rotate the system around the z-axis * by 90 degrees. */ @@ -1966,11 +2006,13 @@ class Renderer } /** * Ticks the clock. + * @param {number} dt the amount of time passed. */ tick(dt) { if(this.lv > this.loaded + 1 || - typeof this.levels[this.lv] === 'undefined') + typeof this.levels[this.lv] === 'undefined' || + this.levels[this.lv].length == 0) return; if(this.i >= this.levels[this.lv].length && this.loopMode == 0) @@ -2108,7 +2150,7 @@ class Renderer this.idxStack.pop(); if(moved) this.cooldown = 1; - if(this.hesitateNode && this.polygonMode <= 0) + if(this.hesitateFork && this.polygonMode <= 0) { ++this.mdi[this.mdi.length - 1]; return; @@ -2154,7 +2196,7 @@ class Renderer this.loadModels && this.system.models.has( this.models[this.models.length - 1][ this.mdi[this.mdi.length - 1]]); - let breakAhead = this.backtrackList.has( + let breakAhead = BACKTRACK_LIST.has( this.models[this.models.length - 1][ this.mdi[this.mdi.length - 1] + 1]); let btAhead = this.models[this.models.length - 1][ @@ -2274,7 +2316,7 @@ class Renderer this.idxStack.pop(); if(moved) this.cooldown = 1; - if(this.hesitateNode && this.polygonMode <= 0) + if(this.hesitateFork && this.polygonMode <= 0) { ++this.i; return; @@ -2317,7 +2359,7 @@ class Renderer let ignored = this.system.ignoreList.has( this.levels[this.lv][this.i]) || this.loadModels && this.system.models.has(this.levels[this.lv][this.i]); - let breakAhead = this.backtrackList.has( + let breakAhead = BACKTRACK_LIST.has( this.levels[this.lv][this.i + 1]); let btAhead = this.levels[this.lv][this.i + 1] == ']' || this.i == this.levels[this.lv].length - 1; @@ -2379,14 +2421,22 @@ class Renderer } } } + /** + * Return swizzled coordinates according to the in-game system. The game + * uses Android UI coordinates, which is X-right Y-down Z-face. + * @param {Vector3} coords the original coordinates. + * @returns {Vector3} + */ swizzle(coords) { - // The game uses left-handed Y-up, I mean Y-down coordinates. - // if(this.upright) - // return new Vector3(-coords.y, -coords.x, coords.z); - + // The game uses left-handed Y-up, aka Y-down coordinates. return new Vector3(coords.x, -coords.y, coords.z); } + /** + * Returns a variable's value for maths expressions. + * @param {string} v the variable's name. + * @returns {BigNumber} + */ getVariable(v) { switch(v) @@ -2397,7 +2447,7 @@ class Renderer } /** * Returns the camera centre's coordinates. - * @returns {Vector3} the coordinates. + * @returns {Vector3} */ get centre() { @@ -2407,8 +2457,8 @@ class Renderer return this.swizzle(-this.camCentre / this.figureScale); } /** - * Returns the cursor's coordinates. - * @returns {Vector3} the coordinates. + * Returns the turtle's coordinates. + * @returns {Vector3} */ get cursor() { @@ -2417,7 +2467,7 @@ class Renderer } /** * Returns the camera's coordinates. - * @returns {Vector3} the coordinates. + * @returns {Vector3} */ get camera() { @@ -2443,13 +2493,9 @@ class Renderer } } /** - * Returns the cursor's orientation. - * @returns {Quaternion} the orientation. + * Returns the static camera configuration. + * @returns {[string, string, string, string, boolean]} */ - get angles() - { - return this.ori; - } get staticCamera() { return [ @@ -2462,6 +2508,7 @@ class Renderer } /** * Returns the elapsed time. + * @returns {[number, number]} */ get elapsedTime() { @@ -2471,16 +2518,16 @@ class Renderer ]; } /** - * Returns the current progress on this level. - * @returns {number[]} the current progress in fractions. + * Returns the current progress on this level, in a fraction. + * @returns {[number, number]} */ get progressFrac() { return [this.i, this.levels[this.lv].length]; } /** - * Returns the current progress on this level. - * @returns {number} (between 0 and 100) the current progress. + * Returns the current progress on this level, in percent. + * @returns {number} */ get progressPercent() { @@ -2495,8 +2542,8 @@ class Renderer return result; } /** - * Returns the current progress as a string. - * @returns {string} the string. + * Returns the current progress fraction as a string. + * @returns {string} */ get progressString() { @@ -2505,7 +2552,7 @@ class Renderer } /** * Returns a loading message. - * @returns {string} the string. + * @returns {string} */ get loadingString() { @@ -2516,7 +2563,7 @@ class Renderer } /** * Returns the cursor's position as a string. - * @returns {string} the string. + * @returns {string} */ get stateString() { @@ -2529,7 +2576,7 @@ class Renderer } /** * Returns the cursor's orientation as a string. - * @returns {string} the string. + * @returns {string} */ get oriString() { @@ -2539,18 +2586,36 @@ class Renderer return `\\begin{matrix}q=${this.ori.toString()},&${this.progressString} \\end{matrix}`; } + /** + * Returns the object representation of the renderer. + * @returns {object} + */ + get object() + { + return { + figureScale: this.figScaleStr, + cameraMode: this.cameraMode, + camX: this.camXStr, + camY: this.camYStr, + camZ: this.camZStr, + followFactor: this.followFactor, + loopMode: this.loopMode, + upright: this.upright, + loadModels: this.loadModels, + quickDraw: this.quickDraw, + quickBacktrack: this.quickBacktrack, + backtrackTail: this.backtrackTail, + hesitateApex: this.hesitateApex, + hesitateFork: this.hesitateFork + } + } /** * Returns the renderer's string representation. - * @returns {string} the string. + * @returns {string} */ toString() { - return `${this.figScaleStr} ${this.cameraMode} ${this.camXStr} ` + - `${this.camYStr} ${this.camZStr} ${this.followFactor} ` + - `${this.loopMode} ${this.upright ? 1 : 0} ${this.quickDraw ? 1 : 0} ` + - `${this.quickBacktrack ? 1 : 0} ${[...this.backtrackList].join('')} ` + - `${this.loadModels ? 1 : 0} ${this.backtrackTail ? 1 : 0} ` + - `${this.hesitateApex} ${this.hesitateNode}`; + return JSON.stringify(this.object, null, 4); } } @@ -3659,10 +3724,10 @@ let createConfigMenu = () => } } }); - let tmpHesN = renderer.hesitateNode; + let tmpHesN = renderer.hesitateFork; let hesNLabel = ui.createLatexLabel ({ - text: getLoc('labelHesitateNode'), + text: getLoc('labelHesitateFork'), row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER @@ -3684,25 +3749,6 @@ let createConfigMenu = () => } } }); - // let tmpEXB = [...renderer.backtrackList].join(''); - // let EXBLabel = ui.createLatexLabel - // ({ - // text: getLoc('labelBTList'), - // row: 3, - // column: 0, - // verticalTextAlignment: TextAlignment.CENTER - // }); - // let EXBEntry = ui.createEntry - // ({ - // text: tmpEXB, - // row: 3, - // column: 1, - // horizontalTextAlignment: TextAlignment.END, - // onTextChanged: (ot, nt) => - // { - // tmpEXB = nt; - // } - // }); let menu = ui.createPopup ({ @@ -3852,10 +3898,9 @@ let createConfigMenu = () => onClicked: () => { Sound.playClick(); - let requireReset = renderer.configure(tmpZE, - tmpCM, tmpCX, tmpCY, tmpCZ, tmpFF, tmpLM, - tmpUpright, tmpQD, tmpQB, undefined, tmpModel, - tmpTail, tmpHesA, tmpHesN); + renderer.configure(tmpZE, tmpCM, tmpCX, tmpCY, + tmpCZ, tmpFF, tmpLM, tmpUpright, tmpQD, tmpQB, + tmpModel, tmpTail, tmpHesA, tmpHesN); lvlControls.updateDescription(); menu.hide(); } @@ -3882,15 +3927,14 @@ let createConfigMenu = () => QDSwitch.isToggled = rx.quickDraw; tmpQB = rx.quickBacktrack; QBSwitch.isToggled = rx.quickBacktrack; - EXBEntry.text = [...rx.backtrackList].join(''); tmpModel = rx.loadModels; modelSwitch.isToggled = rx.loadModels; tmpTail = rx.backtrackTail; tailSwitch.isToggled = rx.backtrackTail; tmpHesA = rx.hesitateApex; hesASwitch.isToggled = rx.hesitateApex; - tmpHesN = rx.hesitateNode; - hesNSwitch.isToggled = rx.hesitateNode; + tmpHesN = rx.hesitateFork; + hesNSwitch.isToggled = rx.hesitateFork; lvlControls.updateDescription(); // menu.hide(); } @@ -5666,24 +5710,7 @@ var getInternalState = () => JSON.stringify measurePerformance: measurePerformance, debugCamPath: debugCamPath, maxCharsPerTick: maxCharsPerTick, - renderer: - { - figureScale: renderer.figScaleStr, - cameraMode: renderer.cameraMode, - camX: renderer.camXStr, - camY: renderer.camYStr, - camZ: renderer.camZStr, - followFactor: renderer.followFactor, - loopMode: renderer.loopMode, - upright: renderer.upright, - loadModels: renderer.loadModels, - quickDraw: renderer.quickDraw, - quickBacktrack: renderer.quickBacktrack, - // backtrackList: [...renderer.backtrackList].join(''), - backtrackTail: renderer.backtrackTail, - hesitateApex: renderer.hesitateApex, - hesitateNode: renderer.hesitateNode - }, + renderer: renderer.object, system: tmpSystem ? { title: tmpSystemName, @@ -5749,9 +5776,8 @@ var setInternalState = (stateStr) => state.renderer.camZ, state.renderer.followFactor, state.renderer.loopMode, state.renderer.upright, state.renderer.quickDraw, state.renderer.quickBacktrack, - undefined, state.renderer.loadModels, - state.renderer.backtrackTail, state.renderer.hesitateApex, - state.renderer.hesitateNode); + state.renderer.loadModels, state.renderer.backtrackTail, + state.renderer.hesitateApex, state.renderer.hesitateFork); } else renderer = new Renderer(system); From f19468f42fdd108e5199b851ddc7f0931b6df3cc Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 25 Feb 2023 04:25:19 +0700 Subject: [PATCH 51/94] Added docstrings for VariableControls & Measurer --- TODO.md | 2 +- classic.js | 146 +++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 127 insertions(+), 21 deletions(-) diff --git a/TODO.md b/TODO.md index 1f8a460..5d590c3 100644 --- a/TODO.md +++ b/TODO.md @@ -23,7 +23,6 @@ - [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Add more comments in the code -- [ ] Update docstrings (done up to Renderer) - [ ] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` @@ -76,6 +75,7 @@ ## 1.0: Completed +- [x] Update docstrings - [x] Buttons in LS menu to move up down (swap rules) - How to update rule entries? - [x] Issue: Renderer.tick() cuts off 1 tick at the backtrack tail end diff --git a/classic.js b/classic.js index 81aa597..58f28c9 100644 --- a/classic.js +++ b/classic.js @@ -30,6 +30,9 @@ import { MathExpression } from '../api/MathExpression'; import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; import { LineBreakMode } from '../api/ui/properties/LineBreakMode'; import { BigNumber } from '../api/BigNumber'; +import { Upgrade } from '../api/Upgrades'; +import { Button } from '../api/ui/Button'; +import { Frame } from '../api/ui/Frame'; var id = 'L_systems_renderer'; var getName = (language) => @@ -2619,34 +2622,79 @@ class Renderer } } +/** + * Represents a bunch of buttons for variable controls. + */ class VariableControls { + /** + * @constructor + * @param {Upgrade} variable the variable being controlled. + * @param {boolean} useAnchor whether to use anchor controls. + * @param {number} quickbuyAmount the amount of levels to buy when held. + */ constructor(variable, useAnchor = false, quickbuyAmount = 10) { + /** + * @type {Upgrade} the variable being controlled. + */ this.variable = variable; + /** + * @type {Frame} the variable button. + */ this.varBtn = null; + /** + * @type {Frame} the refund button. + */ this.refundBtn = null; + /** + * @type {Frame} the buy button. + */ this.buyBtn = null; + /** + * @type {boolean} whether to use anchor controls. + */ this.useAnchor = useAnchor; + /** + * @type {number} the anchored variable level. + */ this.anchor = this.variable.level; + /** + * @type {number} whether the anchor is on. + */ this.anchorActive = false; + /** + * @type {number} the amount of levels to buy when held. + */ this.quickbuyAmount = quickbuyAmount; } + /** + * Updates all buttons, visually. + */ updateAllButtons() { this.updateDescription(); this.updateRefundButton(); this.updateBuyButton(); } + /** + * Updates the variable description written on the button's label. + */ updateDescription() { this.varBtn.content.text = this.variable.getDescription(); } + /** + * Creates a variable button. + * @param {function(void): void} callback when pressed, calls this function. + * @param {number} height the button's height. + * @returns {Frame} + */ createVariableButton(callback = null, height = BUTTON_HEIGHT) { - if(this.varBtn !== null) + if(this.varBtn) return this.varBtn; let frame = ui.createFrame @@ -2663,7 +2711,7 @@ class VariableControls }), borderColor: Color.TRANSPARENT }); - if(callback !== null) + if(callback) { frame.borderColor = Color.BORDER; frame.content.textColor = Color.TEXT; @@ -2692,6 +2740,9 @@ class VariableControls this.varBtn = frame; return this.varBtn; } + /** + * Updates the refund button, visually. + */ updateRefundButton() { this.refundBtn.borderColor = this.variable.level > 0 ? Color.BORDER : @@ -2699,18 +2750,17 @@ class VariableControls this.refundBtn.content.textColor = this.variable.level > 0 ? Color.TEXT : Color.TEXT_MEDIUM; } + /** + * Creates a refund button. + * @param {string} symbol the button's label. + * @param {number} height the button's height. + * @returns {Frame} + */ createRefundButton(symbol = '-', height = BUTTON_HEIGHT) { - if(this.refundBtn !== null) + if(this.refundBtn) return this.refundBtn; - // let bc = () => this.variable.level > 0 ? Color.BORDER : - // Color.TRANSPARENT; - // let tc = () => this.variable.level > 0 ? Color.TEXT : - // Color.TEXT_MEDIUM; - // let tcPressed = () => this.variable.level > 0 ? Color.TEXT_MEDIUM : - // Color.TEXT_DARK; - this.refundBtn = ui.createFrame ({ heightRequest: height, @@ -2759,6 +2809,9 @@ class VariableControls }); return this.refundBtn; } + /** + * Updates the buy button, visually. + */ updateBuyButton() { this.buyBtn.borderColor = this.variable.level < this.variable.maxLevel ? @@ -2766,18 +2819,17 @@ class VariableControls this.buyBtn.content.textColor = this.variable.level < this.variable.maxLevel ? Color.TEXT : Color.TEXT_MEDIUM; } + /** + * Creates a buy button. + * @param {string} symbol the button's label. + * @param {number} height the button's height. + * @returns {Frame} + */ createBuyButton(symbol = '+', height = BUTTON_HEIGHT) { - if(this.buyBtn !== null) + if(this.buyBtn) return this.buyBtn; - // let bc = () => this.variable.level < this.variable.maxLevel ? - // Color.BORDER : Color.TRANSPARENT; - // let tc = () => this.variable.level < this.variable.maxLevel ? - // Color.TEXT : Color.TEXT_MEDIUM; - // let tcPressed = () => this.variable.level < this.variable.maxLevel ? - // Color.TEXT_MEDIUM : Color.TEXT_DARK; - this.buyBtn = ui.createFrame ({ heightRequest: height, @@ -2832,22 +2884,57 @@ class VariableControls } } +/** + * Measures performance for a piece of code. + */ class Measurer { + /** + * @constructor + * @param {string} title the measurement's title. + * @param {number} window the sample size. + */ constructor(title, window = 10) { + /** + * @type {string} the measurement's title. + */ this.title = title; + /** + * @type {number} the sample size. + */ this.window = window; + /** + * @type {number} the all-time sum. + */ this.sum = 0; + /** + * @type {number} the window sum. + */ this.windowSum = 0; + /** + * @type {number} the all-time maximum. + */ this.max = 0; + /** + * @type {number[]} recent records. + */ this.records = []; for(let i = 0; i < this.window; ++i) this.records[i] = 0; + /** + * @type {number} the elapsed time in ticks. + */ this.ticksPassed = 0; + /** + * @type {number} the most recent moment the function was stamped. + */ this.lastStamp = null; } - + + /** + * Resets the measurer. + */ reset() { this.sum = 0; @@ -2859,9 +2946,12 @@ class Measurer this.ticksPassed = 0; this.lastStamp = null; } + /** + * Stamps the measurer. + */ stamp() { - if(this.lastStamp === null) + if(!this.lastStamp) this.lastStamp = Date.now(); else { @@ -2876,14 +2966,26 @@ class Measurer ++this.ticksPassed; } } + /** + * Returns the window average. + * @returns {number} + */ get windowAvg() { return this.windowSum / Math.min(this.window, this.ticksPassed); } + /** + * Returns the all-time average. + * @returns {number} + */ get allTimeAvg() { return this.sum / this.ticksPassed; } + /** + * Returns the string for the window average. + * @returns {string} + */ get windowAvgString() { if(this.ticksPassed == 0) @@ -2896,6 +2998,10 @@ class Measurer getCoordString(this.max), getCoordString(this.windowAvg), Math.min(this.window, this.ticksPassed)); } + /** + * Returns the string for the all-time average. + * @returns {string} + */ get allTimeAvgString() { if(this.ticksPassed == 0) From 5c9e9acd49b6cc8041976f2635a152f4f1f84467 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 27 Feb 2023 01:33:41 +0700 Subject: [PATCH 52/94] Restored old tail BT behaviour --- TODO.md | 18 +++++++++--------- classic.js | 9 +++++---- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index 5d590c3..3370117 100644 --- a/TODO.md +++ b/TODO.md @@ -10,25 +10,21 @@ ## Other considerations +- [ ] Add more comments in the code - [ ] A more detailed README - Showcases the power of tickspeed and stroke options - Discusses limitations of the game - Like a blog post, sort of - [ ] Localisation - [ ] Folders for saved systems -- [ ] Compress internal state? LZW, LZP - [ ] Ask Gilles about changing the spline used in 3D graph - -## 1.0, Mistletoe ed. - - [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr -- [ ] Add more comments in the code -- [ ] Investigate Houdini stochastic syntax for weighted derivations -`[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - - Stochastic in PLSR: has to be on the same line +## 1.0, Mistletoe ed. - [ ] Option to use old tropisme? +- [ ] Compress internal state? LZW, LZP + - [ ] Or just separate into multiple lines, with an add button - [ ] Parametric systems - [ ] New option in constructor for MathExpression variables @@ -48,6 +44,10 @@ would've been already stripped down by the time it gets to the turtle - `~`: Parameters of the following symbol can control model size in rule +- [ ] Investigate Houdini stochastic syntax for weighted derivations +`[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` + - Stochastic in PLSR: has to be on the same line + - [ ] Context sensitivity - `b < a > c → aa` - Parametric: **context ignore** replaces regular ignore list in LS menu @@ -127,7 +127,7 @@ - [x] Hesitate only when the turtle was moved compared to last time? - [ ] Does it work with ignored? No (because of the ignored stuff) - - [ ] The pop in `]` might be a problem if the branch stack has nothing yet? + - [x] The pop in `]` might be a problem if the branch stack has nothing yet? - [x] Remove the backtrack list option - Also, backtrack on the way back and forward needs different lists? - [x] Turtle controls summary page in guide diff --git a/classic.js b/classic.js index 58f28c9..223f152 100644 --- a/classic.js +++ b/classic.js @@ -231,6 +231,7 @@ const locStrings = labelHesitate: '* Stutter on backtrack: ', labelHesitateApex: '* Stutter at apex: ', labelHesitateFork: '* Stutter at fork: ', + labelOldTropism: '* Alternate tropism method: ', labelBTList: '* Backtrack list: ', labelRequireReset: '* Modifying this setting will require a reset.', @@ -2402,19 +2403,19 @@ class Renderer switch(this.loopMode) { case 2: - if(!this.backtrackTail) - return; l.buy(1); break; case 1: - if(!this.backtrackTail) - return; this.reset(false); break; case 0: return; } } + else if(!this.backtrackTail && this.loopMode == 0) + { + return; + } else { let t = this.stack.pop(); From 89ec59cea705b268ee5d40aa5608907959719bd6 Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 27 Feb 2023 02:29:24 +0700 Subject: [PATCH 53/94] Implemented rule inits for Parametric --- TODO.md | 5 +- classic.js | 5 +- parametric_lsystem.js | 113 +++++++++++++++++++++--------------------- 3 files changed, 61 insertions(+), 62 deletions(-) diff --git a/TODO.md b/TODO.md index 3370117..aa215a6 100644 --- a/TODO.md +++ b/TODO.md @@ -22,7 +22,10 @@ ## 1.0, Mistletoe ed. -- [ ] Option to use old tropisme? +- Too much hassle to implement, defer them to LG: + - [ ] Option to use old tropisme + - [ ] Tropism direction + - [ ] Compress internal state? LZW, LZP - [ ] Or just separate into multiple lines, with an add button diff --git a/classic.js b/classic.js index 223f152..94c8aba 100644 --- a/classic.js +++ b/classic.js @@ -2398,6 +2398,7 @@ class Renderer break; } } + // This is what the renderer will do at the end of a loop if(!this.backtrackTail || this.stack.length == 0) { switch(this.loopMode) @@ -2412,10 +2413,6 @@ class Renderer return; } } - else if(!this.backtrackTail && this.loopMode == 0) - { - return; - } else { let t = this.stack.pop(); diff --git a/parametric_lsystem.js b/parametric_lsystem.js index 3be92b1..07881a2 100644 --- a/parametric_lsystem.js +++ b/parametric_lsystem.js @@ -46,20 +46,20 @@ class ParametricLSystem // This is a context ignore list. Turtle ignores all except for Ff. this.ignoreList = new Set('FfT+-&^\\/|{.}%~$'); - let rulesMatches = []; + let ruleMatches = []; for(let i = 0; i < rules.length; ++i) { - rulesMatches.push([...rules[i].replace(TRIM_SP, '').match( + ruleMatches.push([...rules[i].replace(TRIM_SP, '').match( LS_RULE)]); - // console.log(rulesMatches[i].toString()); + // console.log(ruleMatches[i].toString()); // Indices 1, 2, 4+4k, 6+4k are context, condition, derivation and // probability respectively } this.rules = new Map(); - for(let i = 0; i < rulesMatches.length; ++i) + for(let i = 0; i < ruleMatches.length; ++i) { // [i][1]: context - let contextMatch = [...rulesMatches[i][1].match(LS_CONTEXT)]; + let contextMatch = [...ruleMatches[i][1].match(LS_CONTEXT)]; // Indices 2, 4, 6, 8, 10, 12 are the symbols and parameters of // left, middle, and right respectively if(typeof contextMatch[6] === 'undefined') @@ -102,71 +102,69 @@ class ParametricLSystem switch(pos) { case 'm': - return m[tmpRule.params[v][1]]; + if(m) + return m[tmpRule.params[v][1]]; case 'l': - return l[tmpRule.params[v][1]]; + if(l) + return l[tmpRule.params[v][1]]; case 'r': - return r[tmpRule.params[v][1]]; + if(r) + return r[tmpRule.params[v][1]]; } // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) } // [i][2]: condition - tmpRule.condition = MathExpression.parse(rulesMatches[i][2]); + tmpRule.condition = MathExpression.parse(ruleMatches[i][2]); // let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t==0=[+(30)G]F/(180)A(2):0.5,[-(30)G]F\(180)A(2):0.5']); // [i][4+4k]: derivation(s) // [i][6+4k]: probability + // j = 4k + for(let j = 0; j + 4 < ruleMatches[i].length; j += 4) + { + if(typeof ruleMatches[i][j + 4] === 'undefined') + continue; - // Finally, push rule - if(!this.rules.has(contextMatch[6])) - this.rules.set(contextMatch[6], []); - this.rules.get(contextMatch[6]).push(tmpRule); - } - - /* Probably will not allow multi-line stochastics this time.*/ - let exampleRules = - { - 'A': - [ - { // B(b) < A(a) > C(c, d) - left: 'B', - right: 'C', - paramMap: (v, l, m, r) => - { - let result = - { - 'a': m[0], - 'b': l[0], - 'c': r[0], - 'd': r[1] - }; - return result[v]; - }, - condition: 'c + d > 0', - derivations: - [ - 'AF+-', - 'ABC-+' - ], - derivParams: // these are MathExpressions too - [ - ['a', '1', '137.5', undefined], - ['a + 1', 'b + 1', ['c + 1', 'd'], undefined, '137.5'] - ], - prob: // so are these - [ // Weighted system, sum has to be within 1 - '0.5 + a', - 'one' - ] - }, + let tmpDeriv = this.parseSequence(ruleMatches[i][j + 4]); + if(typeof tmpRule.derivations === 'string') { - // ... - cond: true, - // ... + tmpRule.derivations = [tmpRule.derivations, + tmpDeriv.sequence]; + tmpRule.parameters = [tmpRule.parameters, tmpDeriv.params]; + if(ruleMatches[i][j + 6]) + tmpRule.chances = [tmpRule.chances, + MathExpression.parse(ruleMatches[i][j + 6])]; + else + tmpRule.chances = [tmpRule.chances, + MathExpression.parse('1')]; } - ] - }; + else + { + tmpRule.derivations.push(tmpDeriv.sequence); + tmpRule.parameters.push(tmpDeriv.params); + if(ruleMatches[i][j + 6]) + tmpRule.chances.push(MathExpression.parse( + ruleMatches[i][j + 6])); + else + tmpRule.chances.push(MathExpression.parse('1')); + } + } + + // Finally, push rule + if(contextMatch[6] == '~') + { + if(!this.models.has(contextMatch[6])) + this.models.set(contextMatch[6], []); + this.models.get(contextMatch[6]).push(tmpRule); + } + else + { + if(!this.rules.has(contextMatch[6])) + this.rules.set(contextMatch[6], []); + this.rules.get(contextMatch[6]).push(tmpRule); + } + } } /** @@ -200,7 +198,8 @@ class ParametricLSystem } --bracketLvl; if(!bracketLvl) - resultParams.push(sequence.slice(start, i)); + resultParams.push(MathExpression.parse( + sequence.slice(start, i))); break; default: if(bracketLvl) From 58870f83c16da6a77e56e8b06eb9067e3305c78f Mon Sep 17 00:00:00 2001 From: Minh Date: Mon, 27 Feb 2023 22:19:28 +0700 Subject: [PATCH 54/94] Completed testing rule initialisastion in-game --- TODO.md | 1 + classic.js | 8 +- parametric.js | 726 ++++++++++++++++++++++++++++++++++++++++++ parametric_lsystem.js | 273 ---------------- 4 files changed, 733 insertions(+), 275 deletions(-) create mode 100644 parametric.js delete mode 100644 parametric_lsystem.js diff --git a/TODO.md b/TODO.md index aa215a6..4d2287e 100644 --- a/TODO.md +++ b/TODO.md @@ -25,6 +25,7 @@ - Too much hassle to implement, defer them to LG: - [ ] Option to use old tropisme - [ ] Tropism direction + - Maybe can have 4 arguments - [ ] Compress internal state? LZW, LZP - [ ] Or just separate into multiple lines, with an add button diff --git a/classic.js b/classic.js index 94c8aba..1e126ee 100644 --- a/classic.js +++ b/classic.js @@ -1032,10 +1032,14 @@ class LCG } } +/** + * Represents an instance of the Xorshift RNG. + */ class Xorshift { /** - * The state must be initialized to non-zero. + * @constructor + * @param {number} seed must be initialized to non-zero. */ constructor(seed = 1752) { @@ -1488,7 +1492,7 @@ class LSystem * Derive a sequence from the input string. `next` denotes the starting * position to be derived next tick. `result` contains the work completed * for the current tick. - * @param {string} state the input string. + * @param {string} sequence the input string. * @returns {{next: number, result: string}} */ derive(sequence, start = 0) diff --git a/parametric.js b/parametric.js new file mode 100644 index 0000000..62948f2 --- /dev/null +++ b/parametric.js @@ -0,0 +1,726 @@ +import { MathExpression } from "../api/MathExpression"; + +var id = 'parametric_L_systems_renderer'; +var name = 'Parametric L-systems Renderer'; +var description = 'Get wrecked.'; +var authors = 'propfeds#5988'; +var version = 0; + +const TRIM_SP = /\s+/g; +const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; +// Context doesn't need to check for nested brackets! +const LS_CONTEXT = +/((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; +// But individual symbols do. + +/** + * Represents an instance of the Xorshift RNG. + */ +class Xorshift +{ + /** + * @constructor + * @param {number} seed must be initialized to non-zero. + */ + constructor(seed = 1752) + { + this.state = seed; + this.mod = 0x100000000; + // 0x ffffffff + 1 + } + /** + * Returns a random integer within [0, 2^32) probably. + * @returns {number} + */ + get nextInt() + { + let x = this.state; + x ^= x << 13; + x ^= x >> 17; + x ^= x << 5; + this.state = x; + return this.state; + } + /** + * Returns a random floating point number within [0, 1] or [0, 1). + * @param {boolean} [includeEnd] (default: false) whether to include the + * number 1 in the range. + * @returns {number} + */ + nextFloat(includeEnd = false) + { + let result; + if(includeEnd) // [-1, 1] + result = this.nextInt / (this.mod - 1); + else // [-1, 1) + result = this.nextInt / this.mod; + + return (result + 1) / 2; + } + /** + * Returns a random integer within a range of [start, end). + * @param {number} start the range's lower bound. + * @param {number} end the range's upper bound, plus 1. + * @returns {number} + */ + nextRange(start, end) + { + // [start, end) + let size = end - start; + return start + Math.floor(this.nextFloat() * size); + } + /** + * Returns a random element from an array. + * @param {any[]} array the array. + * @returns {any} + */ + choice(array) + { + return array[this.nextRange(0, array.length)]; + } +} + +/** + * Represents one hell of a quaternion. + */ +class Quaternion +{ + /** + * @constructor + * @param {number} r (default: 1) the real component. + * @param {number} i (default: 0) the imaginary i component. + * @param {number} j (default: 0) the imaginary j component. + * @param {number} k (default: 0) the imaginary k component. + */ + constructor(r = 1, i = 0, j = 0, k = 0) + { + /** + * @type {number} the real component. + */ + this.r = r; + /** + * @type {number} the imaginary i component. + */ + this.i = i; + /** + * @type {number} the imaginary j component. + */ + this.j = j; + /** + * @type {number} the imaginary k component. + */ + this.k = k; + } + + /** + * Computes the sum of the current quaternion with another. Does not modify + * the original quaternion. + * @param {Quaternion} quat this other quaternion. + * @returns {Quaternion} + */ + add(quat) + { + return new Quaternion( + this.r + quat.r, + this.i + quat.i, + this.j + quat.j, + this.k + quat.k + ); + } + /** + * Computes the product of the current quaternion with another. Does not + * modify the original quaternion. + * @param {Quaternion} quat this other quaternion. + * @returns {Quaternion} + */ + mul(quat) + { + let t0 = this.r * quat.r - this.i * quat.i - + this.j * quat.j - this.k * quat.k; + let t1 = this.r * quat.i + this.i * quat.r + + this.j * quat.k - this.k * quat.j; + let t2 = this.r * quat.j - this.i * quat.k + + this.j * quat.r + this.k * quat.i; + let t3 = this.r * quat.k + this.i * quat.j - + this.j * quat.i + this.k * quat.r; + return new Quaternion(t0, t1, t2, t3); + } + /** + * Computes the negation of a quaternion. The negation also acts as the + * inverse if the quaternion's norm is 1, which is the case with rotation + * quaternions. + * @returns {Quaternion} + */ + get neg() + { + return new Quaternion(this.r, -this.i, -this.j, -this.k); + } + /** + * Computes the norm of a quaternion. + * @returns {number} + */ + get norm() + { + return Math.sqrt(this.r ** 2 + this.i ** 2 + this.j ** 2 + this.k ** 2); + } + /** + * Normalises a quaternion. + * @returns {Quaternion} + */ + get normalise() + { + let n = this.norm; + return new Quaternion(this.r / n, this.i / n, this.j / n, this.k / n); + } + /** + * Returns a heading vector from the quaternion. + * @returns {Vector3} + */ + get headingVector() + { + let r = this.neg.mul(xUpQuat).mul(this); + return new Vector3(r.i, r.j, r.k); + } + /** + * Returns an up vector from the quaternion. + * @returns {Vector3} + */ + get upVector() + { + let r = this.neg.mul(yUpQuat).mul(this); + return new Vector3(r.i, r.j, r.k); + } + /** + * Returns a side vector (left or right?) from the quaternion. + * @returns {Vector3} + */ + get sideVector() + { + let r = this.neg.mul(zUpQuat).mul(this); + return new Vector3(r.i, r.j, r.k); + } + /** + * (Deprecated) Rotate from a heading vector to another. Inaccurate! + * @param {Vector3} src the current heading. + * @param {Vector3} dst the target heading. + * @returns {Quaternion} + */ + rotateFrom(src, dst) + { + let dp = src.x * dst.x + src.y * dst.y + + src.z * dst.z; + let rotAxis; + if(dp < -1 + 1e-8) + { + /* Edge case + If the two vectors are in opposite directions, just reverse. + */ + return zUpQuat.mul(this); + } + rotAxis = new Vector3( + src.y * dst.z - src.z * dst.y, + src.z * dst.x - src.x * dst.z, + src.x * dst.y - src.y * dst.x, + ); + let s = Math.sqrt((1 + dp) * 2); + // I forgore that our quaternions have to be all negative, dunnoe why + return this.mul(new Quaternion( + -s / 2, + rotAxis.x / s, + rotAxis.y / s, + rotAxis.z / s + )).normalise; + } + /** + * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion + * (Deprecated) Applies a gravi-tropism vector to the quaternion. Inaccurat! + * @param {number} weight the vector's length (negative for upwards). + * @returns {Quaternion} + */ + applyTropismVector(weight = 0) + { + if(weight == 0) + return this; + + let curHead = this.headingVector; + let newHead = curHead - new Vector3(0, weight, 0); + let n = newHead.length; + if(n == 0) + return this; + newHead /= n; + let result = this.rotateFrom(curHead, newHead); + return result; + } + /** + * Applies a gravi-tropism vector to the quaternion. + * @param {number} weight the branch's susceptibility to bending. + * @returns {Quaternion} + */ + applyTropism(weight = 0) + { + if(weight == 0) + return this; + + // a = e * |HxT| (n) + let curHead = this.headingVector; + let rotAxis = new Vector3(curHead.z, 0, -curHead.x); + let n = rotAxis.length; + if(n == 0) + return this; + rotAxis /= n; + let a = weight * n / 2; + let s = Math.sin(a); + let c = Math.cos(a); + // I don't know why it works the opposite way this time + return this.mul(new Quaternion( + -c, + rotAxis.x * s, + rotAxis.y * s, + rotAxis.z * s + )).normalise; + } + /** + * https://gamedev.stackexchange.com/questions/198977/how-to-solve-for-the-angle-of-a-axis-angle-rotation-that-gets-me-closest-to-a-sp/199027#199027 + * Rolls the quaternion so that its up vector aligns with the earth. + * @returns {Quaternion} + */ + alignToVertical() + { + // L = V×H / |V×H| + let curHead = this.headingVector; + let curUp = this.upVector; + let side = new Vector3(curHead.z, 0, -curHead.x); + let n = side.length; + if(n == 0) + return this; + side /= n; + // U = HxL + let newUp = new Vector3( + curHead.y * side.z - curHead.z * side.y, + curHead.z * side.x - curHead.x * side.z, + curHead.x * side.y - curHead.y * side.x, + ); + let a = Math.atan2( + curUp.x * side.x + curUp.y * side.y + curUp.z * side.z, + curUp.x * newUp.x + curUp.y * newUp.y + newUp.z * newUp.z, + ) / 2; + let s = Math.sin(a); + let c = Math.cos(a); + return new Quaternion(-c, s, 0, 0).mul(this).normalise; + } + /** + * Returns the quaternion's string representation. + * @returns {string} + */ + toString() + { + return `${getCoordString(this.r)} + ${getCoordString(this.i)}i + ${getCoordString(this.j)}j + ${getCoordString(this.k)}k`; + } +} + +/** + * Represents a parametric L-system. + */ +class ParametricLSystem +{ + /** + * @constructor + * @param {string} axiom the starting sequence. + * @param {string[]} rules the production rules. + * @param {string} turnAngle the turning angle (in degrees). + * @param {number} seed the seed used for stochastic systems. + * @param {string} ignoreList a list of symbols to be ignored by the turtle. + * @param {string} tropism the tropism factor. + * @param {object} variables NOT IMPLEMENTED + */ + constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, + ignoreList = '', tropism = 0, variables = {}) + { + // User input + this.userInput = + { + axiom: axiom, + // rules: this.purgeEmpty(rules), + turnAngle: turnAngle, + seed: seed, + ignoreList: ignoreList, + tropism: tropism, + variables: variables + }; + let axiomMatches = this.parseSequence(axiom.replace(TRIM_SP, '')); + this.axiom = axiomMatches.result; + this.axiomParams = axiomMatches.params; + + for(let i = 0; i < this.axiomParams.length; ++i) + { + if(!this.axiomParams[i]) + continue; + + let params = this.axiomParams[i].split(','); + // console.log(params) + for(let j = 0; j < params.length; ++j) + params[j] = MathExpression.parse(params[j]).evaluate(); + this.axiomParams[i] = params; + // Maybe leave them at BigNumber? + } + // console.log(this.axiomParams.toString()); + + let ruleMatches = []; + for(let i = 0; i < rules.length; ++i) + { + ruleMatches.push([...rules[i].replace(TRIM_SP, '').match( + LS_RULE)]); + // console.log(ruleMatches[i].toString()); + // Indices 1, 2, 4+4k, 6+4k are context, condition, derivation and + // probability respectively + } + this.rules = new Map(); + this.models = new Map(); + for(let i = 0; i < ruleMatches.length; ++i) + { + // [i][1]: context + let contextMatch = [...ruleMatches[i][1].match(LS_CONTEXT)]; + // Indices 2, 4, 6, 8, 10, 12 are the symbols and parameters of + // left, middle, and right respectively + if(!contextMatch[6]) + continue; + + let tmpRule = {}; + let ruleParams = {}; + { + let params = contextMatch[8].split(','); + for(let j = 0; j < params.length; ++j) + ruleParams[params[j]] = ['m', j]; + } + tmpRule.left = contextMatch[2]; + if(tmpRule.left) + { + let params = contextMatch[4].split(','); + for(let j = 0; j < params.length; ++j) + ruleParams[params[j]] = ['l', j]; + } + tmpRule.right = contextMatch[10]; + if(tmpRule.right) + { + let params = contextMatch[12].split(','); + 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 = { + 'a': ['m', 0], + 'b': ['l', 0], + 'c': ['r', 0], + 'd': ['r', 1] + }; + */ + tmpRule.paramMap = (v, l, m, r) => + { + let pos = tmpRule.params[v][0]; + switch(pos) + { + case 'm': + if(m) + return m[tmpRule.params[v][1]]; + case 'l': + if(l) + return l[tmpRule.params[v][1]]; + case 'r': + if(r) + return r[tmpRule.params[v][1]]; + } + // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) + } + + // [i][2]: condition + if(ruleMatches[i][2]) + tmpRule.condition = MathExpression.parse(ruleMatches[i][2]); + else + tmpRule.condition = MathExpression.parse('true'); + + // [i][4+4k]: derivation(s) + // [i][6+4k]: probability + // j = 4k + for(let j = 0; j + 4 < ruleMatches[i].length; j += 4) + { + if(!ruleMatches[i][j + 4]) + continue; + + let tmpDeriv = this.parseSequence(ruleMatches[i][j + 4]); + let derivParams = tmpDeriv.params; + // for(let i = 0; i < this.axiomParams.length; ++i) + // { + // if(!this.axiomParams[i]) + // continue; + + // let params = this.axiomParams[i].split(','); + // // console.log(params) + // for(let j = 0; j < params.length; ++j) + // params[j] = MathExpression.parse(params[j]).evaluate(); + // this.axiomParams[i] = params; + // // Maybe leave them at BigNumber? + // } + for(let k = 0; k < derivParams.length; ++k) + { + if(!derivParams[k]) + continue; + + let params = derivParams[k].split(','); + for(let l = 0; l < params.length; ++l) + params[l] = MathExpression.parse(params[l]); + + derivParams[k] = params; + } + if(typeof tmpRule.derivations === 'string') + { + tmpRule.derivations = [tmpRule.derivations, + tmpDeriv.result]; + tmpRule.parameters = [tmpRule.parameters, derivParams]; + if(ruleMatches[i][j + 6]) + tmpRule.chances = [tmpRule.chances, + MathExpression.parse(ruleMatches[i][j + 6])]; + else + tmpRule.chances = [tmpRule.chances, + MathExpression.parse('1')]; + } + else if(!tmpRule.derivations) + { + tmpRule.derivations = tmpDeriv.result; + tmpRule.parameters = derivParams; + if(ruleMatches[i][j + 6]) + tmpRule.chances = MathExpression.parse( + ruleMatches[i][j + 6]); + else + tmpRule.chances = MathExpression.parse('1'); + } + else // Already an array + { + tmpRule.derivations.push(tmpDeriv.result); + tmpRule.parameters.push(derivParams); + if(ruleMatches[i][j + 6]) + tmpRule.chances.push(MathExpression.parse( + ruleMatches[i][j + 6])); + else + tmpRule.chances.push(MathExpression.parse('1')); + } + } + + // Finally, push rule + if(contextMatch[6] == '~') + { + if(!this.models.has(contextMatch[6])) + this.models.set(contextMatch[6], []); + this.models.get(contextMatch[6]).push(tmpRule); + } + else + { + if(!this.rules.has(contextMatch[6])) + this.rules.set(contextMatch[6], []); + this.rules.get(contextMatch[6]).push(tmpRule); + } + } + + this.ignoreList = new Set(ignoreList); + // This is a context ignore list. Turtle ignore list is separate. + this.ctxIgnoreList = new Set('FfT+-&^\\/|{.}%~$'); + + this.RNG = new Xorshift(seed); + this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate() * + Math.PI / 360; + + this.rotations = new Map(); + let s = Math.sin(this.halfAngle); + let c = Math.cos(this.halfAngle); + this.rotations.set('+', new Quaternion(-c, 0, 0, s)); + this.rotations.set('-', new Quaternion(-c, 0, 0, -s)); + this.rotations.set('&', new Quaternion(-c, 0, s, 0)); + this.rotations.set('^', new Quaternion(-c, 0, -s, 0)); + this.rotations.set('\\', new Quaternion(-c, s, 0, 0)); + this.rotations.set('/', new Quaternion(-c, -s, 0, 0)); + + this.tropism = MathExpression.parse(tropism.toString()).evaluate(); + } + + /** + * Parse a sequence to return one array of characters and one of parameters. + * Is only used when initialising the L-system. + * @param {string} sequence the sequence to be parsed. + * @returns {object} + */ + parseSequence(sequence) + { + let result = ''; + let resultParams = []; + let bracketLvl = 0; + let start = null; + for(let i = 0; i < sequence.length; ++i) + { + switch(sequence[i]) + { + case ' ': + log('Blank space detected.') + break; + case '(': + ++bracketLvl; + if(bracketLvl == 1) + start = i + 1; + break; + case ')': + if(!bracketLvl) + { + log('You\'ve clearly made a bracket error.'); + break; + } + --bracketLvl; + if(!bracketLvl) + resultParams.push(sequence.slice(start, i)); + break; + default: + if(bracketLvl) + break; + + result += sequence[i]; + if(sequence[i + 1] != '(') + resultParams.push(null); + break; + } + } + return { + result: result, + params: resultParams + }; + // Tested this out on Chrome console, it worked. + } + + getAncestree(sequence) + { + // Scanning behaviour should be very similar to renderer drawing. + let stack = []; + let idxStack = []; + let ancestors = []; + let children = []; + for(let i = 0; i < sequence.length; ++i) + { + switch(sequence[i]) + { + case ' ': + log('Blank space detected.') + break; + case '[': + idxStack.push(stack.length); + break; + case ']': + if(stack.length == 0) + { + log('You\'ve clearly made a bracket error.'); + break; + } + while(stack.length > idxStack[idxStack.length - 1]) + stack.pop(); + + idxStack.pop(); + break; + default: + let ignored = this.ctxIgnoreList.has(sequence[i]); + if(ignored) + break; + + if(stack.length > 0) + { + let ancIdx = stack[stack.length - 1]; + ancestors[i] = ancIdx; + if(typeof children[ancIdx] === 'undefined') + children[ancIdx] = []; + children[ancIdx].push(i); + } + + stack.push(i); + break; + } + } + return { + ancestors: ancestors, + children: children + }; + // Tested this out on Chrome console, it worked. + } + + /** + * Derive a sequence from the input string. `next` denotes the starting + * position to be derived next tick. `result` contains the work completed + * for the current tick. + * @param {string} sequence the input string. + * @returns {{next: number, result: string}} + */ + derive(sequence, seqParams, start = 0) + { + let result = ''; + let resultParams = []; + for(let i = start; i < sequence.length; ++i) + { + if(result.length > maxCharsPerTick) + { + return { + next: i, + result: result, + params: resultParams + }; + } + let deriv; + let derivParams = null; + if(sequence[i] == '%') + { + let branchLvl = 0; + for(; i < sequence.length; ++i) + { + switch(sequence[i]) + { + case '[': + ++branchLvl; + break; + case ']': + --branchLvl; + break; + } + if(branchLvl < 0) + break; + } + if(sequence[i] == ']') + deriv = sequence[i]; + else + continue; + } + else if(sequence[i] == '~') + continue; + else if(this.rules.has(sequence[i])) + { + // parse + a + } + else + deriv = sequence[i]; + + result += deriv; + resultParams.push(derivParams); + // if(typeof deriv === 'string') + // result += deriv; + // else + // result += deriv[this.RNG.nextRange(0, deriv.length)]; + } + return { + next: 0, + result: result, + params: resultParams + }; + } + + deriveModel(symbol) + { + + } +} + +let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=0=[+(30)G]F/(180)A(2):0.5,[-(30)G]F\\(180)A(2):0.5']); diff --git a/parametric_lsystem.js b/parametric_lsystem.js deleted file mode 100644 index 07881a2..0000000 --- a/parametric_lsystem.js +++ /dev/null @@ -1,273 +0,0 @@ -import { MathExpression } from "../api/MathExpression"; - -const TRIM_SP = /\s+/g; -const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; -// Context doesn't need to check for nested brackets! -const LS_CONTEXT = -/((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; -// But individual symbols do. - -class ParametricLSystem -{ - constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', tropism = 0, variables = {}) - { - // User input - this.userInput = - { - axiom: axiom, - rules: this.getPurged(rules), - turnAngle: turnAngle, - seed: seed, - ignoreList: ignoreList, - tropism: tropism, - variables: variables - }; - // Use regex magic to separate - let axiomMatches = this.parseSequence(axiom.replace(TRIM_SP, '')); - this.axiom = axiomMatches.sequence; - this.axiomParams = axiomMatches.params; - - // console.log(this.axiom); - // console.log(this.axiomParams); - for(let i = 0; i < this.axiomParams.length; ++i) - { - if(typeof this.axiomParams[i] == 'undefined') - continue; - - let params = this.axiomParams[i].split(','); - // console.log(params) - for(let j = 0; j < params.length; ++j) - params[j] = MathExpression.parse(params[j]).evaluate(); - this.axiomParams[i] = params; - // Maybe leave them at BigNumber? - } - // console.log(this.axiomParams.toString()); - // This is a context ignore list. Turtle ignores all except for Ff. - this.ignoreList = new Set('FfT+-&^\\/|{.}%~$'); - - let ruleMatches = []; - for(let i = 0; i < rules.length; ++i) - { - ruleMatches.push([...rules[i].replace(TRIM_SP, '').match( - LS_RULE)]); - // console.log(ruleMatches[i].toString()); - // Indices 1, 2, 4+4k, 6+4k are context, condition, derivation and - // probability respectively - } - this.rules = new Map(); - for(let i = 0; i < ruleMatches.length; ++i) - { - // [i][1]: context - let contextMatch = [...ruleMatches[i][1].match(LS_CONTEXT)]; - // Indices 2, 4, 6, 8, 10, 12 are the symbols and parameters of - // left, middle, and right respectively - if(typeof contextMatch[6] === 'undefined') - continue; - - let tmpRule = {}; - let ruleParams = {}; - { - let params = contextMatch[8].split(','); - for(let j = 0; j < params.length; ++j) - ruleParams[params[j]] = ['m', j]; - } - tmpRule.left = contextMatch[2]; - if(tmpRule.left) - { - let params = contextMatch[4].split(','); - for(let j = 0; j < params.length; ++j) - ruleParams[params[j]] = ['l', j]; - } - tmpRule.right = contextMatch[10]; - { - let params = contextMatch[12].split(','); - 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 = { - 'a': ['m', 0], - 'b': ['l', 0], - 'c': ['r', 0], - 'd': ['r', 1] - }; - */ - tmpRule.paramMap = (v, l, m, r) => - { - let pos = tmpRule.params[v][0]; - switch(pos) - { - case 'm': - if(m) - return m[tmpRule.params[v][1]]; - case 'l': - if(l) - return l[tmpRule.params[v][1]]; - case 'r': - if(r) - return r[tmpRule.params[v][1]]; - } - // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) - } - - // [i][2]: condition - tmpRule.condition = MathExpression.parse(ruleMatches[i][2]); - - // let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t==0=[+(30)G]F/(180)A(2):0.5,[-(30)G]F\(180)A(2):0.5']); - // [i][4+4k]: derivation(s) - // [i][6+4k]: probability - // j = 4k - for(let j = 0; j + 4 < ruleMatches[i].length; j += 4) - { - if(typeof ruleMatches[i][j + 4] === 'undefined') - continue; - - let tmpDeriv = this.parseSequence(ruleMatches[i][j + 4]); - if(typeof tmpRule.derivations === 'string') - { - tmpRule.derivations = [tmpRule.derivations, - tmpDeriv.sequence]; - tmpRule.parameters = [tmpRule.parameters, tmpDeriv.params]; - if(ruleMatches[i][j + 6]) - tmpRule.chances = [tmpRule.chances, - MathExpression.parse(ruleMatches[i][j + 6])]; - else - tmpRule.chances = [tmpRule.chances, - MathExpression.parse('1')]; - } - else - { - tmpRule.derivations.push(tmpDeriv.sequence); - tmpRule.parameters.push(tmpDeriv.params); - if(ruleMatches[i][j + 6]) - tmpRule.chances.push(MathExpression.parse( - ruleMatches[i][j + 6])); - else - tmpRule.chances.push(MathExpression.parse('1')); - } - } - - // Finally, push rule - if(contextMatch[6] == '~') - { - if(!this.models.has(contextMatch[6])) - this.models.set(contextMatch[6], []); - this.models.get(contextMatch[6]).push(tmpRule); - } - else - { - if(!this.rules.has(contextMatch[6])) - this.rules.set(contextMatch[6], []); - this.rules.get(contextMatch[6]).push(tmpRule); - } - } - } - - /** - * Parse a sequence to return one array of characters and one of parameters. - * @param {string} sequence the sequence to be parsed. - * @returns {object} - */ - parseSequence(sequence) - { - let result = ''; - let resultParams = []; - let bracketLvl = 0; - let start = null; - for(let i = 0; i < sequence.length; ++i) - { - switch(sequence[i]) - { - case ' ': - log('Blank space detected.') - break; - case '(': - ++bracketLvl; - if(bracketLvl == 1) - start = i + 1; - break; - case ')': - if(!bracketLvl) - { - log('You\'ve clearly made a bracket error.'); - break; - } - --bracketLvl; - if(!bracketLvl) - resultParams.push(MathExpression.parse( - sequence.slice(start, i))); - break; - default: - if(bracketLvl) - break; - - result += sequence[i]; - if(sequence[i + 1] != '(') - resultParams.push(null); - break; - } - } - return { - sequence: result, - params: resultParams - }; - // Tested this out on Chrome console, it worked. - } - - getAncestree(sequence) - { - // Scanning behaviour should be very similar to renderer drawing. - let stack = []; - let idxStack = []; - let ancestors = []; - let children = []; - for(let i = 0; i < sequence.length; ++i) - { - switch(sequence[i]) - { - case ' ': - log('Blank space detected.') - break; - case '[': - idxStack.push(stack.length); - break; - case ']': - if(stack.length == 0) - { - log('You\'ve clearly made a bracket error.'); - break; - } - while(stack.length > idxStack[idxStack.length - 1]) - stack.pop(); - - idxStack.pop(); - break; - default: - let ignored = this.ignoreList.has(sequence[i]); - if(ignored) - break; - - if(stack.length > 0) - { - let ancIdx = stack[stack.length - 1]; - ancestors[i] = ancIdx; - if(typeof children[ancIdx] === 'undefined') - children[ancIdx] = []; - children[ancIdx].push(i); - } - - stack.push(i); - break; - } - } - return { - ancestors: ancestors, - children: children - }; - // Tested this out on Chrome console, it worked. - } -} \ No newline at end of file From a0d05d281c93f242f98e77d420357f32b17a5643 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 02:12:31 +0700 Subject: [PATCH 55/94] Implemented first version of derive() --- parametric.js | 162 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 152 insertions(+), 10 deletions(-) diff --git a/parametric.js b/parametric.js index 62948f2..8892fda 100644 --- a/parametric.js +++ b/parametric.js @@ -6,6 +6,18 @@ var description = 'Get wrecked.'; var authors = 'propfeds#5988'; var version = 0; +let time = 0; +let page = 0; +let offlineReset = true; +let gameIsOffline = false; +let altTerEq = false; +let tickDelayMode = false; +let resetLvlOnConstruct = true; +let measurePerformance = false; +let debugCamPath = false; +let maxCharsPerTick = 1000; +let menuLang = Localization.language; + const TRIM_SP = /\s+/g; const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; // Context doesn't need to check for nested brackets! @@ -340,7 +352,7 @@ class ParametricLSystem this.userInput = { axiom: axiom, - // rules: this.purgeEmpty(rules), + rules: this.purgeEmpty(rules), turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, @@ -602,7 +614,9 @@ class ParametricLSystem let idxStack = []; let ancestors = []; let children = []; - for(let i = 0; i < sequence.length; ++i) + let i; // Piece of shit Javascript doesn't let me put the let in the + // for loop normally. + for(i = 0; i < sequence.length; ++i) { switch(sequence[i]) { @@ -655,7 +669,7 @@ class ParametricLSystem * @param {string} sequence the input string. * @returns {{next: number, result: string}} */ - derive(sequence, seqParams, start = 0) + derive(sequence, seqParams, ancestors, children, start = 0) { let result = ''; let resultParams = []; @@ -697,18 +711,111 @@ class ParametricLSystem continue; else if(this.rules.has(sequence[i])) { - // parse - a + log(i); + let tmpRules = this.rules.get(sequence[i]); + for(let j = 0; j < tmpRules.length; ++j) + { + // Left and right first + if(tmpRules[j].left && tmpRules[j].left != + sequence[ancestors[i]]) + continue; + + let right = -1; + if(tmpRules[j].right) + { + for(let k = 0; k < children[i].length; ++k) + { + if(tmpRules[j].right == sequence[children[i][k]]) + { + right = children[i][k]; + break; + } + } + if(right == -1) + continue; + } + + let tmpParamMap = (v) => tmpRules[j].paramMap(v, + seqParams[ancestors[i]], seqParams[i], seqParams[right]); + // Next up is the condition + if(!tmpRules[j].condition.evaluate(tmpParamMap)) + continue; + + if(typeof tmpRules[j].derivations === 'string') + { + deriv = tmpRules[j].derivations; + if(tmpRules[j].parameters) + { + derivParams = []; + for(let k = 0; k < tmpRules[j].parameters.length; + ++k) + { + if(tmpRules[j].parameters[k]) + derivParams.push( + tmpRules[j].parameters[k].evaluate( + tmpParamMap)); + else + derivParams.push(null); + } + } + break; + } + else // Stochastic time + { + let roll = this.RNG.nextFloat(); + let chanceSum = 0; + let choice = -1; + for(let k = 0; k < tmpRules[j].derivations.length; ++k) + { + // Example + // roll: 0.50 + // chance 1: 0.00 - 0.49 + // sum after 1: 0.50 + // chance 2: 0.50 - 0.99 + // sum after 2: 1 (select!) + chanceSum += tmpRules[j].chances[k].evaluate( + tmpParamMap); + if(chanceSum > roll) // select this + { + deriv = tmpRules[j].derivations[k]; + log(deriv) + if(tmpRules[j].parameters[k]) + { + derivParams = []; + log(JSON.stringify(tmpRules[j].parameters[k], undefined, 4)) + for(let l = 0; l < tmpRules[j]. + parameters[k].length; ++l) + { + if(tmpRules[j].parameters[k][l]) + { + let tmpParams = []; + for(let m = 0; m < tmpRules[j]. + parameters[k][l].length; ++m) + { + tmpParams.push( + tmpRules[j].parameters[k][l][m]. + evaluate(tmpParamMap)); + } + derivParams.push(tmpParams); + } + else + derivParams.push(null); + } + } + break; + } + } + if(choice == -1) + continue; + break; + } + } } else deriv = sequence[i]; result += deriv; resultParams.push(derivParams); - // if(typeof deriv === 'string') - // result += deriv; - // else - // result += deriv[this.RNG.nextRange(0, deriv.length)]; } return { next: 0, @@ -721,6 +828,41 @@ class ParametricLSystem { } + + /** + * Purge the rules of empty lines. + * @param {string[]} rules rules. + * @returns {string[]} + */ + purgeEmpty(rules) + { + let result = []; + let idx = 0; + for(let i = 0; i < rules.length; ++i) + { + // I hope this deep-copies + if(rules[i]) + { + result[idx] = rules[i]; + ++idx; + } + } + return result; + } } -let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=0=[+(30)G]F/(180)A(2):0.5,[-(30)G]F\\(180)A(2):0.5']); +let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5']); +// A(0) +let a0 = 'A'; +let a0p = [[BigNumber.ZERO]]; +let tmpDeriv = a.derive(a0, a0p, [null], [null], 0); +let a1 = tmpDeriv.result; +let a1p = tmpDeriv.params; +log(a1); +log(a1p.toString()); +let at1 = a.getAncestree(a1); +tmpDeriv = a.derive(a1, a1p, at1.ancestors, at1.children, 0); +let a2 = tmpDeriv.result; +let a2p = tmpDeriv.params; +log(a2); +log(a2p.toString()); From c8c1cf31efa262127b4963383a51eb69f8f8e84c Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 13:03:50 +0700 Subject: [PATCH 56/94] Fixed regex not separating derivations properly --- parametric.js | 73 ++++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/parametric.js b/parametric.js index 8892fda..011148d 100644 --- a/parametric.js +++ b/parametric.js @@ -15,15 +15,14 @@ let tickDelayMode = false; let resetLvlOnConstruct = true; let measurePerformance = false; let debugCamPath = false; -let maxCharsPerTick = 1000; +let maxCharsPerTick = 1250; let menuLang = Localization.language; const TRIM_SP = /\s+/g; -const LS_RULE = /(.+):(.+)=(([^:]+)(:([^,]+))?)(,([^:]+)(:([^,]+))?)*/; +const LS_RULE = /(.+):(.+)=(.*)/; // Context doesn't need to check for nested brackets! const LS_CONTEXT = /((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; -// But individual symbols do. /** * Represents an instance of the Xorshift RNG. @@ -432,18 +431,31 @@ class ParametricLSystem tmpRule.paramMap = (v, l, m, r) => { let pos = tmpRule.params[v][0]; + let result = null; switch(pos) { case 'm': if(m) - return m[tmpRule.params[v][1]]; + { + result = m[tmpRule.params[v][1]]; + log(`m = ${m}`) + break; + } case 'l': if(l) - return l[tmpRule.params[v][1]]; + { + result = l[tmpRule.params[v][1]]; + break; + } case 'r': if(r) + { return r[tmpRule.params[v][1]]; + break; + } } + log(`${v} = ${result}`); + return result; // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) } @@ -453,28 +465,17 @@ class ParametricLSystem else tmpRule.condition = MathExpression.parse('true'); - // [i][4+4k]: derivation(s) - // [i][6+4k]: probability - // j = 4k - for(let j = 0; j + 4 < ruleMatches[i].length; j += 4) + // [i][3]: everything else + let tmpRuleMatches = ruleMatches[i][3].split(','); + for(let j = 0; j < tmpRuleMatches.length; ++j) { - if(!ruleMatches[i][j + 4]) + if(typeof tmpRuleMatches[j] === 'undefined') continue; - let tmpDeriv = this.parseSequence(ruleMatches[i][j + 4]); + log(`j = ${j}`) + tmpRuleMatches[j] = tmpRuleMatches[j].split(':'); + let tmpDeriv = this.parseSequence(tmpRuleMatches[j][0]); let derivParams = tmpDeriv.params; - // for(let i = 0; i < this.axiomParams.length; ++i) - // { - // if(!this.axiomParams[i]) - // continue; - - // let params = this.axiomParams[i].split(','); - // // console.log(params) - // for(let j = 0; j < params.length; ++j) - // params[j] = MathExpression.parse(params[j]).evaluate(); - // this.axiomParams[i] = params; - // // Maybe leave them at BigNumber? - // } for(let k = 0; k < derivParams.length; ++k) { if(!derivParams[k]) @@ -491,9 +492,9 @@ class ParametricLSystem tmpRule.derivations = [tmpRule.derivations, tmpDeriv.result]; tmpRule.parameters = [tmpRule.parameters, derivParams]; - if(ruleMatches[i][j + 6]) + if(tmpRuleMatches[j][1]) tmpRule.chances = [tmpRule.chances, - MathExpression.parse(ruleMatches[i][j + 6])]; + MathExpression.parse(tmpRuleMatches[j][1])]; else tmpRule.chances = [tmpRule.chances, MathExpression.parse('1')]; @@ -502,9 +503,9 @@ class ParametricLSystem { tmpRule.derivations = tmpDeriv.result; tmpRule.parameters = derivParams; - if(ruleMatches[i][j + 6]) + if(tmpRuleMatches[j][1]) tmpRule.chances = MathExpression.parse( - ruleMatches[i][j + 6]); + tmpRuleMatches[j][1]); else tmpRule.chances = MathExpression.parse('1'); } @@ -512,12 +513,13 @@ class ParametricLSystem { tmpRule.derivations.push(tmpDeriv.result); tmpRule.parameters.push(derivParams); - if(ruleMatches[i][j + 6]) + if(tmpRuleMatches[j][1]) tmpRule.chances.push(MathExpression.parse( - ruleMatches[i][j + 6])); + tmpRuleMatches[j][1])); else tmpRule.chances.push(MathExpression.parse('1')); } + log(tmpRule.derivations.toString()) } // Finally, push rule @@ -711,7 +713,6 @@ class ParametricLSystem continue; else if(this.rules.has(sequence[i])) { - log(i); let tmpRules = this.rules.get(sequence[i]); for(let j = 0; j < tmpRules.length; ++j) { @@ -735,6 +736,8 @@ class ParametricLSystem continue; } + if(typeof seqParams[i] !== 'undefined') + log(seqParams[i].toString()) let tmpParamMap = (v) => tmpRules[j].paramMap(v, seqParams[ancestors[i]], seqParams[i], seqParams[right]); // Next up is the condition @@ -763,6 +766,7 @@ class ParametricLSystem else // Stochastic time { let roll = this.RNG.nextFloat(); + log(`roll = ${roll}`) let chanceSum = 0; let choice = -1; for(let k = 0; k < tmpRules[j].derivations.length; ++k) @@ -777,12 +781,12 @@ class ParametricLSystem tmpParamMap); if(chanceSum > roll) // select this { + choice = k; deriv = tmpRules[j].derivations[k]; log(deriv) if(tmpRules[j].parameters[k]) { derivParams = []; - log(JSON.stringify(tmpRules[j].parameters[k], undefined, 4)) for(let l = 0; l < tmpRules[j]. parameters[k].length; ++l) { @@ -805,6 +809,7 @@ class ParametricLSystem break; } } + log(`choice = ${choice}`) if(choice == -1) continue; break; @@ -816,6 +821,7 @@ class ParametricLSystem result += deriv; resultParams.push(derivParams); + log(`${i} ${resultParams.length}`) } return { next: 0, @@ -851,11 +857,12 @@ class ParametricLSystem } } -let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5']); +let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); // A(0) let a0 = 'A'; let a0p = [[BigNumber.ZERO]]; -let tmpDeriv = a.derive(a0, a0p, [null], [null], 0); +let at0 = a.getAncestree(a0); +let tmpDeriv = a.derive(a0, a0p, at0.ancestors, at0.children, 0); let a1 = tmpDeriv.result; let a1p = tmpDeriv.params; log(a1); From 0441e4a37f7b5932e5cef00dc88a64f53b6ce055 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 13:31:27 +0700 Subject: [PATCH 57/94] Fixed derivation returning wrong array shapes --- parametric.js | 58 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/parametric.js b/parametric.js index 011148d..7af2098 100644 --- a/parametric.js +++ b/parametric.js @@ -368,22 +368,18 @@ class ParametricLSystem continue; let params = this.axiomParams[i].split(','); - // console.log(params) for(let j = 0; j < params.length; ++j) params[j] = MathExpression.parse(params[j]).evaluate(); this.axiomParams[i] = params; // Maybe leave them at BigNumber? } - // console.log(this.axiomParams.toString()); let ruleMatches = []; for(let i = 0; i < rules.length; ++i) { ruleMatches.push([...rules[i].replace(TRIM_SP, '').match( LS_RULE)]); - // console.log(ruleMatches[i].toString()); - // Indices 1, 2, 4+4k, 6+4k are context, condition, derivation and - // probability respectively + // Indices 1, 2, 3 are context, condition, and all derivations } this.rules = new Map(); this.models = new Map(); @@ -438,7 +434,6 @@ class ParametricLSystem if(m) { result = m[tmpRule.params[v][1]]; - log(`m = ${m}`) break; } case 'l': @@ -450,7 +445,7 @@ class ParametricLSystem case 'r': if(r) { - return r[tmpRule.params[v][1]]; + result = r[tmpRule.params[v][1]]; break; } } @@ -472,7 +467,6 @@ class ParametricLSystem if(typeof tmpRuleMatches[j] === 'undefined') continue; - log(`j = ${j}`) tmpRuleMatches[j] = tmpRuleMatches[j].split(':'); let tmpDeriv = this.parseSequence(tmpRuleMatches[j][0]); let derivParams = tmpDeriv.params; @@ -519,7 +513,6 @@ class ParametricLSystem else tmpRule.chances.push(MathExpression.parse('1')); } - log(tmpRule.derivations.toString()) } // Finally, push rule @@ -753,12 +746,20 @@ class ParametricLSystem for(let k = 0; k < tmpRules[j].parameters.length; ++k) { - if(tmpRules[j].parameters[k]) - derivParams.push( - tmpRules[j].parameters[k].evaluate( - tmpParamMap)); - else - derivParams.push(null); + let derivPi = null; + for(let l = 0; l < tmpRules[j].parameters[k]. + length; ++l) + { + if(tmpRules[j].parameters[k][l]) + { + if(!derivPi) + derivPi = []; + derivPi.push( + tmpRules[j].parameters[k][l].evaluate( + tmpParamMap)); + } + } + derivParams.push(derivPi); } } break; @@ -783,27 +784,30 @@ class ParametricLSystem { choice = k; deriv = tmpRules[j].derivations[k]; - log(deriv) if(tmpRules[j].parameters[k]) { derivParams = []; for(let l = 0; l < tmpRules[j]. parameters[k].length; ++l) { + let derivPi = null; if(tmpRules[j].parameters[k][l]) { - let tmpParams = []; for(let m = 0; m < tmpRules[j]. parameters[k][l].length; ++m) { - tmpParams.push( - tmpRules[j].parameters[k][l][m]. - evaluate(tmpParamMap)); + if(tmpRules[j]. + parameters[k][l][m]) + { + if(!derivPi) + derivPi = []; + derivPi.push(tmpRules[j]. + parameters[k][l][m]. + evaluate(tmpParamMap)); + } } - derivParams.push(tmpParams); } - else - derivParams.push(null); + derivParams.push(derivPi); } } break; @@ -817,10 +821,16 @@ class ParametricLSystem } } else + { deriv = sequence[i]; + derivParams = seqParams[i]; + } result += deriv; - resultParams.push(derivParams); + if(derivParams) + resultParams.push(...derivParams); + else + resultParams.push(derivParams); log(`${i} ${resultParams.length}`) } return { From 7a031c6d41eff9cbe1f5ac5f8a1fb0d51b8aab80 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 14:01:58 +0700 Subject: [PATCH 58/94] Fixed single symbol params not deriving correctly --- parametric.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/parametric.js b/parametric.js index 7af2098..f3742d9 100644 --- a/parametric.js +++ b/parametric.js @@ -449,7 +449,7 @@ class ParametricLSystem break; } } - log(`${v} = ${result}`); + // log(`${v} = ${result}`); return result; // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) } @@ -729,8 +729,6 @@ class ParametricLSystem continue; } - if(typeof seqParams[i] !== 'undefined') - log(seqParams[i].toString()) let tmpParamMap = (v) => tmpRules[j].paramMap(v, seqParams[ancestors[i]], seqParams[i], seqParams[right]); // Next up is the condition @@ -767,7 +765,6 @@ class ParametricLSystem else // Stochastic time { let roll = this.RNG.nextFloat(); - log(`roll = ${roll}`) let chanceSum = 0; let choice = -1; for(let k = 0; k < tmpRules[j].derivations.length; ++k) @@ -813,7 +810,7 @@ class ParametricLSystem break; } } - log(`choice = ${choice}`) + // log(`roll = ${roll} choice = ${choice}`) if(choice == -1) continue; break; @@ -823,7 +820,7 @@ class ParametricLSystem else { deriv = sequence[i]; - derivParams = seqParams[i]; + derivParams = [seqParams[i]]; } result += deriv; @@ -831,7 +828,6 @@ class ParametricLSystem resultParams.push(...derivParams); else resultParams.push(derivParams); - log(`${i} ${resultParams.length}`) } return { next: 0, @@ -840,11 +836,22 @@ class ParametricLSystem }; } - deriveModel(symbol) + deriveModel(symbol, symbolParams) { } + reconstruct(sequence, params) + { + let result = ''; + for(let i = 0; i < sequence.length; ++i) + { + result += sequence[i]; + if(params[i]) + result += `(${params[i].join(', ')})`; + } + return result; + } /** * Purge the rules of empty lines. * @param {string[]} rules rules. @@ -875,11 +882,10 @@ let at0 = a.getAncestree(a0); let tmpDeriv = a.derive(a0, a0p, at0.ancestors, at0.children, 0); let a1 = tmpDeriv.result; let a1p = tmpDeriv.params; -log(a1); -log(a1p.toString()); +log(a.reconstruct(a1, a1p)); + let at1 = a.getAncestree(a1); tmpDeriv = a.derive(a1, a1p, at1.ancestors, at1.children, 0); let a2 = tmpDeriv.result; let a2p = tmpDeriv.params; -log(a2); -log(a2p.toString()); +log(a.reconstruct(a2, a2p)); From bac0807fd653da86c0acf6078e3a737d1a63793f Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 15:37:51 +0700 Subject: [PATCH 59/94] Implemented the rest of ParametricLSystem --- parametric.js | 140 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 3 deletions(-) diff --git a/parametric.js b/parametric.js index f3742d9..e8b199d 100644 --- a/parametric.js +++ b/parametric.js @@ -1,7 +1,7 @@ import { MathExpression } from "../api/MathExpression"; var id = 'parametric_L_systems_renderer'; -var name = 'Parametric L-systems Renderer'; +var name = 'Param. L-systems Renderer'; var description = 'Get wrecked.'; var authors = 'propfeds#5988'; var version = 0; @@ -601,7 +601,11 @@ class ParametricLSystem }; // Tested this out on Chrome console, it worked. } - + /** + * Returns and ancestree and a child tree for a sequence. + * @param {string} sequence the sequence. + * @returns {object} + */ getAncestree(sequence) { // Scanning behaviour should be very similar to renderer drawing. @@ -836,9 +840,107 @@ class ParametricLSystem }; } - deriveModel(symbol, symbolParams) + deriveModel(symbol, params) { + let result = ''; + let resultParams = []; + if(this.models.has(symbol)) + { + let tmpRules = this.models.get(symbol); + for(let j = 0; j < tmpRules.length; ++j) + { + let tmpParamMap = (v) => tmpRules[j].paramMap(v, + null, null, params); + // Next up is the condition + if(!tmpRules[j].condition.evaluate(tmpParamMap)) + continue; + if(typeof tmpRules[j].derivations === 'string') + { + result = tmpRules[j].derivations; + if(tmpRules[j].parameters) + { + for(let k = 0; k < tmpRules[j].parameters.length; + ++k) + { + let derivPi = null; + for(let l = 0; l < tmpRules[j].parameters[k]. + length; ++l) + { + if(tmpRules[j].parameters[k][l]) + { + if(!derivPi) + derivPi = []; + derivPi.push( + tmpRules[j].parameters[k][l].evaluate( + tmpParamMap)); + } + } + resultParams.push(derivPi); + } + } + break; + } + else // Stochastic time + { + // Models can be drawn any time, thus, the RNG should be + // separate from actual rule processing. + let roll = globalRNG.nextFloat(); + let chanceSum = 0; + let choice = -1; + for(let k = 0; k < tmpRules[j].derivations.length; ++k) + { + // Example + // roll: 0.50 + // chance 1: 0.00 - 0.49 + // sum after 1: 0.50 + // chance 2: 0.50 - 0.99 + // sum after 2: 1 (select!) + chanceSum += tmpRules[j].chances[k].evaluate( + tmpParamMap); + if(chanceSum > roll) // select this + { + choice = k; + result = tmpRules[j].derivations[k]; + if(tmpRules[j].parameters[k]) + { + for(let l = 0; l < tmpRules[j]. + parameters[k].length; ++l) + { + let derivPi = null; + if(tmpRules[j].parameters[k][l]) + { + for(let m = 0; m < tmpRules[j]. + parameters[k][l].length; ++m) + { + if(tmpRules[j]. + parameters[k][l][m]) + { + if(!derivPi) + derivPi = []; + derivPi.push(tmpRules[j]. + parameters[k][l][m]. + evaluate(tmpParamMap)); + } + } + } + resultParams.push(derivPi); + } + } + break; + } + } + // log(`roll = ${roll} choice = ${choice}`) + if(choice == -1) + continue; + break; + } + } + } + return { + result: result, + params: resultParams + }; } reconstruct(sequence, params) @@ -872,6 +974,38 @@ class ParametricLSystem } return result; } + /** + * Returns a deep copy (hopefully) of the user input to prevent overwrites. + * @returns {{ + * axiom: string, + * rules: string[], + * turnAngle: string, + * seed: number, + * ignoreList: string, + * tropism: string, + * variables: object + * }} + */ + get object() + { + return { + axiom: this.userInput.axiom, + rules: this.purgeEmpty(this.userInput.rules), + turnAngle: this.userInput.turnAngle, + seed: this.userInput.seed, + ignoreList: this.userInput.ignoreList, + tropism: this.userInput.tropism, + variables: this.userInput.variables + }; + } + /** + * Returns the system's string representation. + * @returns {string} + */ + toString() + { + return JSON.stringify(this.object, null, 4); + } } let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); From d931c316b6ba9472a7801085d38061e39204e4d1 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 16:40:14 +0700 Subject: [PATCH 60/94] Completed 1/2 of Renderer porting --- parametric.js | 1268 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1259 insertions(+), 9 deletions(-) diff --git a/parametric.js b/parametric.js index e8b199d..8f4f1f8 100644 --- a/parametric.js +++ b/parametric.js @@ -1,9 +1,58 @@ -import { MathExpression } from "../api/MathExpression"; +import { FreeCost } from '../api/Costs'; +import { theory } from '../api/Theory'; +import { Utils } from '../api/Utils'; +import { Vector3 } from '../api/Vector3'; +import { ui } from '../api/ui/UI'; +import { Color } from '../api/ui/properties/Color'; +import { FontFamily } from '../api/ui/properties/FontFamily'; +import { Keyboard } from '../api/ui/properties/Keyboard'; +import { LayoutOptions } from '../api/ui/properties/LayoutOptions'; +import { TextAlignment } from '../api/ui/properties/TextAlignment'; +import { Thickness } from '../api/ui/properties/Thickness'; +import { TouchType } from '../api/ui/properties/TouchType'; +import { Localization } from '../api/Localization'; +import { MathExpression } from '../api/MathExpression'; +import { ClearButtonVisibility } from '../api/ui/properties/ClearButtonVisibility'; +import { LineBreakMode } from '../api/ui/properties/LineBreakMode'; +import { BigNumber } from '../api/BigNumber'; +import { Upgrade } from '../api/Upgrades'; +import { Button } from '../api/ui/Button'; +import { Frame } from '../api/ui/Frame'; var id = 'parametric_L_systems_renderer'; -var name = 'Param. L-systems Renderer'; -var description = 'Get wrecked.'; -var authors = 'propfeds#5988'; +var getName = (language) => +{ + let names = + { + en: 'Param. L-systems Renderer', + }; + + return names[language] || names.en; +} +var getDescription = (language) => +{ + let descs = + { + en: +`An educational tool that allows you to model plants, mostly. + +Supported L-system features: +- Parametric, context-sensitive (2L) systems +- Stochastic (randomised) rules +- 3D turtle controls +- Polygon modelling + +Other features: +- Can save a whole army of systems! +- Camera modes: static and turtle-following +- Drawing speed and advanced stroke options!`, + }; + + return descs[language] || descs.en; +} +var authors = 'propfeds#5988\n\nThanks to:\nSir Gilles-Philippe Paillé, ' + + 'for providing help with quaternions\nskyhigh173#3120, for ' + + 'suggesting clipboard and JSON internal state formatting'; var version = 0; let time = 0; @@ -18,11 +67,67 @@ let debugCamPath = false; let maxCharsPerTick = 1250; let menuLang = Localization.language; +let savedSystems = new Map(); + +let getImageSize = (width) => +{ + if(width >= 1080) + return 48; + if(width >= 720) + return 36; + if(width >= 360) + return 24; + + return 20; +} + +let getBtnSize = (width) => +{ + if(width >= 1080) + return 96; + if(width >= 720) + return 72; + if(width >= 360) + return 48; + + return 40; +} + +let getMediumBtnSize = (width) => +{ + if(width >= 1080) + return 88; + if(width >= 720) + return 66; + if(width >= 360) + return 44; + + return 36; +} + +let getSmallBtnSize = (width) => +{ + if(width >= 1080) + return 80; + if(width >= 720) + return 60; + if(width >= 360) + return 40; + + return 32; +} + +const BUTTON_HEIGHT = getBtnSize(ui.screenWidth); +const SMALL_BUTTON_HEIGHT = getSmallBtnSize(ui.screenWidth); +const ENTRY_CHAR_LIMIT = 5000; const TRIM_SP = /\s+/g; const LS_RULE = /(.+):(.+)=(.*)/; // Context doesn't need to check for nested brackets! const LS_CONTEXT = /((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; +const CTX_IGNORE_LIST = new Set('FfT+-&^\\/|{.}%~$'); +const BACKTRACK_LIST = new Set('+-&^\\/|[$T'); +// TODO: copy from locStrings downward /** * Represents an instance of the Xorshift RNG. @@ -156,6 +261,45 @@ class Quaternion this.j * quat.i + this.k * quat.r; return new Quaternion(t0, t1, t2, t3); } + /** + * Rotates the quaternion by some degrees. + * @param {number} degrees degrees. + * @param {string} symbol the corresponding symbol in L-system language. + */ + rotate(degrees = 0, symbol = '+') + { + if(degrees == 0) + return this; + + let halfAngle = degrees * Math.PI / 360; + let s = Math.sin(halfAngle); + let c = Math.cos(halfAngle); + let rotation; + switch(symbol) + { + case '+': + rotation = new Quaternion(-c, 0, 0, s); + break; + case '-': + rotation = new Quaternion(-c, 0, 0, -s); + break; + case '&': + rotation = new Quaternion(-c, 0, s, 0); + break; + case '^': + rotation = new Quaternion(-c, 0, -s, 0); + break; + case '\\': + rotation = new Quaternion(-c, s, 0, 0); + break; + case '/': + rotation = new Quaternion(-c, -s, 0, 0); + break; + default: + return this; + } + return rotation.mul(this); + } /** * Computes the negation of a quaternion. The negation also acts as the * inverse if the quaternion's norm is 1, which is the case with rotation @@ -332,7 +476,7 @@ class Quaternion /** * Represents a parametric L-system. */ -class ParametricLSystem +class LSystem { /** * @constructor @@ -362,6 +506,7 @@ class ParametricLSystem this.axiom = axiomMatches.result; this.axiomParams = axiomMatches.params; + // Manually calculate axiom parameters for(let i = 0; i < this.axiomParams.length; ++i) { if(!this.axiomParams[i]) @@ -531,8 +676,6 @@ class ParametricLSystem } this.ignoreList = new Set(ignoreList); - // This is a context ignore list. Turtle ignore list is separate. - this.ctxIgnoreList = new Set('FfT+-&^\\/|{.}%~$'); this.RNG = new Xorshift(seed); this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate() * @@ -637,7 +780,7 @@ class ParametricLSystem idxStack.pop(); break; default: - let ignored = this.ctxIgnoreList.has(sequence[i]); + let ignored = CTX_IGNORE_LIST.has(sequence[i]); if(ignored) break; @@ -1008,7 +1151,1114 @@ class ParametricLSystem } } -let a = new ParametricLSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); +/** + * The renderer handles all logic for drawing the L-system. + */ +class Renderer +{ + /** + * @constructor + * @param {LSystem} system the L-system to be handled. + * @param {string} figureScale the zoom level expression. + * @param {boolean} cameraMode the camera mode. + * @param {string} camX the camera's x-axis centre. + * @param {string} camY the camera's y-axis centre. + * @param {string} camZ the camera's z-axis centre. + * @param {number} followFactor the camera's cursor-following speed. + * @param {number} loopMode the renderer's looping mode. + * @param {boolean} upright whether to rotate the system around the z-axis + * by 90 degrees. + * @param {boolean} quickDraw whether to skip through straight lines on the + * way forward. + * @param {boolean} quickBacktrack whether to skip through straight lines on + * the way backward. + * @param {boolean} loadModels whether to load dedicated models for symbols. + * @param {boolean} backtrackTail whether to backtrack at the end of a loop. + * @param {boolean} hesitateApex whether to stutter for 1 tick at apices. + * @param {boolean} hesitateFork whether to stutter for 1 tick at forks. + */ + constructor(system, figureScale = 1, cameraMode = 0, camX = 0, camY = 0, + camZ = 0, followFactor = 0.15, loopMode = 0, upright = false, + quickDraw = false, quickBacktrack = false, loadModels = true, + backtrackTail = false, hesitateApex = true, hesitateFork = true) + { + /** + * @type {LSystem} the L-system being handled. + */ + this.system = system; + /** + * @type {string} kept for comparison in the renderer menu. + */ + this.figScaleStr = figureScale.toString(); + /** + * @type {MathExpression} the figure scale expression. + */ + this.figScaleExpr = MathExpression.parse(this.figScaleStr); + /** + * @type {number} the calculated figure scale. + */ + this.figureScale = 1; + /** + * @type {boolean} the camera mode. + */ + this.cameraMode = Math.round(Math.min(Math.max(cameraMode, 0), 2)); + /** + * @type {string} kept for comparison in the renderer menu. + */ + this.camXStr = camX.toString(); + /** + * @type {string} kept for comparison in the renderer menu. + */ + this.camYStr = camY.toString(); + /** + * @type {string} kept for comparison in the renderer menu. + */ + this.camZStr = camZ.toString(); + /** + * @type {MathExpression} the camera x expression. + */ + this.camXExpr = MathExpression.parse(this.camXStr); + /** + * @type {MathExpression} the camera y expression. + */ + this.camYExpr = MathExpression.parse(this.camYStr); + /** + * @type {MathExpression} the camera z expression. + */ + this.camZExpr = MathExpression.parse(this.camZStr); + /** + * @type {Vector3} the calculated static camera coordinates. + */ + this.camCentre = new Vector3(0, 0, 0); + /** + * @type {number} the follow factor. + */ + this.followFactor = Math.min(Math.max(followFactor, 0), 1); + /** + * @type {number} the looping mode. + */ + this.loopMode = Math.round(Math.min(Math.max(loopMode, 0), 2)); + /** + * @type {boolean} the x-axis' orientation. + */ + this.upright = upright; + /** + * @type {boolean} whether to skip through straight lines on the way + * forward. + */ + this.quickDraw = quickDraw; + /** + * @type {boolean} whether to skip through straight lines on the way + * back. + */ + this.quickBacktrack = quickBacktrack; + /** + * @type {boolean} whether to load models. + */ + this.loadModels = loadModels; + /** + * @type {boolean} whether to backtrack at the end. + */ + this.backtrackTail = backtrackTail; + /** + * @type {boolean} whether to hesitate at apices. + */ + this.hesitateApex = hesitateApex; + /** + * @type {boolean} whether to hesitate at forks. + */ + this.hesitateFork = hesitateFork; + /** + * @type {Vector3} the turtle's position. + */ + this.state = new Vector3(0, 0, 0); + /** + * @type {Quaternion} the turtle's orientation. + */ + this.ori = this.upright ? uprightQuat : new Quaternion(); + /** + * @type {string[]} every level of the current system. + */ + this.levels = []; + this.levelParams = []; + // Only stores one level, temporari + this.ancestors = null; + this.children = null; + /** + * @type {number} the current level (updates after buying the variable). + */ + this.lv = -1; + /** + * @type {number} the maximum level loaded. + */ + this.loaded = -1; + /** + * @type {number} the load target level. + */ + this.loadTarget = 0; + /** + * @type {[Vector3, Quaternion][]} stores cursor states for brackets. + */ + this.stack = []; + /** + * @type {number[]} stores the indices of the other stack. + */ + this.idxStack = []; + /** + * @type {string[]} keeps the currently rendered models. + */ + this.models = []; + this.modelParams = []; + /** + * @type {number[]} keeps the indices of the other stack. + */ + this.mdi = []; + /** + * @type {number} the current index of the sequence. + */ + this.i = 0; + /** + * @type {number} the elapsed time. + */ + this.elapsed = 0; + /** + * @type {number} the number of turns before the renderer starts working + * again. + */ + this.cooldown = 0; + /** + * @type {Vector3} the last tick's camera position. + */ + this.lastCamera = new Vector3(0, 0, 0); + /** + * @type {Vector3} the last tick's camera velocity. + */ + this.lastCamVel = new Vector3(0, 0, 0); + /** + * @type {number} the next index to update for the current level. + */ + this.nextDeriveIdx = 0; + /** + * @type {number} how many nested polygons currently in (pls keep at 1). + */ + this.polygonMode = 0; + } + + /** + * Updates the renderer's level. + * @param {number} level the target level. + * @param {boolean} seedChanged whether the seed has changed. + */ + update(level, seedChanged = false) + { + let clearGraph = this.loopMode != 2 || level < this.lv || seedChanged; + + if(this.lv != level) + { + this.reset(clearGraph); + this.lv = level; + this.figureScale = this.figScaleExpr.evaluate( + v => this.getVariable(v)).toNumber(); + if(this.figureScale == 0) + this.figureScale = 1; + this.camCentre = new Vector3 + ( + this.camXExpr.evaluate(v => this.getVariable(v)).toNumber(), + this.camYExpr.evaluate(v => this.getVariable(v)).toNumber(), + this.camZExpr.evaluate(v => this.getVariable(v)).toNumber() + ); + } + + this.loadTarget = Math.max(level, this.loadTarget); + + let charCount = 0; + for(let i = this.loaded + 1; i <= this.loadTarget; ++i) + { + // Threshold to prevent maximum statements error + if(charCount > maxCharsPerTick) + return; + + if(i == 0) + { + this.levels[i] = this.system.axiom; + this.levelParams[i] = this.system.axiomParams; + charCount += this.levels[i].length; + this.nextDeriveIdx = 0; + } + else + { + if(!this.ancestors) + { + let at = this.system.getAncestree(this.levels[i - 1]); + this.ancestors = at.ancestors; + this.children = at.children; + charCount += this.ancestors.length; + } + let ret = this.system.derive(this.levels[i - 1], + this.levelParams[i - 1], this.ancestors, this.children, + this.nextDeriveIdx); + if(this.nextDeriveIdx == 0) + { + this.levels[i] = ret.result; + this.levelParams[i - 1] = ret.params; + } + else + { + this.levels[i] += ret.result; + this.levelParams[i - 1].push(...ret.params); + } + + this.nextDeriveIdx = ret.next; + charCount += ret.result.length; + } + if(this.nextDeriveIdx == 0) + { + ++this.loaded; + this.ancestors = null; + this.children = null; + } + else + return; + } + this.reset(clearGraph); + } + /** + * Resets the renderer. + * @param {boolean} clearGraph whether to clear the graph. + */ + reset(clearGraph = true) + { + this.state = new Vector3(0, 0, 0); + this.ori = this.upright ? uprightQuat : new Quaternion(); + this.stack = []; + this.idxStack = []; + this.i = 0; + this.models = []; + this.modelParams = []; + this.mdi = []; + this.cooldown = 0; + this.polygonMode = 0; + if(clearGraph) + { + this.elapsed = 0; + time = 0; + theory.clearGraph(); + } + theory.invalidateTertiaryEquation(); + } + /** + * Configures every parameter of the renderer, except the system. + * @param {string} figureScale the zoom level expression. + * @param {boolean} cameraMode the camera mode. + * @param {string} camX the camera's x-axis centre. + * @param {string} camY the camera's y-axis centre. + * @param {string} camZ the camera's z-axis centre. + * @param {number} followFactor the camera's cursor-following speed. + * @param {number} loopMode the renderer's looping mode. + * @param {boolean} upright whether to rotate the system around the z-axis + * by 90 degrees. + * @param {boolean} quickDraw whether to skip through straight lines on the + * way forward. + * @param {boolean} quickBacktrack whether to skip through straight lines + * on the way backward. + * @param {boolean} loadModels whether to load dedicated models for symbols. + * @param {boolean} backtrackTail whether to backtrack at the end of a loop. + * @param {boolean} hesitateApex whether to stutter for 1 tick at apices. + * @param {boolean} hesitateFork whether to stutter for 1 tick at forks. + */ + configure(figureScale, cameraMode, camX, camY, camZ, followFactor, + loopMode, upright, quickDraw, quickBacktrack, loadModels, backtrackTail, + hesitateApex, hesitateFork) + { + let requireReset = (figureScale !== this.figScaleStr) || + (upright != this.upright) || (quickDraw != this.quickDraw) || + (quickBacktrack != this.quickBacktrack) || + (loadModels != this.loadModels) || + (hesitateApex != this.hesitateApex) || + (hesitateFork != this.hesitateFork); + + this.figScaleStr = figureScale.toString(); + this.figScaleExpr = MathExpression.parse(this.figScaleStr); + this.figureScale = this.figScaleExpr.evaluate( + v => this.getVariable(v)).toNumber(); + if(this.figureScale == 0) + this.figureScale = 1; + this.cameraMode = cameraMode; + this.camXStr = camX.toString(); + this.camYStr = camY.toString(); + this.camZStr = camZ.toString(); + this.camXExpr = MathExpression.parse(this.camXStr); + this.camYExpr = MathExpression.parse(this.camYStr); + this.camZExpr = MathExpression.parse(this.camZStr); + this.camCentre = new Vector3 + ( + this.camXExpr.evaluate(v => this.getVariable(v)).toNumber(), + this.camYExpr.evaluate(v => this.getVariable(v)).toNumber(), + this.camZExpr.evaluate(v => this.getVariable(v)).toNumber() + ); + this.followFactor = followFactor; + this.loopMode = loopMode; + this.upright = upright; + this.quickDraw = quickDraw; + this.quickBacktrack = quickBacktrack; + this.loadModels = loadModels; + this.backtrackTail = backtrackTail; + this.hesitateApex = hesitateApex; + this.hesitateFork = hesitateFork; + + if(requireReset) + this.reset(); + } + /** + * Configures only the parameters related to the static camera mode. + * @param {string} figureScale the zoom level expression. + * @param {string} camX the camera's x-axis centre. + * @param {string} camY the camera's y-axis centre. + * @param {string} camZ the camera's z-axis centre. + * @param {boolean} upright whether to rotate the system around the z-axis + * by 90 degrees. + */ + configureStaticCamera(figureScale, camX, camY, camZ, upright) + { + let requireReset = (figureScale !== this.figScaleStr) || + (upright != this.upright); + + this.figScaleStr = figureScale.toString(); + this.figScaleExpr = MathExpression.parse(this.figScaleStr); + this.figureScale = this.figScaleExpr.evaluate( + v => this.getVariable(v)).toNumber(); + if(this.figureScale == 0) + this.figureScale = 1; + this.camXStr = camX.toString(); + this.camYStr = camY.toString(); + this.camZStr = camZ.toString(); + this.camXExpr = MathExpression.parse(this.camXStr); + this.camYExpr = MathExpression.parse(this.camYStr); + this.camZExpr = MathExpression.parse(this.camZStr); + this.camCentre = new Vector3 + ( + this.camXExpr.evaluate(v => this.getVariable(v)).toNumber(), + this.camYExpr.evaluate(v => this.getVariable(v)).toNumber(), + this.camZExpr.evaluate(v => this.getVariable(v)).toNumber() + ); + this.upright = upright; + + if(requireReset) + this.reset(); + } + /** + * Applies a new L-system to the renderer. + * @param {LSystem} system the new system. + */ + set constructSystem(system) + { + this.system = system; + this.levels = []; + this.levelParams = []; + this.nextDeriveIdx = 0; + this.loaded = -1; + this.loadTarget = 0; + if(resetLvlOnConstruct) + l.level = 0; + this.update(l.level); + } + /** + * Sets the seed of the current system. + * @param {number} seed the seed. + */ + set seed(seed) + { + this.system.seed = seed; + this.nextDeriveIdx = 0; + this.loaded = -1; + this.loadTarget = this.lv; + this.update(this.lv, true); + } + /** + * Moves the cursor forward. + */ + forward(distance = 1) + { + this.state += this.ori.headingVector * distance; + } + /** + * Ticks the clock. + * @param {number} dt the amount of time passed. + */ + tick(dt) + { + if(this.lv > this.loaded + 1 || + typeof this.levels[this.lv] === 'undefined' || + this.levels[this.lv].length == 0) + return; + + if(this.i >= this.levels[this.lv].length && this.loopMode == 0) + if(!this.backtrackTail || this.stack.length == 0) + return; + + this.elapsed += dt; + } + /** + * Computes the next cursor position internally. + * @param {number} level the level to be drawn. + */ + draw(level, onlyUpdate = false) + { + /* + Behold the broken monster patched by sheer duct tape. + I can guarantee that because the game runs on one thread, the renderer + would always load faster than it draws. Unless you make a rule that + spawns 10000 plus signs. Please don't do it. + */ + if(level > this.loaded) + this.update(level); + + // You can't believe how many times I have to type this typeof clause. + if(level > this.loaded + 1 || + typeof this.levels[this.lv] === 'undefined') + return; + + if(onlyUpdate) + return; + + // This is to prevent the renderer from skipping the first point. + if(this.elapsed <= 0.101) + return; + + /* + Don't worry, it'll not run forever. This is just to prevent the renderer + from hesitating for 1 tick every loop. + */ + let j, t, moved; + let loopLimit = 2; // Shenanigans may arise with models? Try this + for(j = 0; j < loopLimit; ++j) + { + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + if(this.models.length > 0) + { + // Unreadable pile of shit + for(; this.mdi[this.mdi.length - 1] < + this.models[this.models.length - 1].length; + ++this.mdi[this.mdi.length - 1]) + { + switch(this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + { + case ' ': + log('Blank space detected.') + break; + case '+': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.rotate(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber(), + '+'); + else + this.ori = this.system.rotations.get('+').mul( + this.ori); + break; + case '-': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.rotate(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber(), + '-'); + else + this.ori = this.system.rotations.get('-').mul( + this.ori); + break; + case '&': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.rotate(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber(), + '&'); + else + this.ori = this.system.rotations.get('&').mul( + this.ori); + break; + case '^': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.rotate(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber(), + '^'); + else + this.ori = this.system.rotations.get('^').mul( + this.ori); + break; + case '\\': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.rotate(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber(), + '\\'); + else + this.ori = this.system.rotations.get('\\').mul( + this.ori); + break; + case '/': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.rotate(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber(), + '/'); + else + this.ori = this.system.rotations.get('/').mul( + this.ori); + break; + case '|': + this.ori = zUpQuat.mul(this.ori); + break; + case '$': + this.ori = this.ori.alignToVertical(); + break; + case 'T': + if(this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.ori = this.ori.applyTropism( + this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]][0].toNumber()); + else + this.ori = this.ori.applyTropism( + this.system.tropism); + break; + case '~': + if(!this.system.models.has( + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1] + 1])) + break; + + ++this.mdi[this.mdi.length - 1]; + let model = this.system.deriveModel(this.models[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]], this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]]); + + this.models.push(model.result); + this.modelParams.push(model.params); + this.mdi.push(0); + return; + case '[': + this.idxStack.push(this.stack.length); + this.stack.push([this.state, this.ori]); + break; + case ']': + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + if(this.stack.length == 0) + { + log('You\'ve clearly made a bracket error.'); + break; + } + + moved = this.state !== + this.stack[this.stack.length - 1][0]; + + t = this.stack.pop(); + this.state = t[0]; + this.ori = t[1]; + if(this.stack.length == + this.idxStack[this.idxStack.length - 1]) + { + this.idxStack.pop(); + if(moved) + this.cooldown = 1; + if(this.hesitateFork && this.polygonMode <= 0) + { + ++this.mdi[this.mdi.length - 1]; + return; + } + else + { + break; + } + } + if(this.polygonMode <= 0) + return; + else + { + --this.mdi[this.mdi.length - 1]; + break; + } + case '%': + // Nothing to do here + break; + case '{': + ++this.polygonMode; + break; + case '}': + --this.polygonMode; + break; + case '.': + if(this.polygonMode <= 0) + log('You cannot register a vertex outside of ' + + 'polygon drawing.'); + else + ++this.mdi[this.mdi.length - 1]; + return; + default: + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + let ignored = this.system.ignoreList.has( + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) || + this.loadModels && this.system.models.has( + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]); + let breakAhead = BACKTRACK_LIST.has( + this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1] + 1]); + let btAhead = this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1] + 1] == ']' || + this.mdi[this.mdi.length - 1] == + this.models[this.models.length - 1].length - 1; + + if(this.hesitateApex && btAhead) + this.cooldown = 1; + + if(this.quickDraw && breakAhead) + this.cooldown = 1; + + moved = this.stack.length == 0 || + (this.stack.length > 0 && this.state !== + this.stack[this.stack.length - 1][0]); + + if(!this.quickBacktrack && moved && !ignored) + this.stack.push([this.state, this.ori]); + + if(!ignored) + { + if(this.models[this.models.length - 1][ + this.mdi[this.mdi.length - 1]] == 'F' && + this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]) + this.forward(this.modelParams[ + this.models.length - 1][ + this.mdi[this.mdi.length - 1]][ + 0].toNumber()); + else + this.forward(); + } + + if(this.quickBacktrack && breakAhead) + this.stack.push([this.state, this.ori]); + + if(this.quickDraw && !btAhead) + break; + else if(this.polygonMode <= 0) + { + ++this.mdi[this.mdi.length - 1]; + return; + } + else + break; + } + } + this.models.pop(); + this.modelParams.pop(); + this.mdi.pop(); + ++loopLimit; + // continue prevents the regular loop from running + continue; + } + for(; this.i < this.levels[this.lv].length; ++this.i) + { + // if(this.models.length > 0) + // break; + switch(this.levels[this.lv][this.i]) + { + case ' ': + log('Blank space detected.') + break; + case '+': + this.ori = this.system.rotations.get('+').mul(this.ori); + break; + case '-': + this.ori = this.system.rotations.get('-').mul(this.ori); + break; + case '&': + this.ori = this.system.rotations.get('&').mul(this.ori); + break; + case '^': + this.ori = this.system.rotations.get('^').mul(this.ori); + break; + case '\\': + this.ori = this.system.rotations.get('\\').mul( + this.ori); + break; + case '/': + this.ori = this.system.rotations.get('/').mul(this.ori); + break; + case '|': + this.ori = zUpQuat.mul(this.ori); + break; + case '$': + this.ori = this.ori.alignToVertical(); + break; + case 'T': + this.ori = this.ori.applyTropism(this.system.tropism); + break; + case '~': + if(!this.loadModels || !this.system.models.has( + this.levels[this.lv][this.i + 1])) + break; + + ++this.i; + this.models.push(this.system.models.get( + this.levels[this.lv][this.i])); + this.mdi.push(0); + return; + case '[': + this.idxStack.push(this.stack.length); + this.stack.push([this.state, this.ori]); + break; + case ']': + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + if(this.stack.length == 0) + { + log('You\'ve clearly made a bracket error.'); + break; + } + + moved = this.state !== + this.stack[this.stack.length - 1][0]; + + t = this.stack.pop(); + this.state = t[0]; + this.ori = t[1]; + if(this.stack.length == + this.idxStack[this.idxStack.length - 1]) + { + this.idxStack.pop(); + if(moved) + this.cooldown = 1; + if(this.hesitateFork && this.polygonMode <= 0) + { + ++this.i; + return; + } + else + { + break; + } + } + if(this.polygonMode <= 0) + return; + else + { + --this.i; + break; + } + case '%': + // Nothing to do here, all handled by LSystem derivation + break; + case '{': + ++this.polygonMode; + break; + case '}': + --this.polygonMode; + break; + case '.': + if(this.polygonMode <= 0) + log('You cannot register a vertex outside of ' + + 'polygon drawing.'); + else + ++this.i; + return; + default: + if(this.cooldown > 0 && this.polygonMode <= 0) + { + --this.cooldown; + return; + } + + let ignored = this.system.ignoreList.has( + this.levels[this.lv][this.i]) || this.loadModels && + this.system.models.has(this.levels[this.lv][this.i]); + let breakAhead = BACKTRACK_LIST.has( + this.levels[this.lv][this.i + 1]); + let btAhead = this.levels[this.lv][this.i + 1] == ']' || + this.i == this.levels[this.lv].length - 1; + + if(this.hesitateApex && btAhead) + this.cooldown = 1; + + if(this.quickDraw && breakAhead) + this.cooldown = 1; + + moved = this.stack.length == 0 || + (this.stack.length > 0 && this.state !== + this.stack[this.stack.length - 1][0]); + + if(!this.quickBacktrack && moved && !ignored) + this.stack.push([this.state, this.ori]); + + if(!ignored) + this.forward(); + + if(this.quickBacktrack && breakAhead) + this.stack.push([this.state, this.ori]); + + if(this.quickDraw && !btAhead) + break; + else if(this.polygonMode <= 0) + { + ++this.i; + return; + } + else + break; + } + } + // This is what the renderer will do at the end of a loop + if(!this.backtrackTail || this.stack.length == 0) + { + switch(this.loopMode) + { + case 2: + l.buy(1); + break; + case 1: + this.reset(false); + break; + case 0: + return; + } + } + else + { + let t = this.stack.pop(); + this.state = t[0]; + this.ori = t[1]; + return; + } + } + } + /** + * Return swizzled coordinates according to the in-game system. The game + * uses Android UI coordinates, which is X-right Y-down Z-face. + * @param {Vector3} coords the original coordinates. + * @returns {Vector3} + */ + swizzle(coords) + { + // The game uses left-handed Y-up, aka Y-down coordinates. + return new Vector3(coords.x, -coords.y, coords.z); + } + /** + * Returns a variable's value for maths expressions. + * @param {string} v the variable's name. + * @returns {BigNumber} + */ + getVariable(v) + { + switch(v) + { + case 'lv': return BigNumber.from(this.lv); + } + return null; + } + /** + * Returns the camera centre's coordinates. + * @returns {Vector3} + */ + get centre() + { + if(this.cameraMode) + return -this.cursor; + + return this.swizzle(-this.camCentre / this.figureScale); + } + /** + * Returns the turtle's coordinates. + * @returns {Vector3} + */ + get cursor() + { + let coords = this.state / this.figureScale; + return this.swizzle(coords); + } + /** + * Returns the camera's coordinates. + * @returns {Vector3} + */ + get camera() + { + let newCamera; + switch(this.cameraMode) + { + case 2: + // I accidentally discovered Bézier curves unknowingly. + let dist = this.centre - this.lastCamera; + newCamera = this.lastCamera + dist * this.followFactor ** 2 + + this.lastCamVel * (1 - this.followFactor) ** 2; + this.lastCamVel = newCamera - this.lastCamera; + this.lastCamera = newCamera; + return newCamera; + case 1: + newCamera = this.centre * this.followFactor + + this.lastCamera * (1 - this.followFactor); + this.lastCamVel = newCamera - this.lastCamera; + this.lastCamera = newCamera; + return newCamera; + case 0: + return this.centre; + } + } + /** + * Returns the static camera configuration. + * @returns {[string, string, string, string, boolean]} + */ + get staticCamera() + { + return [ + this.figScaleStr, + this.camXStr, + this.camYStr, + this.camZStr, + this.upright + ]; + } + /** + * Returns the elapsed time. + * @returns {[number, number]} + */ + get elapsedTime() + { + return [ + Math.floor(this.elapsed / 60), + this.elapsed % 60 + ]; + } + /** + * Returns the current progress on this level, in a fraction. + * @returns {[number, number]} + */ + get progressFrac() + { + return [this.i, this.levels[this.lv].length]; + } + /** + * Returns the current progress on this level, in percent. + * @returns {number} + */ + get progressPercent() + { + if(typeof this.levels[this.lv] === 'undefined') + return 0; + + let pf = this.progressFrac; + let result = pf[0] * 100 / pf[1]; + if(isNaN(result)) + result = 0; + + return result; + } + /** + * Returns the current progress fraction as a string. + * @returns {string} + */ + get progressString() + { + let pf = this.progressFrac; + return `i=${pf[0]}/${pf[1]}`; + } + /** + * Returns a loading message. + * @returns {string} + */ + get loadingString() + { + let len = typeof this.levels[this.loaded + 1] === 'undefined' ? 0 : + this.levels[this.loaded + 1].length; + return Localization.format(getLoc('rendererLoading'), this.loaded + 1, + len); + } + /** + * Returns the cursor's position as a string. + * @returns {string} + */ + get stateString() + { + if(typeof this.levels[this.lv] === 'undefined') + return this.loadingString; + + return `\\begin{matrix}x=${getCoordString(this.state.x)},& + y=${getCoordString(this.state.y)},&z=${getCoordString(this.state.z)},& + ${this.progressString}\\end{matrix}`; + } + /** + * Returns the cursor's orientation as a string. + * @returns {string} + */ + get oriString() + { + if(typeof this.levels[this.lv] === 'undefined') + return this.loadingString; + + return `\\begin{matrix}q=${this.ori.toString()},&${this.progressString} + \\end{matrix}`; + } + /** + * Returns the object representation of the renderer. + * @returns {object} + */ + get object() + { + return { + figureScale: this.figScaleStr, + cameraMode: this.cameraMode, + camX: this.camXStr, + camY: this.camYStr, + camZ: this.camZStr, + followFactor: this.followFactor, + loopMode: this.loopMode, + upright: this.upright, + loadModels: this.loadModels, + quickDraw: this.quickDraw, + quickBacktrack: this.quickBacktrack, + backtrackTail: this.backtrackTail, + hesitateApex: this.hesitateApex, + hesitateFork: this.hesitateFork + } + } + /** + * Returns the renderer's string representation. + * @returns {string} + */ + toString() + { + return JSON.stringify(this.object, null, 4); + } +} + +let a = new LSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); // A(0) let a0 = 'A'; let a0p = [[BigNumber.ZERO]]; From d75ffb3f81148fcdff592310b4210bf3a446cada Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 17:10:54 +0700 Subject: [PATCH 61/94] (Untested) Ported Renderer --- parametric.js | 518 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 492 insertions(+), 26 deletions(-) diff --git a/parametric.js b/parametric.js index 8f4f1f8..09c681b 100644 --- a/parametric.js +++ b/parametric.js @@ -1892,23 +1892,52 @@ class Renderer log('Blank space detected.') break; case '+': - this.ori = this.system.rotations.get('+').mul(this.ori); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.rotate(this.levelParams[ + this.lv][this.i][0].toNumber(), '+'); + else + this.ori = this.system.rotations.get('+').mul( + this.ori); break; case '-': - this.ori = this.system.rotations.get('-').mul(this.ori); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.rotate(this.levelParams[ + this.lv][this.i][0].toNumber(), '-'); + else + this.ori = this.system.rotations.get('-').mul( + this.ori); break; case '&': - this.ori = this.system.rotations.get('&').mul(this.ori); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.rotate(this.levelParams[ + this.lv][this.i][0].toNumber(), '&'); + else + this.ori = this.system.rotations.get('&').mul( + this.ori); break; case '^': - this.ori = this.system.rotations.get('^').mul(this.ori); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.rotate(this.levelParams[ + this.lv][this.i][0].toNumber(), '^'); + else + this.ori = this.system.rotations.get('^').mul( + this.ori); break; case '\\': - this.ori = this.system.rotations.get('\\').mul( - this.ori); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.rotate(this.levelParams[ + this.lv][this.i][0].toNumber(), '\\'); + else + this.ori = this.system.rotations.get('\\').mul( + this.ori); break; case '/': - this.ori = this.system.rotations.get('/').mul(this.ori); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.rotate(this.levelParams[ + this.lv][this.i][0].toNumber(), '/'); + else + this.ori = this.system.rotations.get('/').mul( + this.ori); break; case '|': this.ori = zUpQuat.mul(this.ori); @@ -1917,7 +1946,12 @@ class Renderer this.ori = this.ori.alignToVertical(); break; case 'T': - this.ori = this.ori.applyTropism(this.system.tropism); + if(this.levelParams[this.lv][this.i]) + this.ori = this.ori.applyTropism(this.levelParams[ + this.lv][this.i][0].toNumber()); + else + this.ori = this.ori.applyTropism( + this.system.tropism); break; case '~': if(!this.loadModels || !this.system.models.has( @@ -1925,8 +1959,11 @@ class Renderer break; ++this.i; - this.models.push(this.system.models.get( - this.levels[this.lv][this.i])); + let model = this.system.deriveModel(this.levels[ + this.lv][this.i], this.levelParams[this.lv][this.i]); + + this.models.push(model.result); + this.modelParams.push(model.params); this.mdi.push(0); return; case '[': @@ -2020,7 +2057,14 @@ class Renderer this.stack.push([this.state, this.ori]); if(!ignored) - this.forward(); + { + if(this.levels[this.lv][this.i] == 'F' && + this.levelParams[this.lv][this.i]) + this.forward(this.levelParams[this.lv][this.i][ + 0].toNumber()); + else + this.forward(); + } if(this.quickBacktrack && breakAhead) this.stack.push([this.state, this.ori]); @@ -2258,18 +2302,440 @@ class Renderer } } -let a = new LSystem('[+(30)G]F/(180)A(2)', ['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); -// A(0) -let a0 = 'A'; -let a0p = [[BigNumber.ZERO]]; -let at0 = a.getAncestree(a0); -let tmpDeriv = a.derive(a0, a0p, at0.ancestors, at0.children, 0); -let a1 = tmpDeriv.result; -let a1p = tmpDeriv.params; -log(a.reconstruct(a1, a1p)); - -let at1 = a.getAncestree(a1); -tmpDeriv = a.derive(a1, a1p, at1.ancestors, at1.children, 0); -let a2 = tmpDeriv.result; -let a2p = tmpDeriv.params; -log(a.reconstruct(a2, a2p)); +/** + * Represents a bunch of buttons for variable controls. + */ +class VariableControls +{ + /** + * @constructor + * @param {Upgrade} variable the variable being controlled. + * @param {boolean} useAnchor whether to use anchor controls. + * @param {number} quickbuyAmount the amount of levels to buy when held. + */ + constructor(variable, useAnchor = false, quickbuyAmount = 10) + { + /** + * @type {Upgrade} the variable being controlled. + */ + this.variable = variable; + /** + * @type {Frame} the variable button. + */ + this.varBtn = null; + /** + * @type {Frame} the refund button. + */ + this.refundBtn = null; + /** + * @type {Frame} the buy button. + */ + this.buyBtn = null; + + /** + * @type {boolean} whether to use anchor controls. + */ + this.useAnchor = useAnchor; + /** + * @type {number} the anchored variable level. + */ + this.anchor = this.variable.level; + /** + * @type {number} whether the anchor is on. + */ + this.anchorActive = false; + /** + * @type {number} the amount of levels to buy when held. + */ + this.quickbuyAmount = quickbuyAmount; + } + + /** + * Updates all buttons, visually. + */ + updateAllButtons() + { + this.updateDescription(); + this.updateRefundButton(); + this.updateBuyButton(); + } + /** + * Updates the variable description written on the button's label. + */ + updateDescription() + { + this.varBtn.content.text = this.variable.getDescription(); + } + /** + * Creates a variable button. + * @param {function(void): void} callback when pressed, calls this function. + * @param {number} height the button's height. + * @returns {Frame} + */ + createVariableButton(callback = null, height = BUTTON_HEIGHT) + { + if(this.varBtn) + return this.varBtn; + + let frame = ui.createFrame + ({ + heightRequest: height, + cornerRadius: 1, + padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel + ({ + text: this.variable.getDescription(), + verticalTextAlignment: TextAlignment.CENTER, + textColor: Color.TEXT_MEDIUM + }), + borderColor: Color.TRANSPARENT + }); + if(callback) + { + frame.borderColor = Color.BORDER; + frame.content.textColor = Color.TEXT; + 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 + } + } + } + this.varBtn = frame; + return this.varBtn; + } + /** + * Updates the refund button, visually. + */ + updateRefundButton() + { + this.refundBtn.borderColor = this.variable.level > 0 ? Color.BORDER : + Color.TRANSPARENT; + this.refundBtn.content.textColor = this.variable.level > 0 ? + Color.TEXT : Color.TEXT_MEDIUM; + } + /** + * Creates a refund button. + * @param {string} symbol the button's label. + * @param {number} height the button's height. + * @returns {Frame} + */ + createRefundButton(symbol = '-', height = BUTTON_HEIGHT) + { + if(this.refundBtn) + return this.refundBtn; + + this.refundBtn = ui.createFrame + ({ + heightRequest: height, + cornerRadius: 1, + padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel + ({ + text: symbol, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + textColor: this.variable.level > 0 ? Color.TEXT : + Color.TEXT_MEDIUM + }), + onTouched: (e) => + { + if(e.type == TouchType.PRESSED) + { + this.refundBtn.borderColor = Color.TRANSPARENT; + this.refundBtn.content.textColor = this.variable.level > 0 ? + Color.TEXT_MEDIUM : Color.TEXT_DARK; + } + else if(e.type == TouchType.SHORTPRESS_RELEASED) + { + Sound.playClick(); + this.variable.refund(1); + } + else if(e.type == TouchType.LONGPRESS) + { + Sound.playClick(); + if(this.useAnchor) + { + this.anchorActive = true; + if(this.variable.level > 0) + this.anchor = this.variable.level; + } + this.variable.refund(this.quickbuyAmount); + } + else if(e.type == TouchType.CANCELLED) + { + this.updateRefundButton(); + } + }, + borderColor: this.variable.level > 0 ? Color.BORDER : + Color.TRANSPARENT + }); + return this.refundBtn; + } + /** + * Updates the buy button, visually. + */ + updateBuyButton() + { + this.buyBtn.borderColor = this.variable.level < this.variable.maxLevel ? + Color.BORDER : Color.TRANSPARENT; + this.buyBtn.content.textColor = this.variable.level < + this.variable.maxLevel ? Color.TEXT : Color.TEXT_MEDIUM; + } + /** + * Creates a buy button. + * @param {string} symbol the button's label. + * @param {number} height the button's height. + * @returns {Frame} + */ + createBuyButton(symbol = '+', height = BUTTON_HEIGHT) + { + if(this.buyBtn) + return this.buyBtn; + + this.buyBtn = ui.createFrame + ({ + heightRequest: height, + cornerRadius: 1, + padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel + ({ + text: symbol, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + textColor: this.variable.level < this.variable.maxLevel ? + Color.TEXT : Color.TEXT_MEDIUM + }), + onTouched: (e) => + { + if(e.type == TouchType.PRESSED) + { + this.buyBtn.borderColor = Color.TRANSPARENT; + this.buyBtn.content.textColor = this.variable.level < + this.variable.maxLevel ? Color.TEXT_MEDIUM : + Color.TEXT_DARK; + } + else if(e.type == TouchType.SHORTPRESS_RELEASED) + { + Sound.playClick(); + this.variable.buy(1); + } + else if(e.type == TouchType.LONGPRESS) + { + Sound.playClick(); + let q = this.quickbuyAmount; + if(this.useAnchor && this.anchorActive) + { + q = Math.min(q, this.anchor - this.variable.level); + if(q == 0) + q = this.quickbuyAmount; + this.anchorActive = false; + } + for(let i = 0; i < q; ++i) + this.variable.buy(1); + } + else if(e.type == TouchType.CANCELLED) + { + this.updateBuyButton(); + } + }, + borderColor: this.variable.level < this.variable.maxLevel ? + Color.BORDER : Color.TRANSPARENT + }); + return this.buyBtn; + } +} + +/** + * Measures performance for a piece of code. + */ +class Measurer +{ + /** + * @constructor + * @param {string} title the measurement's title. + * @param {number} window the sample size. + */ + constructor(title, window = 10) + { + /** + * @type {string} the measurement's title. + */ + this.title = title; + /** + * @type {number} the sample size. + */ + this.window = window; + /** + * @type {number} the all-time sum. + */ + this.sum = 0; + /** + * @type {number} the window sum. + */ + this.windowSum = 0; + /** + * @type {number} the all-time maximum. + */ + this.max = 0; + /** + * @type {number[]} recent records. + */ + this.records = []; + for(let i = 0; i < this.window; ++i) + this.records[i] = 0; + /** + * @type {number} the elapsed time in ticks. + */ + this.ticksPassed = 0; + /** + * @type {number} the most recent moment the function was stamped. + */ + this.lastStamp = null; + } + + /** + * Resets the measurer. + */ + reset() + { + this.sum = 0; + this.windowSum = 0; + this.max = 0; + this.records = []; + for(let i = 0; i < this.window; ++i) + this.records[i] = 0; + this.ticksPassed = 0; + this.lastStamp = null; + } + /** + * Stamps the measurer. + */ + stamp() + { + if(!this.lastStamp) + this.lastStamp = Date.now(); + else + { + let closingStamp = Date.now(); + let i = this.ticksPassed % this.window; + this.windowSum -= this.records[i]; + this.records[i] = closingStamp - this.lastStamp; + this.windowSum += this.records[i]; + this.sum += this.records[i]; + this.max = Math.max(this.max, this.records[i]); + this.lastStamp = null; + ++this.ticksPassed; + } + } + /** + * Returns the window average. + * @returns {number} + */ + get windowAvg() + { + return this.windowSum / Math.min(this.window, this.ticksPassed); + } + /** + * Returns the all-time average. + * @returns {number} + */ + get allTimeAvg() + { + return this.sum / this.ticksPassed; + } + /** + * Returns the string for the window average. + * @returns {string} + */ + get windowAvgString() + { + if(this.ticksPassed == 0) + return ''; + + if(!measurePerformance) + return ''; + + return Localization.format(getLoc('measurement'), this.title, + getCoordString(this.max), getCoordString(this.windowAvg), + Math.min(this.window, this.ticksPassed)); + } + /** + * Returns the string for the all-time average. + * @returns {string} + */ + get allTimeAvgString() + { + if(this.ticksPassed == 0) + return ''; + + if(!measurePerformance) + return ''; + + return Localization.format(getLoc('measurement'), this.title, + getCoordString(this.max), getCoordString(this.allTimeAvg), + this.ticksPassed); + } +} + +// const sidewayQuat = new Quaternion(1, 0, 0, 0); +const uprightQuat = new Quaternion(-Math.sqrt(2)/2, 0, 0, Math.sqrt(2)/2); +const xUpQuat = new Quaternion(0, 1, 0, 0); +const yUpQuat = new Quaternion(0, 0, 1, 0); +const zUpQuat = new Quaternion(0, 0, 0, 1); + +let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); +let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); +let globalRNG = new Xorshift(Date.now()); +let contentsTable = [0]; +let manualSystems = {}; +let tmpSystem = null; +let tmpSystemName = getLoc('welcomeSystemName'); +let tmpSystemDesc = getLoc('welcomeSystemDesc'); + +var l, ts; +// Variable controls +let lvlControls, tsControls; + +// Measure drawing performance +let drawMeasurer = new Measurer('renderer.draw()', 30); +let camMeasurer = new Measurer('renderer.camera', 30); + +// Start from init + +let testSuite = () => +{ + let a = new LSystem('[+(30)G]F/(180)A(2)',['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); + // A(0) + let a0 = 'A'; + let a0p = [[BigNumber.ZERO]]; + let at0 = a.getAncestree(a0); + let tmpDeriv = a.derive(a0, a0p, at0.ancestors, at0.children, 0); + let a1 = tmpDeriv.result; + let a1p = tmpDeriv.params; + log(a.reconstruct(a1, a1p)); + + let at1 = a.getAncestree(a1); + tmpDeriv = a.derive(a1, a1p, at1.ancestors, at1.children, 0); + let a2 = tmpDeriv.result; + let a2p = tmpDeriv.params; + log(a.reconstruct(a2, a2p)); +} From 937564af05b4049446d320f32d44976027df7073 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 18:22:44 +0700 Subject: [PATCH 62/94] Fixed ParaLS parser not working w/o params or cond --- classic.js | 1 + parametric.js | 232 +++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 212 insertions(+), 21 deletions(-) diff --git a/classic.js b/classic.js index 1e126ee..9282060 100644 --- a/classic.js +++ b/classic.js @@ -937,6 +937,7 @@ let getLoc = (name, lang = menuLang) => /** * Returns a string of a fixed decimal number, with a fairly uniform width. + * @param {number} x the number. * @returns {string} */ let getCoordString = (x) => x.toFixed(x >= -0.01 ? diff --git a/parametric.js b/parametric.js index 09c681b..73f33d0 100644 --- a/parametric.js +++ b/parametric.js @@ -121,13 +121,181 @@ const BUTTON_HEIGHT = getBtnSize(ui.screenWidth); const SMALL_BUTTON_HEIGHT = getSmallBtnSize(ui.screenWidth); const ENTRY_CHAR_LIMIT = 5000; const TRIM_SP = /\s+/g; -const LS_RULE = /(.+):(.+)=(.*)/; +const LS_RULE = /([^:]+)(:(.+))?=(.*)/; // Context doesn't need to check for nested brackets! const LS_CONTEXT = /((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; const CTX_IGNORE_LIST = new Set('FfT+-&^\\/|{.}%~$'); const BACKTRACK_LIST = new Set('+-&^\\/|[$T'); -// TODO: copy from locStrings downward + +const locStrings = +{ + en: + { + versionName: 'v1.0, Work in Progress', + welcomeSystemName: 'Arrow', + welcomeSystemDesc: 'Welcome to L-systems Renderer!', + equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', + equationOverlay: '{0}\n\n{1}', + + rendererLoading: `\\begin{{matrix}}Loading...&\\text{{Stg. {0}}}&({1} +\\text{{ chars}})\\end{{matrix}}`, + + currencyTime: ' (elapsed)', + + varLvDesc: '\\text{{Stage: }}{0}{1}', + varTdDesc: '\\text{{Tick length: }}{0}\\text{{ sec}}', + varTdDescInf: '\\text{{Tick length: }}\\infty', + varTsDesc: '\\text{{Tickspeed: }}{0}/\\text{{sec}}', + upgResumeInfo: 'Resumes the last rendered system', + + saPatienceTitle: 'You\'re watching grass grow.', + saPatienceDesc: 'Let the renderer draw a 10-minute long figure or ' + + 'playlist.', + saPatienceHint: 'Be patient.', + + btnSave: 'Save', + btnClear: 'Clear All', + btnDefault: '* Reset to Defaults', + btnAdd: 'Add', + btnUp: '▲', + btnDown: '▼', + btnReroll: 'Reroll', + btnConstruct: 'Construct', + btnDelete: 'Delete', + btnView: 'View', + btnClipboard: 'Clipboard', + btnOverwrite: 'Overwrite', + btnSaveCopy: 'Save as Copy', + btnSelect: 'Select', + btnSelected: '(Selected)', + btnPrev: 'Previous', + btnNext: 'Next', + btnClose: 'Close', + btnImport: 'Import', + btnContents: 'Table of\nContents', + btnPage: '{0}', + + btnMenuLSystem: 'L-system menu', + btnMenuRenderer: 'Renderer menu', + btnMenuSave: 'Save/load', + btnMenuTheory: 'Settings', + btnMenuManual: 'User guide', + btnResume: 'Resume – {0}', + btnStartMeasure: 'Measure performance', + btnEndMeasure: 'Stop measuring', + + measurement: '{0}: max {1}ms, avg {2}ms over {3} ticks', + + rerollSeed: 'You are about to reroll the system\'s seed.', + resetRenderer: 'You are about to reset the renderer.', + + menuSequence: '{0} (Stage {1})', + labelLevelSeq: 'Stage {0}: {1} chars', + labelChars: '({0} chars)', + + menuLSystem: 'L-system Menu', + labelAxiom: 'Axiom: ', + labelAngle: 'Turning angle (°): ', + labelRules: 'Production rules: {0}', + labelIgnored: 'Ignored symbols: ', + labelTropism: 'Tropism (gravity): ', + labelSeed: 'Seed (≠ 0): ', + + menuRenderer: 'Renderer Menu', + labelInitScale: '* Initial scale: ', + labelFigScale: '* Figure scale: ', + labelCamMode: 'Camera mode: {0}', + camModes: ['Fixed', 'Linear', 'Quadratic'], + labelCamCentre: 'Fixed camera centre (x,): ', + labelCamOffset: '... centre (y, z): ', + labelFollowFactor: 'Follow factor (0-1): ', + labelLoopMode: 'Looping mode: {0}', + loopModes: ['Off', 'Stage', 'Playlist'], + labelUpright: '* Upright figure: ', + labelBTTail: 'Draw tail end: ', + labelLoadModels: '* Load models: ', + labelQuickdraw: '* Quickdraw: ', + labelQuickBT: '* Quick backtrack: ', + labelHesitate: '* Stutter on backtrack: ', + labelHesitateApex: '* Stutter at apex: ', + labelHesitateFork: '* Stutter at fork: ', + labelOldTropism: '* Alternate tropism method: ', + labelBTList: '* Backtrack list: ', + labelRequireReset: '* Modifying this setting will require a reset.', + + menuSave: 'Save/Load Menu', + labelCurrentSystem: 'Current system: ', + labelSavedSystems: 'Saved systems: {0}', + labelApplyCamera: 'Applies static camera: ', + + menuClipboard: 'Clipboard Menu', + labelEntryCharLimit: `Warning: This entry has been capped at {0} ` + + `characters. Proceed with caution.`, + + menuNaming: 'Save System', + labelName: 'Title: ', + defaultSystemName: 'Untitled L-system', + labelDesc: 'Description: ', + noDescription: 'No description.', + duplicateSuffix: ' (copy)', + + menuTheory: 'Theory Settings', + labelOfflineReset: 'Reset graph on tabbing in: ', + labelResetLvl: 'Reset to stage 0 on construction: ', + labelTerEq: 'Tertiary equation: {0}', + terEqModes: ['Coordinates', 'Orientation'], + labelMeasure: 'Measure performance: ', + debugCamPath: 'Debug camera path: ', + labelMaxCharsPerTick: 'Maximum loaded chars/tick: ', + labelInternalState: 'Internal state: ', + + menuManual: 'User Guide ({0}/{1})', + menuTOC: 'Table of Contents', + labelSource: 'Source: ', + manualSystemDesc: 'User guide, page {0}.', + manual: + [ + { + title: 'Introduction', + contents: +`Welcome to the Parametric L-systems Renderer! This guide aims to help you ` + +`understand parametric L-systems in detail, as well as instructions on how ` + +`to effectively use this theory to construct and render them. + +Let's start discovering the wonders of L-systems (and the renderer). + +Notice: A gallery for regular L-systems has opened! Visit that theory instead.` + }, + ] + } +}; + +/** + * Returns a localised string. + * @param {string} name the string's internal name. + * @returns {string} + */ +let getLoc = (name, lang = menuLang) => +{ + if(lang in locStrings && name in locStrings[lang]) + return locStrings[lang][name]; + + if(name in locStrings.en) + return locStrings.en[name]; + + return `String missing: ${lang}.${name}`; +} + +/** + * Returns a string of a fixed decimal number, with a fairly uniform width. + * @param {number} x the number. + * @returns {string} + */ +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) +); /** * Represents an instance of the Xorshift RNG. @@ -524,7 +692,7 @@ class LSystem { ruleMatches.push([...rules[i].replace(TRIM_SP, '').match( LS_RULE)]); - // Indices 1, 2, 3 are context, condition, and all derivations + // Indices 1, 3, 4 are context, condition, and all derivations } this.rules = new Map(); this.models = new Map(); @@ -536,23 +704,24 @@ class LSystem // left, middle, and right respectively if(!contextMatch[6]) continue; - + let tmpRule = {}; let ruleParams = {}; + if(contextMatch[8]) { let params = contextMatch[8].split(','); for(let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['m', j]; } tmpRule.left = contextMatch[2]; - if(tmpRule.left) + if(tmpRule.left && contextMatch[4]) { let params = contextMatch[4].split(','); for(let j = 0; j < params.length; ++j) ruleParams[params[j]] = ['l', j]; } tmpRule.right = contextMatch[10]; - if(tmpRule.right) + if(tmpRule.right && contextMatch[12]) { let params = contextMatch[12].split(','); for(let j = 0; j < params.length; ++j) @@ -599,14 +768,14 @@ class LSystem // MathExpression eval: (v) => rule.paramMap(v, params[l], ...) } - // [i][2]: condition - if(ruleMatches[i][2]) - tmpRule.condition = MathExpression.parse(ruleMatches[i][2]); + // [i][3]: condition + if(ruleMatches[i][3]) + tmpRule.condition = MathExpression.parse(ruleMatches[i][3]); else - tmpRule.condition = MathExpression.parse('true'); + tmpRule.condition = MathExpression.parse('1'); - // [i][3]: everything else - let tmpRuleMatches = ruleMatches[i][3].split(','); + // [i][4]: everything else + let tmpRuleMatches = ruleMatches[i][4].split(','); for(let j = 0; j < tmpRuleMatches.length; ++j) { if(typeof tmpRuleMatches[j] === 'undefined') @@ -892,16 +1061,19 @@ class LSystem ++k) { let derivPi = null; - for(let l = 0; l < tmpRules[j].parameters[k]. - length; ++l) + if(tmpRules[j].parameters[k]) { - if(tmpRules[j].parameters[k][l]) + for(let l = 0; l < tmpRules[j].parameters[ + k].length; ++l) { - if(!derivPi) - derivPi = []; - derivPi.push( - tmpRules[j].parameters[k][l].evaluate( - tmpParamMap)); + if(tmpRules[j].parameters[k][l]) + { + if(!derivPi) + derivPi = []; + derivPi.push(tmpRules[j]. + parameters[k][l].evaluate( + tmpParamMap)); + } } } derivParams.push(derivPi); @@ -2723,7 +2895,9 @@ let camMeasurer = new Measurer('renderer.camera', 30); let testSuite = () => { - let a = new LSystem('[+(30)G]F/(180)A(2)',['A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.5,:0.5,C:0.5'], 30, 1); + let a = new LSystem('[+(30)G]F/(180)A(2)', [ + 'A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.4,:0,C:0' + ], 30, 1); // A(0) let a0 = 'A'; let a0p = [[BigNumber.ZERO]]; @@ -2738,4 +2912,20 @@ let testSuite = () => let a2 = tmpDeriv.result; let a2p = tmpDeriv.params; log(a.reconstruct(a2, a2p)); + + let b0 = 'X'; + let b0p = [null]; + let bt0 = arrow.getAncestree(b0); + tmpDeriv = arrow.derive(b0, b0p, bt0.ancestors, bt0.children, 0); + let b1 = tmpDeriv.result; + let b1p = tmpDeriv.params; + log(arrow.reconstruct(b1, b1p)); + + let bt1 = arrow.getAncestree(b1); + tmpDeriv = arrow.derive(b1, b1p, bt1.ancestors, bt1.children, 0); + let b2 = tmpDeriv.result; + let b2p = tmpDeriv.params; + log(arrow.reconstruct(b2, b2p)); } + +testSuite(); From 65b8e7323665d583b41c1f2a260aa8cf6023afa1 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 18:37:27 +0700 Subject: [PATCH 63/94] Fixed Renderer.update() writing wrong param lvl --- parametric.js | 2837 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 2831 insertions(+), 6 deletions(-) diff --git a/parametric.js b/parametric.js index 73f33d0..a4c5843 100644 --- a/parametric.js +++ b/parametric.js @@ -132,7 +132,7 @@ const locStrings = { en: { - versionName: 'v1.0, Work in Progress', + versionName: 'v1.0, Mistletoe ed. (WIP)', welcomeSystemName: 'Arrow', welcomeSystemDesc: 'Welcome to L-systems Renderer!', equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', @@ -1572,12 +1572,12 @@ class Renderer if(this.nextDeriveIdx == 0) { this.levels[i] = ret.result; - this.levelParams[i - 1] = ret.params; + this.levelParams[i] = ret.params; } else { this.levels[i] += ret.result; - this.levelParams[i - 1].push(...ret.params); + this.levelParams[i].push(...ret.params); } this.nextDeriveIdx = ret.next; @@ -2232,8 +2232,10 @@ class Renderer { if(this.levels[this.lv][this.i] == 'F' && this.levelParams[this.lv][this.i]) + { this.forward(this.levelParams[this.lv][this.i][ 0].toNumber()); + } else this.forward(); } @@ -2891,7 +2893,2832 @@ let lvlControls, tsControls; let drawMeasurer = new Measurer('renderer.draw()', 30); let camMeasurer = new Measurer('renderer.camera', 30); -// Start from init +var init = () => +{ + min = theory.createCurrency(getLoc('currencyTime')); + progress = theory.createCurrency('%'); + + // l (STAGE) + { + let getDesc = (level) => Localization.format(getLoc('varLvDesc'), + level.toString(), renderer.loopMode == 2 ? '+' : ''); + let getInfo = (level) => `\\text{Stg. }${level.toString()}`; + l = theory.createUpgrade(0, progress, new FreeCost); + l.getDescription = (_) => Utils.getMath(getDesc(l.level)); + l.getInfo = (amount) => Utils.getMathTo(getInfo(l.level), + getInfo(l.level + amount)); + l.canBeRefunded = (_) => true; + l.boughtOrRefunded = (_) => + { + lvlControls.updateAllButtons(); + renderer.update(l.level); + }; + lvlControls = new VariableControls(l); + } + // ts (Tickspeed) + { + let getDesc = (level) => + { + if(tickDelayMode) + { + if(level == 0) + return getLoc('varTdDescInf'); + return Localization.format(getLoc('varTdDesc'), + (level / 10).toString()); + } + return Localization.format(getLoc('varTsDesc'), level.toString()); + }; + let getInfo = (level) => `\\text{Ts=}${level.toString()}/s`; + ts = theory.createUpgrade(1, progress, new FreeCost); + ts.getDescription = (_) => Utils.getMath(getDesc(ts.level)); + ts.getInfo = (amount) => Utils.getMathTo(getInfo(ts.level), + getInfo(ts.level + amount)); + ts.maxLevel = 10; + ts.canBeRefunded = (_) => true; + ts.boughtOrRefunded = (_) => + { + tsControls.updateAllButtons(); + time = 0; + }; + tsControls = new VariableControls(ts, true); + } + + theory.createSecretAchievement(0, null, + getLoc('saPatienceTitle'), + getLoc('saPatienceDesc'), + getLoc('saPatienceHint'), + () => min.value > 9.6 + ); +} + +var alwaysShowRefundButtons = () => true; + +let timeCheck = (elapsedTime) => +{ + let timeLimit; + if(tickDelayMode) + { + time += 1; + timeLimit = ts.level; + } + else + { + time += elapsedTime; + timeLimit = 1 / ts.level; + } + if(time >= timeLimit - 1e-8) + { + time -= timeLimit; + return true; + } + return false; +} + +var tick = (elapsedTime, multiplier) => +{ + if(game.isCalculatingOfflineProgress) + { + gameIsOffline = true; + return; + } + else if(gameIsOffline) + { + // Triggers only once when reloading + if(offlineReset) + renderer.reset(); + gameIsOffline = false; + } + + if(measurePerformance) + drawMeasurer.stamp(); + + if(ts.level == 0) + { + // Keep updating even when paused + renderer.draw(l.level, true); + } + else + { + renderer.tick(elapsedTime); + renderer.draw(l.level, !timeCheck(elapsedTime)); + } + + if(measurePerformance) + drawMeasurer.stamp(); + + let msTime = renderer.elapsedTime; + min.value = 1e-8 + msTime[0] + msTime[1] / 100; + progress.value = renderer.progressPercent; + theory.invalidateTertiaryEquation(); +} + +var getEquationOverlay = () => +{ + let overlayText = () => Localization.format(getLoc('equationOverlayLong'), + getLoc('versionName'), tmpSystemName, drawMeasurer.windowAvgString, + camMeasurer.windowAvgString); + + let result = ui.createLatexLabel + ({ + text: overlayText, + margin: new Thickness(5, 4), + fontSize: 9, + textColor: Color.TEXT_MEDIUM + }); + return result; +} + +let createButton = (label, callback, height = BUTTON_HEIGHT) => +{ + let frame = ui.createFrame + ({ + heightRequest: height, + cornerRadius: 1, + padding: new Thickness(10, 2), + verticalOptions: LayoutOptions.CENTER, + content: ui.createLatexLabel + ({ + text: label, + verticalTextAlignment: TextAlignment.CENTER, + textColor: Color.TEXT + }), + 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; + } + }, + borderColor: Color.BORDER + }); + return frame; +} + +var getUpgradeListDelegate = () => +{ + let openSeqMenu = () => + { + let menu = createSequenceMenu(); + menu.show(); + }; + let lvlButton = lvlControls.createVariableButton(openSeqMenu); + lvlButton.row = 0; + lvlButton.column = 0; + let lvlRefund = lvlControls.createRefundButton('–'); + lvlRefund.column = 0; + let lvlBuy = lvlControls.createBuyButton(); + lvlBuy.column = 1; + + let toggleTDM = () => + { + tickDelayMode = !tickDelayMode; + tsControls.updateDescription(); + time = 0; + }; + let tsButton = tsControls.createVariableButton(toggleTDM); + tsButton.row = 1; + tsButton.column = 0; + let tsRefund = tsControls.createRefundButton('–'); + tsRefund.column = 0; + let tsBuy = tsControls.createBuyButton(); + tsBuy.column = 1; + + let sysButton = createButton(getLoc('btnMenuLSystem'), () => + createSystemMenu().show()); + sysButton.row = 0; + sysButton.column = 0; + let cfgButton = createButton(getLoc('btnMenuRenderer'), () => + createConfigMenu().show()); + cfgButton.row = 0; + cfgButton.column = 1; + let slButton = createButton(getLoc('btnMenuSave'), () => + createSaveMenu().show()); + slButton.row = 1; + slButton.column = 0; + let manualButton = createButton(getLoc('btnMenuManual'), () => + createManualMenu().show()); + manualButton.row = 1; + manualButton.column = 1; + let theoryButton = createButton(getLoc('btnMenuTheory'), () => + createWorldMenu().show()); + theoryButton.row = 2; + theoryButton.column = 0; + let resumeButton = createButton(Localization.format(getLoc('btnResume'), + tmpSystemName), () => + { + if(tmpSystem) + { + renderer.constructSystem = tmpSystem; + tmpSystem = null; + } + }, getMediumBtnSize(ui.screenWidth)); + resumeButton.content.horizontalOptions = LayoutOptions.CENTER; + resumeButton.isVisible = () => tmpSystem ? true : false; + resumeButton.margin = new Thickness(0, 0, 0, 2); + + let stack = ui.createScrollView + ({ + padding: new Thickness(6, 8), + content: ui.createStackLayout + ({ + children: + [ + resumeButton, + ui.createGrid + ({ + columnSpacing: 8, + rowSpacing: 6, + rowDefinitions: + [ + BUTTON_HEIGHT, + BUTTON_HEIGHT + ], + columnDefinitions: ['50*', '50*'], + children: + [ + lvlButton, + ui.createGrid + ({ + row: 0, + column: 1, + columnSpacing: 7, + columnDefinitions: ['50*', '50*'], + children: + [ + lvlRefund, + lvlBuy + ] + }), + tsButton, + ui.createGrid + ({ + row: 1, + column: 1, + columnSpacing: 7, + columnDefinitions: ['50*', '50*'], + children: + [ + tsRefund, + tsBuy + ] + }) + ] + }), + ui.createBox + ({ + heightRequest: 0, + // margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + columnSpacing: 8, + rowSpacing: 6, + rowDefinitions: + [ + BUTTON_HEIGHT, + BUTTON_HEIGHT, + BUTTON_HEIGHT + ], + columnDefinitions: ['50*', '50*'], + children: + [ + sysButton, + cfgButton, + slButton, + manualButton, + theoryButton + ] + }) + ] + }) + }); + return stack; +} + +let createConfigMenu = () => +{ + let tmpZE = renderer.figScaleStr; + let zoomEntry = ui.createEntry + ({ + text: tmpZE, + row: 0, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpZE = nt; + } + }); + let tmpCM = renderer.cameraMode; + let CMLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelCamMode'), + getLoc('camModes')[tmpCM]), + row: 1, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let CMSlider = ui.createSlider + ({ + row: 1, + column: 1, + minimum: 0, + maximum: 2, + value: tmpCM, + onValueChanged: () => + { + tmpCM = Math.round(CMSlider.value); + CMSlider.isToggled = tmpCM > 0; + camLabel.isVisible = tmpCM == 0; + camGrid.isVisible = tmpCM == 0; + camOffLabel.isVisible = tmpCM == 0; + camOffGrid.isVisible = tmpCM == 0; + FFLabel.isVisible = tmpCM > 0; + FFEntry.isVisible = tmpCM > 0; + CMLabel.text = Localization.format(getLoc('labelCamMode'), + getLoc('camModes')[tmpCM]); + + }, + onDragCompleted: () => + { + Sound.playClick(); + CMSlider.value = tmpCM; + } + }); + let tmpCX = renderer.camXStr; + let tmpCY = renderer.camYStr; + let tmpCZ = renderer.camZStr; + let camLabel = ui.createLatexLabel + ({ + text: getLoc('labelCamCentre'), + isVisible: tmpCM == 0, + row: 2, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let camGrid = ui.createEntry + ({ + text: tmpCX, + isVisible: tmpCM == 0, + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCX = nt; + } + }); + let CYEntry = ui.createEntry + ({ + text: tmpCY, + row: 0, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCY = nt; + } + }); + let camOffLabel = ui.createGrid + ({ + row: 3, + column: 0, + columnDefinitions: ['40*', '30*'], + isVisible: tmpCM == 0, + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelCamOffset'), + row: 0, + column: 0, + // horizontalTextAlignment: TextAlignment.END, + verticalTextAlignment: TextAlignment.CENTER + }), + CYEntry + ] + }); + let camOffGrid = ui.createEntry + ({ + text: tmpCZ, + isVisible: tmpCM == 0, + row: 3, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCZ = nt; + } + }); + let tmpFF = renderer.followFactor; + let FFLabel = ui.createLatexLabel + ({ + text: getLoc('labelFollowFactor'), + row: 2, + column: 0, + verticalTextAlignment: TextAlignment.CENTER, + isVisible: tmpCM > 0 + }); + let FFEntry = ui.createEntry + ({ + text: tmpFF.toString(), + keyboard: Keyboard.NUMERIC, + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + isVisible: tmpCM > 0, + onTextChanged: (ot, nt) => + { + tmpFF = Number(nt); + } + }); + let tmpUpright = renderer.upright; + let uprightSwitch = ui.createSwitch + ({ + isToggled: tmpUpright, + row: 4, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpUpright = !tmpUpright; + uprightSwitch.isToggled = tmpUpright; + } + } + }); + let tmpLM = renderer.loopMode; + let LMLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelLoopMode'), + getLoc('loopModes')[tmpLM]), + row: 0, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let LMSlider = ui.createSlider + ({ + row: 0, + column: 1, + minimum: 0, + maximum: 2, + value: tmpLM, + // minimumTrackColor: Color.BORDER, + // maximumTrackColor: Color.TRANSPARENT, + // thumbImageSource: ImageSource.UPGRADES, + onValueChanged: () => + { + tmpLM = Math.round(LMSlider.value); + LMLabel.text = Localization.format(getLoc('labelLoopMode'), + getLoc('loopModes')[tmpLM]); + }, + onDragCompleted: () => + { + Sound.playClick(); + LMSlider.value = tmpLM; + } + }); + let tmpTail = renderer.backtrackTail; + let tailSwitch = ui.createSwitch + ({ + isToggled: tmpTail, + row: 1, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpTail = !tmpTail; + tailSwitch.isToggled = tmpTail; + } + } + }); + let tmpModel = renderer.loadModels; + let modelLabel = ui.createLatexLabel + ({ + text: getLoc('labelLoadModels'), + row: 2, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let modelSwitch = ui.createSwitch + ({ + isToggled: tmpModel, + row: 2, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpModel = !tmpModel; + modelSwitch.isToggled = tmpModel; + } + } + }); + let tmpQD = renderer.quickDraw; + let QDSwitch = ui.createSwitch + ({ + isToggled: tmpQD, + row: 0, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpQD = !tmpQD; + QDSwitch.isToggled = tmpQD; + } + } + }); + let tmpQB = renderer.quickBacktrack; + let QBSwitch = ui.createSwitch + ({ + isToggled: tmpQB, + row: 1, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpQB = !tmpQB; + QBSwitch.isToggled = tmpQB; + } + } + }); + let tmpHesA = renderer.hesitateApex; + let hesALabel = ui.createLatexLabel + ({ + text: getLoc('labelHesitateApex'), + row: 2, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let hesASwitch = ui.createSwitch + ({ + isToggled: tmpHesA, + row: 2, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpHesA = !tmpHesA; + hesASwitch.isToggled = tmpHesA; + } + } + }); + let tmpHesN = renderer.hesitateFork; + let hesNLabel = ui.createLatexLabel + ({ + text: getLoc('labelHesitateFork'), + row: 3, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let hesNSwitch = ui.createSwitch + ({ + isToggled: tmpHesN, + row: 3, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpHesN = !tmpHesN; + hesNSwitch.isToggled = tmpHesN; + } + } + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuRenderer'), + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + ui.createScrollView + ({ + heightRequest: ui.screenHeight * 0.36, + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelFigScale'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + zoomEntry, + CMLabel, + CMSlider, + camLabel, + camGrid, + camOffLabel, + camOffGrid, + FFLabel, + FFEntry, + ui.createLatexLabel + ({ + text: getLoc('labelUpright'), + row: 4, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + uprightSwitch, + ] + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + rowDefinitions: + [ + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT + ], + columnDefinitions: ['70*', '30*'], + children: + [ + LMLabel, + LMSlider, + ui.createLatexLabel + ({ + text: getLoc('labelBTTail'), + row: 1, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + tailSwitch, + modelLabel, + modelSwitch + ] + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + rowDefinitions: + [ + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT, + SMALL_BUTTON_HEIGHT + ], + columnDefinitions: ['70*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelQuickdraw'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + QDSwitch, + ui.createLatexLabel + ({ + text: getLoc('labelQuickBT'), + row: 1, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + QBSwitch, + hesALabel, + hesASwitch, + hesNLabel, + hesNSwitch + ] + }) + ] + }) + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createLatexLabel + ({ + text: getLoc('labelRequireReset'), + margin: new Thickness(0, 0, 0, 4), + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createGrid + ({ + minimumHeightRequest: BUTTON_HEIGHT, + columnDefinitions: ['50*', '50*'], + children: + [ + ui.createButton + ({ + text: getLoc('btnSave'), + row: 0, + column: 0, + onClicked: () => + { + Sound.playClick(); + renderer.configure(tmpZE, tmpCM, tmpCX, tmpCY, + tmpCZ, tmpFF, tmpLM, tmpUpright, tmpQD, tmpQB, + tmpModel, tmpTail, tmpHesA, tmpHesN); + lvlControls.updateDescription(); + menu.hide(); + } + }), + ui.createButton + ({ + text: getLoc('btnDefault'), + row: 0, + column: 1, + onClicked: () => + { + Sound.playClick(); + let rx = new Renderer(); + zoomEntry.text = rx.figScaleStr; + CMSlider.value = rx.cameraMode; + camGrid.text = rx.camXStr; + CYEntry.text = rx.camYStr; + camOffGrid.text = rx.camZStr; + FFEntry.text = rx.followFactor.toString(); + LMSlider.value = rx.loopMode; + tmpUpright = rx.upright; + uprightSwitch.isToggled = rx.upright; + tmpQD = rx.quickDraw; + QDSwitch.isToggled = rx.quickDraw; + tmpQB = rx.quickBacktrack; + QBSwitch.isToggled = rx.quickBacktrack; + tmpModel = rx.loadModels; + modelSwitch.isToggled = rx.loadModels; + tmpTail = rx.backtrackTail; + tailSwitch.isToggled = rx.backtrackTail; + tmpHesA = rx.hesitateApex; + hesASwitch.isToggled = rx.hesitateApex; + tmpHesN = rx.hesitateFork; + hesNSwitch.isToggled = rx.hesitateFork; + lvlControls.updateDescription(); + // menu.hide(); + } + }) + ] + }) + ] + }) + }) + return menu; +} + +let createSystemMenu = () => +{ + let values = renderer.system.object; + let tmpAxiom = values.axiom; + let axiomEntry = ui.createEntry + ({ + text: tmpAxiom, + row: 0, + column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpAxiom = nt; + } + }); + let tmpAngle = values.turnAngle || '0'; + let angleEntry = ui.createEntry + ({ + text: tmpAngle.toString(), + row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpAngle = nt; + } + }); + let tmpRules = values.rules; + let ruleEntries = []; + let ruleMoveBtns = []; + for(let i = 0; i < tmpRules.length; ++i) + { + ruleEntries.push(ui.createEntry + ({ + row: i, + column: 0, + text: tmpRules[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpRules[i] = nt; + } + })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } + } + let rulesLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelRules'), ruleEntries.length), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }); + let ruleStack = ui.createGrid + ({ + columnDefinitions: ['7*', '1*'], + children: [...ruleEntries, ...ruleMoveBtns] + }); + let addRuleButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = ruleEntries.length; + ruleEntries.push(ui.createEntry + ({ + row: i, + column: 0, + text: '', + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpRules[i] = nt; + } + })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } + rulesLabel.text = Localization.format(getLoc('labelRules'), + ruleEntries.length); + ruleStack.children = [...ruleEntries, ...ruleMoveBtns]; + } + }); + let tmpIgnore = values.ignoreList; + let ignoreEntry = ui.createEntry + ({ + text: tmpIgnore, + row: 0, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpIgnore = nt; + } + }); + let tmpTropism = values.tropism || '0'; + let tropismEntry = ui.createEntry + ({ + text: tmpTropism.toString(), + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpTropism = nt; + } + }); + let tmpSeed = values.seed || '0'; + let seedLabel = ui.createGrid + ({ + row: 3, + column: 0, + columnDefinitions: ['40*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelSeed'), + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createButton + ({ + text: getLoc('btnReroll'), + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + seedEntry.text = globalRNG.nextInt.toString(); + } + }) + ] + }); + let seedEntry = ui.createEntry + ({ + text: tmpSeed.toString(), + keyboard: Keyboard.NUMERIC, + row: 3, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpSeed = Number(nt); + } + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuLSystem'), + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + ui.createScrollView + ({ + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['20*', '80*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelAxiom'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + axiomEntry, + ] + }), + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + rulesLabel, + addRuleButton + ] + }), + ruleStack, + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelIgnored'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + ignoreEntry, + ui.createLatexLabel + ({ + text: getLoc('labelAngle'), + row: 1, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + angleEntry, + ui.createLatexLabel + ({ + text: getLoc('labelTropism'), + row: 2, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + tropismEntry, + seedLabel, + seedEntry + ] + }) + ] + }) + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + minimumHeightRequest: BUTTON_HEIGHT, + columnDefinitions: ['50*', '50*'], + children: + [ + ui.createButton + ({ + text: getLoc('btnConstruct'), + row: 0, + column: 0, + onClicked: () => + { + Sound.playClick(); + renderer.constructSystem = new LSystem(tmpAxiom, + tmpRules, tmpAngle, tmpSeed, tmpIgnore, + tmpTropism); + if(tmpSystem) + { + tmpSystem = null; + tmpSystemName = getLoc('defaultSystemName'); + tmpSystemDesc = getLoc('noDescription'); + } + menu.hide(); + } + }), + ui.createButton + ({ + text: getLoc('btnClear'), + row: 0, + column: 1, + onClicked: () => + { + Sound.playClick(); + let values = new LSystem().object; + axiomEntry.text = values.axiom; + angleEntry.text = values.turnAngle; + tmpRules = values.rules; + ruleEntries = []; + rulesLabel.text = Localization.format( + getLoc('labelRules'), ruleEntries.length); + ruleStack.children = ruleEntries; + ignoreEntry.text = values.ignoreList; + tropismEntry.text = values.tropism; + seedEntry.text = values.seed.toString(); + } + }) + ] + }) + ] + }) + }) + return menu; +} + +let createNamingMenu = () => +{ + let tmpName = tmpSystemName; + let nameEntry = ui.createEntry + ({ + text: tmpName, + row: 0, + column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpName = nt; + } + }); + let tmpDesc = tmpSystemDesc; + let descEntry = ui.createEntry + ({ + text: tmpDesc, + row: 0, + column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpDesc = nt; + } + }); + + let getSystemGrid = () => + { + let children = []; + let i = 0; + for(let [key, value] of savedSystems) + { + children.push(ui.createLatexLabel + ({ + text: key, + row: i, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + })); + let btnO = createOverwriteButton(key); + btnO.row = i; + children.push(btnO); + ++i; + } + return children; + }; + let createOverwriteButton = (title) => + { + let btn = ui.createButton + ({ + text: getLoc('btnOverwrite'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + savedSystems.set(title, { + desc: savedSystems.get(title).desc, + system: renderer.system.object, + config: renderer.staticCamera + }); + tmpSystemName = title; + tmpSystemDesc = savedSystems.get(title).desc; + menu.hide(); + } + }); + return btn; + }; + let systemGrid = ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + verticalOptions: LayoutOptions.START, + children: getSystemGrid() + }); + let systemGridScroll = ui.createScrollView + ({ + heightRequest: () => Math.max(SMALL_BUTTON_HEIGHT, + Math.min(ui.screenHeight * 0.2, systemGrid.height)), + content: systemGrid + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuNaming'), + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['30*', '70*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelName'), + row: 0, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + nameEntry + ] + }), + ui.createGrid + ({ + columnDefinitions: ['30*', '70*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelDesc'), + row: 0, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + descEntry + ] + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelSavedSystems'), + savedSystems.size), + // horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }), + systemGridScroll, + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createButton + ({ + text: getLoc('btnSave'), + row: 0, + column: 1, + onClicked: () => + { + Sound.playClick(); + while(savedSystems.has(tmpName)) + tmpName += getLoc('duplicateSuffix'); + savedSystems.set(tmpName, { + desc: tmpDesc, + system: renderer.system.object, + config: renderer.staticCamera + }); + tmpSystemName = tmpName; + tmpSystemDesc = tmpDesc; + menu.hide(); + } + }) + ] + }) + }); + return menu; +} + +let createSystemClipboardMenu = (values) => +{ + let tmpSys = values; + let sysEntry = ui.createEntry + ({ + text: tmpSys, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpSys = nt; + warningEntry.isVisible = sysEntry.text.length >= ENTRY_CHAR_LIMIT; + } + }); + let warningEntry = ui.createLatexLabel + ({ + isVisible: sysEntry.text.length >= ENTRY_CHAR_LIMIT, + text: Localization.format(getLoc('labelEntryCharLimit'), + ENTRY_CHAR_LIMIT), + margin: new Thickness(0, 0, 0, 4), + verticalTextAlignment: TextAlignment.CENTER + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuClipboard'), + content: ui.createStackLayout + ({ + children: + [ + sysEntry, + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + warningEntry, + ui.createButton + ({ + text: getLoc('btnConstruct'), + onClicked: () => + { + Sound.playClick(); + let sv = JSON.parse(tmpSys); + tmpSystemName = sv.title; + tmpSystemDesc = sv.desc; + renderer.constructSystem = new LSystem(sv.system.axiom, + sv.system.rules, sv.system.turnAngle, + sv.system.seed, sv.system.ignoreList, + sv.system.tropism); + tmpSystem = null; + if('config' in sv) + renderer.configureStaticCamera(...sv.config); + menu.hide(); + } + }) + ] + }) + }); + return menu; +} + +let createStateClipboardMenu = (values) => +{ + let tmpState = values; + let sysEntry = ui.createEntry + ({ + text: tmpState, + // clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpState = nt; + warningEntry.isVisible = sysEntry.text.length >= ENTRY_CHAR_LIMIT; + } + }); + let warningEntry = ui.createLatexLabel + ({ + isVisible: sysEntry.text.length >= ENTRY_CHAR_LIMIT, + text: Localization.format(getLoc('labelEntryCharLimit'), + ENTRY_CHAR_LIMIT), + margin: new Thickness(0, 0, 0, 4), + verticalTextAlignment: TextAlignment.CENTER + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuClipboard'), + content: ui.createStackLayout + ({ + children: + [ + sysEntry, + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + warningEntry, + ui.createButton + ({ + text: getLoc('btnImport'), + onClicked: () => + { + Sound.playClick(); + setInternalState(tmpState); + menu.hide(); + } + }) + ] + }) + }); + return menu; +} + +let createViewMenu = (title, parentMenu) => +{ + let systemObj = savedSystems.get(title); + let values = systemObj.system; + let tmpDesc = systemObj.desc; + if(!tmpDesc) + tmpDesc = getLoc('noDescription'); + let rendererValues = systemObj.config; + let tmpZE = rendererValues[0]; + let tmpCX = rendererValues[1]; + let tmpCY = rendererValues[2]; + let tmpCZ = rendererValues[3]; + let tmpUpright = rendererValues[4]; + + let zoomEntry = ui.createEntry + ({ + text: tmpZE, + row: 0, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpZE = nt; + } + }); + let camLabel = ui.createLatexLabel + ({ + text: getLoc('labelCamCentre'), + row: 1, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let camGrid = ui.createEntry + ({ + text: tmpCX, + row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCX = nt; + } + }); + let camOffLabel = ui.createGrid + ({ + row: 2, + column: 0, + columnDefinitions: ['40*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelCamOffset'), + row: 0, + column: 0, + // horizontalTextAlignment: TextAlignment.END, + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createEntry + ({ + text: tmpCY, + row: 0, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCY = nt; + } + }) + ] + }); + let camOffGrid = ui.createEntry + ({ + text: tmpCZ, + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCZ = nt; + } + }); + let uprightSwitch = ui.createSwitch + ({ + isToggled: tmpUpright, + row: 3, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpUpright = !tmpUpright; + uprightSwitch.isToggled = tmpUpright; + } + } + }); + + let tmpAxiom = values.axiom; + let axiomEntry = ui.createEntry + ({ + text: tmpAxiom, + row: 0, + column: 1, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpAxiom = nt; + } + }); + let tmpAngle = values.turnAngle || '0'; + let angleEntry = ui.createEntry + ({ + text: tmpAngle.toString(), + row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpAngle = nt; + } + }); + let tmpRules = []; + for(let i = 0; i < values.rules.length; ++i) + tmpRules[i] = values.rules[i]; + let ruleEntries = []; + let ruleMoveBtns = []; + for(let i = 0; i < tmpRules.length; ++i) + { + ruleEntries.push(ui.createEntry + ({ + row: i, + column: 0, + text: tmpRules[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpRules[i] = nt; + } + })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } + } + let rulesLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelRules'), ruleEntries.length), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }); + let ruleStack = ui.createGrid + ({ + columnDefinitions: ['7*', '1*'], + children: [...ruleEntries, ...ruleMoveBtns] + }); + let addRuleButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = ruleEntries.length; + ruleEntries.push(ui.createEntry + ({ + row: i, + column: 0, + text: '', + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpRules[i] = nt; + } + })); + if(i) + { + ruleMoveBtns.push(ui.createButton + ({ + row: i, + column: 1, + text: getLoc('btnUp'), + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let tmpRule = ruleEntries[i].text; + ruleEntries[i].text = ruleEntries[i - 1].text; + ruleEntries[i - 1].text = tmpRule; + } + })); + } + rulesLabel.text = Localization.format(getLoc('labelRules'), + ruleEntries.length); + ruleStack.children = [...ruleEntries, ...ruleMoveBtns]; + } + }); + let tmpIgnore = values.ignoreList; + let ignoreEntry = ui.createEntry + ({ + text: tmpIgnore, + row: 0, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpIgnore = nt; + } + }); + let tmpTropism = values.tropism || '0'; + let tropismEntry = ui.createEntry + ({ + text: tmpTropism.toString(), + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpTropism = nt; + } + }); + let tmpSeed = values.seed || '0'; + let seedLabel = ui.createGrid + ({ + row: 3, + column: 0, + columnDefinitions: ['40*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelSeed'), + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createButton + ({ + text: getLoc('btnReroll'), + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + seedEntry.text = globalRNG.nextInt.toString(); + } + }) + ] + }); + let seedEntry = ui.createEntry + ({ + text: tmpSeed.toString(), + keyboard: Keyboard.NUMERIC, + row: 3, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpSeed = Number(nt); + } + }); + + let menu = ui.createPopup + ({ + title: title, + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + ui.createScrollView + ({ + // heightRequest: ui.screenHeight * 0.32, + content: ui.createStackLayout + ({ + children: + [ + ui.createLatexLabel + ({ + text: tmpDesc, + margin: new Thickness(0, 6), + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createGrid + ({ + columnDefinitions: ['20*', '80*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelAxiom'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + axiomEntry, + ] + }), + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + rulesLabel, + addRuleButton + ] + }), + ruleStack, + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelIgnored'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + ignoreEntry, + ui.createLatexLabel + ({ + text: getLoc('labelAngle'), + row: 1, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + angleEntry, + ui.createLatexLabel + ({ + text: getLoc('labelTropism'), + row: 2, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + tropismEntry, + seedLabel, + seedEntry + ] + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createLatexLabel + ({ + text: getLoc('labelApplyCamera'), + // horizontalTextAlignment: + // TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 9) + }), + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelFigScale'), + row: 0, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + zoomEntry, + camLabel, + camGrid, + camOffLabel, + camOffGrid, + ui.createLatexLabel + ({ + text: getLoc('labelUpright'), + row: 3, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), + uprightSwitch + ] + }) + ] + }) + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + minimumHeightRequest: BUTTON_HEIGHT, + columnDefinitions: ['30*', '30*', '30*'], + children: + [ + ui.createButton + ({ + text: getLoc('btnConstruct'), + row: 0, + column: 0, + onClicked: () => + { + Sound.playClick(); + renderer.constructSystem = new LSystem(tmpAxiom, + tmpRules, tmpAngle, tmpSeed, tmpIgnore, + tmpTropism); + tmpSystem = null; + renderer.configureStaticCamera(tmpZE, tmpCX, + tmpCY, tmpCZ, tmpUpright); + tmpSystemName = title; + tmpSystemDesc = tmpDesc; + parentMenu.hide(); + menu.hide(); + } + }), + ui.createButton + ({ + text: getLoc('btnSave'), + row: 0, + column: 1, + onClicked: () => + { + Sound.playClick(); + savedSystems.set(title, + { + desc: tmpDesc, + system: new LSystem(tmpAxiom, tmpRules, + tmpAngle, tmpSeed, tmpIgnore, tmpTropism). + object, + config: [tmpZE, tmpCX, tmpCY, tmpCZ, + tmpUpright] + }); + // menu.hide(); + } + }), + ui.createButton + ({ + text: getLoc('btnDelete'), + row: 0, + column: 2, + onClicked: () => + { + Sound.playClick(); + savedSystems.delete(title); + menu.hide(); + } + }) + ] + }) + ] + }) + }); + return menu; +} + +let createSaveMenu = () => +{ + let savedSystemsLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelSavedSystems'), + savedSystems.size), + // horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }); + let getSystemGrid = () => + { + let children = []; + let i = 0; + for(let [key, value] of savedSystems) + { + children.push(ui.createLatexLabel + ({ + text: key, + row: i, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + })); + let btn = createViewButton(key); + btn.row = i; + btn.column = 1; + children.push(btn); + ++i; + } + savedSystemsLabel.text = Localization.format( + getLoc('labelSavedSystems'), savedSystems.size); + return children; + }; + let createViewButton = (title) => + { + let btn = ui.createButton + ({ + text: getLoc('btnView'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let viewMenu = createViewMenu(title, menu); + viewMenu.onDisappearing = () => + { + systemGrid.children = getSystemGrid(); + }; + viewMenu.show(); + } + }); + return btn; + }; + let systemGrid = ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + verticalOptions: LayoutOptions.START, + children: getSystemGrid() + }); + let systemGridScroll = ui.createScrollView + ({ + heightRequest: () => Math.max(SMALL_BUTTON_HEIGHT, + Math.min(ui.screenHeight * 0.32, systemGrid.height)), + content: systemGrid + }); + let menu = ui.createPopup + ({ + title: getLoc('menuSave'), + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['40*', '30*', '30*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelCurrentSystem'), + row: 0, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createButton + ({ + text: getLoc('btnClipboard'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + let clipMenu = createSystemClipboardMenu( + JSON.stringify( + { + title: tmpSystemName, + desc: tmpSystemDesc, + system: renderer.system.object, + config: renderer.staticCamera + })); + clipMenu.show(); + } + }), + ui.createButton + ({ + text: getLoc('btnSave'), + row: 0, + column: 2, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let namingMenu = createNamingMenu(); + namingMenu.onDisappearing = () => + { + systemGrid.children = getSystemGrid(); + }; + namingMenu.show(); + } + }) + ] + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + savedSystemsLabel, + systemGridScroll + ] + }) + }); + return menu; +} + +let createManualMenu = () => +{ + let manualPages = getLoc('manual'); + + let pageTitle = ui.createLatexLabel + ({ + text: manualPages[page].title, + margin: new Thickness(0, 4), + heightRequest: 20, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }); + let pageContents = ui.createLabel + ({ + fontFamily: FontFamily.CMU_REGULAR, + fontSize: 16, + text: manualPages[page].contents + }); + let sourceEntry = ui.createEntry + ({ + row: 0, + column: 1, + text: 'source' in manualPages[page] ? manualPages[page].source : '' + }); + let sourceGrid = ui.createGrid + ({ + isVisible: 'source' in manualPages[page], + columnDefinitions: ['20*', '80*'], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelSource'), + row: 0, + column: 0, + horizontalOptions: LayoutOptions.END, + verticalTextAlignment: TextAlignment.CENTER + }), + sourceEntry + ] + }); + let prevButton = ui.createButton + ({ + text: getLoc('btnPrev'), + row: 0, + column: 0, + isVisible: page > 0, + onClicked: () => + { + Sound.playClick(); + if(page > 0) + setPage(page - 1); + } + }); + let constructButton = ui.createButton + ({ + text: getLoc('btnConstruct'), + row: 0, + column: 1, + isVisible: page in manualSystems, + onClicked: () => + { + Sound.playClick(); + let s = manualSystems[page]; + renderer.constructSystem = s.system; + tmpSystem = null; + if('config' in s) + renderer.configureStaticCamera(...s.config); + + tmpSystemName = manualPages[page].title; + tmpSystemDesc = Localization.format( + getLoc('manualSystemDesc'), page + 1); + menu.hide(); + } + }); + let tocButton = ui.createButton + ({ + text: getLoc('btnContents'), + row: 0, + column: 1, + isVisible: !(page in manualSystems), + onClicked: () => + { + Sound.playClick(); + TOCMenu.show(); + } + }); + let nextButton = ui.createButton + ({ + text: getLoc('btnNext'), + row: 0, + column: 2, + isVisible: page < manualPages.length - 1, + onClicked: () => + { + Sound.playClick(); + if(page < manualPages.length - 1) + setPage(page + 1); + } + }); + let setPage = (p) => + { + page = p; + menu.title = Localization.format( + getLoc('menuManual'), page + 1, + getLoc('manual').length + ); + pageTitle.text = manualPages[page].title; + pageContents.text = + manualPages[page].contents; + + sourceGrid.isVisible = 'source' in + manualPages[page]; + sourceEntry.text = 'source' in + manualPages[page] ? + manualPages[page].source : ''; + + prevButton.isVisible = page > 0; + nextButton.isVisible = page < manualPages.length - 1; + constructButton.isVisible = page in manualSystems; + tocButton.isVisible = !(page in manualSystems); + }; + let getContentsTable = () => + { + let children = []; + for(let i = 0; i < contentsTable.length; ++i) + { + children.push(ui.createLatexLabel + ({ + text: manualPages[contentsTable[i]].title, + row: i, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + })); + children.push(ui.createButton + ({ + text: Localization.format(getLoc('btnPage'), + contentsTable[i] + 1), + row: i, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + setPage(contentsTable[i]); + TOCMenu.hide(); + } + })); + } + return children; + }; + let TOCMenu = ui.createPopup + ({ + title: getLoc('menuTOC'), + content: ui.createScrollView + ({ + heightRequest: ui.screenHeight * 0.36, + content: ui.createGrid + ({ + columnDefinitions: ['80*', '20*'], + children: getContentsTable() + }) + }) + }); + + let menu = ui.createPopup + ({ + title: Localization.format(getLoc('menuManual'), page + 1, + getLoc('manual').length), + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + pageTitle, + ui.createFrame + ({ + padding: new Thickness(8, 6), + heightRequest: ui.screenHeight * 0.32, + content: ui.createScrollView + ({ + content: ui.createStackLayout + ({ + children: + [ + pageContents, + sourceGrid + ] + }) + }) + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + columnDefinitions: ['30*', '30*', '30*'], + children: + [ + prevButton, + constructButton, + tocButton, + nextButton + ] + }) + ] + }) + }); + return menu; +} + +let createSeqViewMenu = (level) => +{ + let pageTitle = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelChars'), + renderer.levels[level].length), + margin: new Thickness(0, 4), + heightRequest: 20, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + }); + let pageContents = ui.createLabel + ({ + fontFamily: FontFamily.CMU_REGULAR, + fontSize: 16, + text: renderer.system.reconstruct(renderer.levels[level], + renderer.levelParams[level]), + lineBreakMode: LineBreakMode.CHARACTER_WRAP + }); + + let menu = ui.createPopup + ({ + title: Localization.format(getLoc('menuSequence'), tmpSystemName, + level), + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + pageTitle, + ui.createFrame + ({ + padding: new Thickness(8, 6), + heightRequest: ui.screenHeight * 0.28, + content: ui.createScrollView + ({ + content: ui.createStackLayout + ({ + children: + [ + pageContents + ] + }) + }) + }) + ] + }) + }); + return menu; +} + +let createSequenceMenu = () => +{ + let tmpLvls = []; + for(let i = 0; i < renderer.levels.length; ++i) + { + tmpLvls.push(ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelLevelSeq'), i, + renderer.levels[i].length), + row: i, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + })); + tmpLvls.push(ui.createButton + ({ + text: getLoc('btnView'), + row: i, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let viewMenu = createSeqViewMenu(i); + viewMenu.show(); + } + })); + } + let seqGrid = ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: tmpLvls + }); + + let menu = ui.createPopup + ({ + title: tmpSystemName, + content: ui.createStackLayout + ({ + children: + [ + ui.createScrollView + ({ + heightRequest: () => Math.max(SMALL_BUTTON_HEIGHT, + Math.min(ui.screenHeight * 0.36, seqGrid.height)), + content: seqGrid + }) + ] + }) + }); + return menu; +} + +let createWorldMenu = () => +{ + let tmpOD = offlineReset; + let ODSwitch = ui.createSwitch + ({ + isToggled: tmpOD, + row: 0, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpOD = !tmpOD; + ODSwitch.isToggled = tmpOD; + } + } + }); + let tmpRL = resetLvlOnConstruct; + let RLSwitch = ui.createSwitch + ({ + isToggled: tmpRL, + row: 1, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpRL = !tmpRL; + RLSwitch.isToggled = tmpRL; + } + } + }); + let tmpAC = altTerEq; + let ACLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelTerEq'), + getLoc('terEqModes')[Number(tmpAC)]), + row: 2, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }); + let ACSwitch = ui.createSwitch + ({ + isToggled: tmpAC, + row: 2, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpAC = !tmpAC; + ACSwitch.isToggled = tmpAC; + ACLabel.text = Localization.format(getLoc('labelTerEq'), + getLoc('terEqModes')[Number(tmpAC)]); + } + } + }); + let tmpMP = measurePerformance; + let MPSwitch = ui.createSwitch + ({ + isToggled: tmpMP, + row: 3, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpMP = !tmpMP; + MPSwitch.isToggled = tmpMP; + } + } + }); + let tmpDCP = debugCamPath; + let DCPSwitch = ui.createSwitch + ({ + isToggled: tmpDCP, + row: 4, + column: 1, + horizontalOptions: LayoutOptions.END, + onTouched: (e) => + { + if(e.type == TouchType.SHORTPRESS_RELEASED || + e.type == TouchType.LONGPRESS_RELEASED) + { + Sound.playClick(); + tmpDCP = !tmpDCP; + DCPSwitch.isToggled = tmpDCP; + } + } + }); + let tmpMCPT = maxCharsPerTick; + let MCPTEntry = ui.createEntry + ({ + text: tmpMCPT.toString(), + keyboard: Keyboard.NUMERIC, + row: 5, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpMCPT = Number(nt); + } + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuTheory'), + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + // rowDefinitions: [40, 40, 40, 40], + children: + [ + ui.createLatexLabel + ({ + text: getLoc('labelOfflineReset'), + row: 0, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + ODSwitch, + ui.createLatexLabel + ({ + text: getLoc('labelResetLvl'), + row: 1, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + RLSwitch, + ACLabel, + ACSwitch, + ui.createLatexLabel + ({ + text: getLoc('labelMeasure'), + row: 3, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + MPSwitch, + ui.createLatexLabel + ({ + text: getLoc('debugCamPath'), + row: 4, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + DCPSwitch, + ui.createLatexLabel + ({ + text: getLoc('labelMaxCharsPerTick'), + row: 5, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + MCPTEntry, + ui.createLatexLabel + ({ + text: getLoc('labelInternalState'), + row: 6, + column: 0, + verticalTextAlignment: TextAlignment.CENTER + }), + ui.createButton + ({ + text: getLoc('btnClipboard'), + row: 6, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + let clipMenu = createStateClipboardMenu( + getInternalState()); + clipMenu.show(); + } + }), + ] + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createButton + ({ + text: getLoc('btnSave'), + onClicked: () => + { + Sound.playClick(); + offlineReset = tmpOD; + resetLvlOnConstruct = tmpRL; + altTerEq = tmpAC; + if(tmpMP != measurePerformance && tmpMP) + { + drawMeasurer.reset(); + camMeasurer.reset(); + } + measurePerformance = tmpMP; + if(tmpDCP != debugCamPath) + renderer.reset(); + debugCamPath = tmpDCP; + maxCharsPerTick = tmpMCPT; + menu.hide(); + } + }) + ] + }) + }); + return menu; +} + +var getInternalState = () => JSON.stringify +({ + version: version, + time: time, + page: page, + offlineReset: offlineReset, + altTerEq: altTerEq, + tickDelayMode: tickDelayMode, + resetLvlOnConstruct: resetLvlOnConstruct, + measurePerformance: measurePerformance, + debugCamPath: debugCamPath, + maxCharsPerTick: maxCharsPerTick, + renderer: renderer.object, + system: tmpSystem ? + { + title: tmpSystemName, + desc: tmpSystemDesc, + ...tmpSystem.object + } : + { + title: tmpSystemName, + desc: tmpSystemDesc, + ...renderer.system.object + }, + savedSystems: Object.fromEntries(savedSystems) +}); + +var setInternalState = (stateStr) => +{ + if(!stateStr) + return; + + let values = stateStr.split('\n'); + + let worldValues = values[0].split(' '); + let stateVersion = 0; + if(worldValues.length > 0) + stateVersion = Number(worldValues[0]); + + if(isNaN(stateVersion)) + { + let state = JSON.parse(stateStr); + log(`Loading JSON state (version: ${state.version})`); + if('time' in state) + time = state.time; + if('page' in state) + page = state.page; + if('offlineReset' in state) + offlineReset = state.offlineReset; + if('altTerEq' in state) + altTerEq = state.altTerEq; + if('tickDelayMode' in state) + tickDelayMode = state.tickDelayMode; + if('resetLvlOnConstruct' in state) + resetLvlOnConstruct = state.resetLvlOnConstruct; + if('measurePerformance' in state) + measurePerformance = state.measurePerformance; + if('debugCamPath' in state) + debugCamPath = state.debugCamPath; + if('maxCharsPerTick' in state) + maxCharsPerTick = state.maxCharsPerTick; + + if('system' in state) + { + tmpSystemName = state.system.title; + tmpSystemDesc = state.system.desc; + tmpSystem = new LSystem(state.system.axiom, state.system.rules, + state.system.turnAngle, state.system.seed, state.system.ignoreList, + state.system.tropism); + } + + if('renderer' in state) + { + renderer = new Renderer(new LSystem(), state.renderer.figureScale, + state.renderer.cameraMode, state.renderer.camX, state.renderer.camY, + state.renderer.camZ, state.renderer.followFactor, + state.renderer.loopMode, state.renderer.upright, + state.renderer.quickDraw, state.renderer.quickBacktrack, + state.renderer.loadModels, state.renderer.backtrackTail, + state.renderer.hesitateApex, state.renderer.hesitateFork); + } + else + renderer = new Renderer(system); + + if('savedSystems' in state) + savedSystems = new Map(Object.entries(state.savedSystems)); + } + // Doesn't even need checking the version number; if it appears at all then + // it's definitely written before switching to JSON + else + { + log(`Loading space-separated state (version: ${stateVersion})`); + if(worldValues.length > 1) + time = Number(worldValues[1]); + if(worldValues.length > 2) + page = Number(worldValues[2]); + if(worldValues.length > 3) + offlineReset = Boolean(Number(worldValues[3])); + if(worldValues.length > 4) + altTerEq = Boolean(Number(worldValues[4])); + if(worldValues.length > 5) + tickDelayMode = Boolean(Number(worldValues[5])); + if(worldValues.length > 6) + resetLvlOnConstruct = Boolean(Number(worldValues[6])); + let noofSystems = 0; + if(worldValues.length > 7) + noofSystems = Number(worldValues[7]); + + if(values.length > 1) + { + let rv = values[1].split(' '); + if(rv.length > 2) + rv[2] = Number(rv[2]); // cameraMode + if(rv.length > 6) + rv[6] = Number(rv[6]); + if(rv.length > 7) + rv[7] = Number(rv[7]); + if(rv.length > 8) + rv[8] = Boolean(Number(rv[8])); + if(rv.length > 9) + rv[9] = Boolean(Number(rv[9])); + if(rv.length > 10) + rv[10] = Boolean(Number(rv[10])); + if(rv.length > 12) // camera offset + rv[3] = `${rv[3]}*${rv[0]}*${rv[1]}^lv+${rv[12]}`; + if(rv.length > 13) + rv[4] = `${rv[4]}*${rv[0]}*${rv[1]}^lv+${rv[13]}`; + if(rv.length > 14) + rv[5] = `${rv[5]}*${rv[0]}*${rv[1]}^lv+${rv[14]}`; + rv[1] = `${rv[0]}*${rv[1]}^lv`; + if(rv.length > 15) + rv[12] = Boolean(Number(rv[15])); + + for(let i = 13; i < rv.length; ++i) + rv[i] = undefined; + + if(stateVersion < 0.2) + { + if(values.length > 2) + { + let systemValues = values[2].split(' '); + let system = new LSystem(systemValues[0], + systemValues.slice(3), Number(systemValues[1]), + Number(systemValues[2])); + renderer = new Renderer(system, ...rv.slice(1)); + } + else + renderer = new Renderer(new LSystem(), ...rv.slice(1)); + } + else + { + if(values.length > 2) + tmpSystemName = values[2]; + if(values.length > 3) + tmpSystemDesc = values[3]; + if(values.length > 4) + { + let systemValues = values[4].split(' '); + let system = new LSystem(systemValues[0], + systemValues.slice(3), Number(systemValues[1]), + Number(systemValues[2])); + renderer = new Renderer(system, ...rv.slice(1)); + } + else + renderer = new Renderer(new LSystem(), ...rv.slice(1)); + } + } + + if(stateVersion < 0.2) + { + // Load everything. + for(let i = 0; 4 + i * 2 < values.length; ++i) + savedSystems.set(values[3 + i * 2], + { + desc: getLoc('noDescription'), + system: values[4 + i * 2], + config: ['1', '0', '0', '0', false] + }); + } + else + { + for(let i = 0; i < noofSystems; ++i) + { + let rv = values[9 + i * 5].split(' '); + if(rv.length > 5) + rv[2] = `${rv[2]}*${rv[0]}*${rv[1]}^lv+${rv[5]}`; + if(rv.length > 6) + rv[3] = `${rv[3]}*${rv[0]}*${rv[1]}^lv+${rv[6]}`; + if(rv.length > 7) + { + rv[4] = `${rv[4]}*${rv[0]}*${rv[1]}^lv+${rv[7]}`; + rv[1] = `${rv[0]}*${rv[1]}^lv`; + } + if(rv.length > 8) + rv[5] = Boolean(Number(rv[8])); + + for(let i = 6; i < rv.length; ++i) + rv[i] = undefined; + + savedSystems.set(values[6 + i * 5], { + desc: values[7 + i * 5], + system: values[8 + i * 5], + config: rv.slice(1) + }); + } + } + } +} + +var canResetStage = () => true; + +var getResetStageMessage = () => getLoc('resetRenderer'); + +var resetStage = () => renderer.reset(); + +var getTertiaryEquation = () => +{ + if(altTerEq) + return renderer.oriString; + + return renderer.stateString; +} + +var get3DGraphPoint = () => +{ + if(debugCamPath) + return -renderer.camera; + + return renderer.cursor; +} + +var get3DGraphTranslation = () => +{ + if(measurePerformance) + camMeasurer.stamp(); + + let result = renderer.camera; + + if(measurePerformance) + camMeasurer.stamp(); + + return result; +} + +init(); let testSuite = () => { @@ -2927,5 +5754,3 @@ let testSuite = () => let b2p = tmpDeriv.params; log(arrow.reconstruct(b2, b2p)); } - -testSuite(); From 4c8c538bf58b2c08e22f0d2193e92f6567e92acc Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 19:31:21 +0700 Subject: [PATCH 64/94] Fixed various LS bugs --- TODO.md | 32 +++++++++++++++----------------- parametric.js | 16 +++++++++------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/TODO.md b/TODO.md index 4d2287e..07ebca0 100644 --- a/TODO.md +++ b/TODO.md @@ -39,8 +39,8 @@ - Lemma stages? - Make `f` move without returning like `F` - Top-down processing priority - - [ ] Regex magic to separate string into actual sequence of symbols - - [ ] Issue: regex for nested brackets in parameters? + - [x] Regex magic to separate string into actual sequence of symbols + - [x] Issue: regex for nested brackets in parameters? - Equal comparison changed to `==` instead of `=` in abop to differentiate from the syntax - Store as an extra array of objects @@ -48,11 +48,21 @@ would've been already stripped down by the time it gets to the turtle - `~`: Parameters of the following symbol can control model size in rule -- [ ] Investigate Houdini stochastic syntax for weighted derivations +- [ ] Revamp sequence menu + - Level 0: 10 chars (`View`) + - [x] Classic LS: displays the entire string in a label + - Parametric LS: displays symbols and parameters side by side, one symbol/row + +- [x] Turning angles (and tropism) + - Formula expressions allow shenanigans such as `360/7`, mostly + - [ ] Button to change mode between degrees and radians? + +## 1.0: Completed + +- [x] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line - -- [ ] Context sensitivity +- [x] Context sensitivity - `b < a > c → aa` - Parametric: **context ignore** replaces regular ignore list in LS menu - [x] Skipping over brackets? hmm, difficult @@ -67,18 +77,6 @@ - Does this work with the dynamic loading system with all the data passing? - If stored by maps: Keys can be any data type. - If stored by objects: written in `parametric_lsystem.js` - -- [ ] Revamp sequence menu - - Level 0: 10 chars (`View`) - - [x] Classic LS: displays the entire string in a label - - Parametric LS: displays symbols and parameters side by side, one symbol/row - -- [x] Turning angles (and tropism) - - Formula expressions allow shenanigans such as `360/7`, mostly - - [ ] Button to change mode between degrees and radians? - -## 1.0: Completed - - [x] Update docstrings - [x] Buttons in LS menu to move up down (swap rules) - How to update rule entries? diff --git a/parametric.js b/parametric.js index a4c5843..f070e4e 100644 --- a/parametric.js +++ b/parametric.js @@ -466,7 +466,7 @@ class Quaternion default: return this; } - return rotation.mul(this); + return rotation.mul(this).normalise; } /** * Computes the negation of a quaternion. The negation also acts as the @@ -688,10 +688,10 @@ class LSystem } let ruleMatches = []; - for(let i = 0; i < rules.length; ++i) + for(let i = 0; i < this.userInput.rules.length; ++i) { - ruleMatches.push([...rules[i].replace(TRIM_SP, '').match( - LS_RULE)]); + ruleMatches.push([...this.userInput.rules[i].replace(TRIM_SP, ''). + match(LS_RULE)]); // Indices 1, 3, 4 are context, condition, and all derivations } this.rules = new Map(); @@ -832,9 +832,9 @@ class LSystem // Finally, push rule if(contextMatch[6] == '~') { - if(!this.models.has(contextMatch[6])) - this.models.set(contextMatch[6], []); - this.models.get(contextMatch[6]).push(tmpRule); + if(!this.models.has(contextMatch[10])) + this.models.set(contextMatch[10], []); + this.models.get(contextMatch[10]).push(tmpRule); } else { @@ -2025,10 +2025,12 @@ class Renderer this.mdi[this.mdi.length - 1]] == 'F' && this.modelParams[this.models.length - 1][ this.mdi[this.mdi.length - 1]]) + { this.forward(this.modelParams[ this.models.length - 1][ this.mdi[this.mdi.length - 1]][ 0].toNumber()); + } else this.forward(); } From 17b583d2069227b6e956d58f9aa366d4745778ac Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 19:57:51 +0700 Subject: [PATCH 65/94] Fixed deriveModel crashing at null values --- parametric.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/parametric.js b/parametric.js index f070e4e..7047275 100644 --- a/parametric.js +++ b/parametric.js @@ -1179,16 +1179,18 @@ class LSystem ++k) { let derivPi = null; - for(let l = 0; l < tmpRules[j].parameters[k]. - length; ++l) + if(tmpRules[j].parameters[k]) { - if(tmpRules[j].parameters[k][l]) + for(let l = 0; l < tmpRules[j].parameters[k]. + length; ++l) { - if(!derivPi) - derivPi = []; - derivPi.push( - tmpRules[j].parameters[k][l].evaluate( - tmpParamMap)); + if(tmpRules[j].parameters[k][l]) + { + if(!derivPi) + derivPi = []; + derivPi.push(tmpRules[j].parameters[k][ + l].evaluate(tmpParamMap)); + } } } resultParams.push(derivPi); From b5e93c1f56bccfd62da52fc22139046db85de359 Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 21:32:11 +0700 Subject: [PATCH 66/94] Added stage navigation to sequence menu --- TODO.md | 4 +++- classic.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++--- parametric.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 108 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index 07ebca0..48f04ca 100644 --- a/TODO.md +++ b/TODO.md @@ -48,10 +48,12 @@ would've been already stripped down by the time it gets to the turtle - `~`: Parameters of the following symbol can control model size in rule -- [ ] Revamp sequence menu +- [x] Revamp sequence menu - Level 0: 10 chars (`View`) - [x] Classic LS: displays the entire string in a label - Parametric LS: displays symbols and parameters side by side, one symbol/row + - Scrapped lol + - [x] Stage navigation - [x] Turning angles (and tropism) - Formula expressions allow shenanigans such as `360/7`, mostly diff --git a/classic.js b/classic.js index 9282060..b5ae4ef 100644 --- a/classic.js +++ b/classic.js @@ -5483,7 +5483,7 @@ let createSeqViewMenu = (level) => { let pageTitle = ui.createLatexLabel ({ - text: Localization.format(getLoc('labelChars'), + text: Localization.format(getLoc('labelLevelSeq'), level, renderer.levels[level].length), margin: new Thickness(0, 4), heightRequest: 20, @@ -5497,11 +5497,46 @@ let createSeqViewMenu = (level) => text: renderer.levels[level], lineBreakMode: LineBreakMode.CHARACTER_WRAP }); + let prevButton = ui.createButton + ({ + text: getLoc('btnPrev'), + row: 0, + column: 0, + isVisible: level > 0, + onClicked: () => + { + Sound.playClick(); + if(level > 0) + setPage(level - 1); + } + }); + let nextButton = ui.createButton + ({ + text: getLoc('btnNext'), + row: 0, + column: 1, + isVisible: level < renderer.levels.length - 1, + onClicked: () => + { + Sound.playClick(); + if(level < renderer.levels.length - 1) + setPage(level + 1); + } + }); + let setPage = (p) => + { + level = p; + pageTitle.text = Localization.format(getLoc('labelLevelSeq'), level, + renderer.levels[level].length); + pageContents.text = renderer.levels[level]; + + prevButton.isVisible = level > 0; + nextButton.isVisible = level < renderer.levels.length - 1; + }; let menu = ui.createPopup ({ - title: Localization.format(getLoc('menuSequence'), tmpSystemName, - level), + title: tmpSystemName, isPeekable: true, content: ui.createStackLayout ({ @@ -5522,6 +5557,20 @@ let createSeqViewMenu = (level) => ] }) }) + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + columnDefinitions: ['50*', '50*'], + children: + [ + prevButton, + nextButton + ] }) ] }) diff --git a/parametric.js b/parametric.js index 7047275..bebd5b7 100644 --- a/parametric.js +++ b/parametric.js @@ -5153,7 +5153,7 @@ let createSeqViewMenu = (level) => { let pageTitle = ui.createLatexLabel ({ - text: Localization.format(getLoc('labelChars'), + text: Localization.format(getLoc('labelLevelSeq'), level, renderer.levels[level].length), margin: new Thickness(0, 4), heightRequest: 20, @@ -5168,11 +5168,47 @@ let createSeqViewMenu = (level) => renderer.levelParams[level]), lineBreakMode: LineBreakMode.CHARACTER_WRAP }); + let prevButton = ui.createButton + ({ + text: getLoc('btnPrev'), + row: 0, + column: 0, + isVisible: level > 0, + onClicked: () => + { + Sound.playClick(); + if(level > 0) + setPage(level - 1); + } + }); + let nextButton = ui.createButton + ({ + text: getLoc('btnNext'), + row: 0, + column: 1, + isVisible: level < renderer.levels.length - 1, + onClicked: () => + { + Sound.playClick(); + if(level < renderer.levels.length - 1) + setPage(level + 1); + } + }); + let setPage = (p) => + { + level = p; + pageTitle.text = Localization.format(getLoc('labelLevelSeq'), level, + renderer.levels[level].length); + pageContents.text = renderer.system.reconstruct(renderer.levels[level], + renderer.levelParams[level]); + + prevButton.isVisible = level > 0; + nextButton.isVisible = level < renderer.levels.length - 1; + }; let menu = ui.createPopup ({ - title: Localization.format(getLoc('menuSequence'), tmpSystemName, - level), + title: tmpSystemName, isPeekable: true, content: ui.createStackLayout ({ @@ -5193,6 +5229,20 @@ let createSeqViewMenu = (level) => ] }) }) + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createGrid + ({ + columnDefinitions: ['50*', '50*'], + children: + [ + prevButton, + nextButton + ] }) ] }) From 3540ecb51e82b220b7f4ba80f182472f2da46c7d Mon Sep 17 00:00:00 2001 From: Minh Date: Tue, 28 Feb 2023 23:24:22 +0700 Subject: [PATCH 67/94] Fixed derive returning undefined if rule not found --- TODO.md | 23 +++++++++---------- classic.js | 2 +- parametric.js | 62 +++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 71 insertions(+), 16 deletions(-) diff --git a/TODO.md b/TODO.md index 48f04ca..875e52c 100644 --- a/TODO.md +++ b/TODO.md @@ -18,18 +18,16 @@ - [ ] Localisation - [ ] Folders for saved systems - [ ] Ask Gilles about changing the spline used in 3D graph -- [ ] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - -## 1.0, Mistletoe ed. - - Too much hassle to implement, defer them to LG: - [ ] Option to use old tropisme - [ ] Tropism direction - Maybe can have 4 arguments - +- [x] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Compress internal state? LZW, LZP - [ ] Or just separate into multiple lines, with an add button +## 1.0, Mistletoe ed. + - [ ] Parametric systems - [ ] New option in constructor for MathExpression variables - [ ] Button in LS menu next to axiom entry @@ -48,19 +46,18 @@ would've been already stripped down by the time it gets to the turtle - `~`: Parameters of the following symbol can control model size in rule +## 1.0: Completed + +- [x] Turning angles (and tropism) + - Formula expressions allow shenanigans such as `360/7`, mostly + - [ ] Button to change mode between degrees and radians? + - Probably scrap too lol - [x] Revamp sequence menu - Level 0: 10 chars (`View`) - [x] Classic LS: displays the entire string in a label - - Parametric LS: displays symbols and parameters side by side, one symbol/row + - [ ] Parametric LS: displays symbols and params side by side, one symbol/row - Scrapped lol - [x] Stage navigation - -- [x] Turning angles (and tropism) - - Formula expressions allow shenanigans such as `360/7`, mostly - - [ ] Button to change mode between degrees and radians? - -## 1.0: Completed - - [x] Investigate Houdini stochastic syntax for weighted derivations `[left_ctx<] symbol [>right_ctx] [:condition] = replacement [:probability]` - Stochastic in PLSR: has to be on the same line diff --git a/classic.js b/classic.js index b5ae4ef..299be87 100644 --- a/classic.js +++ b/classic.js @@ -270,7 +270,7 @@ const locStrings = { title: 'Introduction', contents: -`Welcome to the (Classic) L-systems Renderer! This guide aims to help you ` + +`Welcome to the Classic L-systems Renderer! This guide aims to help you ` + `understand the basics of L-systems, as well as instructions on how to ` + `effectively use this theory to construct and render them. diff --git a/parametric.js b/parametric.js index bebd5b7..265b3fa 100644 --- a/parametric.js +++ b/parametric.js @@ -261,12 +261,54 @@ const locStrings = contents: `Welcome to the Parametric L-systems Renderer! This guide aims to help you ` + `understand parametric L-systems in detail, as well as instructions on how ` + -`to effectively use this theory to construct and render them. +`to effectively use this theory to construct and render them. Before using ` + +`the theory however, it is recommended to try out the Classic version first. -Let's start discovering the wonders of L-systems (and the renderer). +Without further a due, let's start discovering the wonders of L-systems. Notice: A gallery for regular L-systems has opened! Visit that theory instead.` }, + { + title: 'Differences between LSR versions', + contents: +`First of all, the terminology for Level has been changed to Stage. +That was the only major change. + +Anyway. In Parametric, as multiple rules can exist for one symbol, they are ` + +`checked from top to bottom when deriving, regardless of context or condition. +This is different from how it was defined in The Algorithmic Beauty of ` + +`Plants, where rules with a context are prioritised. Therefore, arrange your ` + +`rules accordingly. + +Declaring models now has a different syntax to align more with ` + +`context-sensitivity: +~ > {symbol} = {model} +Referencing a model in another rule still uses the old syntax: +~{symbol}` + }, + { + title: 'Context-sensitivity', + contents: +`One of the main weaknesses in the original L-system syntax comes from the ` + +`fact that each symbol has no way of interacting with other symbols. This ` + +`makes it unfit for applications of cellular automata or modelling forms of ` + +`communication between a plant's organs. + +Context-sensitive L-systems allow this to work, by letting a symbol see both ` + +`its ancestor (the symbol to its immediate left), and its child to the right ` + +`(children, if it opens up multiple branches). A context-sensitive rule goes ` + +`as follows: +{left} < {symbol} > {right} = {derivation} +The symbol will only derive according to this rule if its ancestor bears the ` + +`same symbol as {left}, and one of its children bears the same symbol as ` + +`{right}. + +LSR uses a context-sensitive 2L-system, where the 2 means that a context is ` + +`determined by two symbols: an ancestor and a child.` + }, + { + title: 'Example: ' + } ] } }; @@ -1023,6 +1065,7 @@ class LSystem else if(this.rules.has(sequence[i])) { let tmpRules = this.rules.get(sequence[i]); + let ruleChoice = -1; for(let j = 0; j < tmpRules.length; ++j) { // Left and right first @@ -1079,6 +1122,7 @@ class LSystem derivParams.push(derivPi); } } + ruleChoice = j; break; } else // Stochastic time @@ -1132,9 +1176,15 @@ class LSystem // log(`roll = ${roll} choice = ${choice}`) if(choice == -1) continue; + ruleChoice = j; break; } } + if(ruleChoice == -1) + { + deriv = sequence[i]; + derivParams = [seqParams[i]]; + } } else { @@ -1162,6 +1212,7 @@ class LSystem if(this.models.has(symbol)) { let tmpRules = this.models.get(symbol); + let ruleChoice = -1; for(let j = 0; j < tmpRules.length; ++j) { let tmpParamMap = (v) => tmpRules[j].paramMap(v, @@ -1196,6 +1247,7 @@ class LSystem resultParams.push(derivPi); } } + ruleChoice = j; break; } else // Stochastic time @@ -1250,9 +1302,15 @@ class LSystem // log(`roll = ${roll} choice = ${choice}`) if(choice == -1) continue; + ruleChoice = j; break; } } + if(ruleChoice == -1) + { + deriv = sequence[i]; + derivParams = [seqParams[i]]; + } } return { result: result, From d3477deb4a25c08187a78ac135abd166418524b3 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 1 Mar 2023 00:16:03 +0700 Subject: [PATCH 68/94] Added context-ignore input --- TODO.md | 1 + parametric.js | 166 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 116 insertions(+), 51 deletions(-) diff --git a/TODO.md b/TODO.md index 875e52c..ef20adb 100644 --- a/TODO.md +++ b/TODO.md @@ -29,6 +29,7 @@ ## 1.0, Mistletoe ed. - [ ] Parametric systems + - [x] Input context-ignored symbols - [ ] New option in constructor for MathExpression variables - [ ] Button in LS menu next to axiom entry - Different classes diff --git a/parametric.js b/parametric.js index 265b3fa..9527313 100644 --- a/parametric.js +++ b/parametric.js @@ -125,7 +125,6 @@ const LS_RULE = /([^:]+)(:(.+))?=(.*)/; // Context doesn't need to check for nested brackets! const LS_CONTEXT = /((.)(\(([^\)]+)\))?<)?((.)(\(([^\)]+)\))?)(>(.)(\(([^\)]+)\))?)?/; -const CTX_IGNORE_LIST = new Set('FfT+-&^\\/|{.}%~$'); const BACKTRACK_LIST = new Set('+-&^\\/|[$T'); const locStrings = @@ -198,7 +197,8 @@ const locStrings = labelAxiom: 'Axiom: ', labelAngle: 'Turning angle (°): ', labelRules: 'Production rules: {0}', - labelIgnored: 'Ignored symbols: ', + labelIgnored: 'Turtle-ignored: ', + labelCtxIgnored: 'Context-ignored: ', labelTropism: 'Tropism (gravity): ', labelSeed: 'Seed (≠ 0): ', @@ -303,11 +303,28 @@ The symbol will only derive according to this rule if its ancestor bears the ` + `same symbol as {left}, and one of its children bears the same symbol as ` + `{right}. -LSR uses a context-sensitive 2L-system, where the 2 means that a context is ` + -`determined by two symbols: an ancestor and a child.` +Note: LSR uses a context-sensitive 2L-system, where the 2 means that a ` + +`context is determined by two symbols: an ancestor and a child. + +Note 2: The list of context-ignored symbols can be configured in the ` + +`L-system menu.` }, { - title: 'Example: ' + title: 'Example: Signal propagation', + contents: +`A simple signal sent by the concurrent youth. The signal, denoted by the ` + +`letter 🅱, starts from the 🅱ase of the tree and travels to the to🅿️. + +Axiom: B[+AAA]A[-AA]A[+A]A +B < A = B +B = A +Context-ignored: +- +Turning angle: 30° + +Applies static camera: +Scale: 4 +Centre: (0, 2, 0) +Upright` } ] } @@ -699,7 +716,7 @@ class LSystem * @param {object} variables NOT IMPLEMENTED */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, - ignoreList = '', tropism = 0, variables = {}) + ignoreList = '', ctxIgnoreList = '', tropism = 0, variables = {}) { // User input this.userInput = @@ -709,6 +726,7 @@ class LSystem turnAngle: turnAngle, seed: seed, ignoreList: ignoreList, + ctxIgnoreList: ctxIgnoreList, tropism: tropism, variables: variables }; @@ -887,6 +905,7 @@ class LSystem } this.ignoreList = new Set(ignoreList); + this.ctxIgnoreList = new Set(ctxIgnoreList); this.RNG = new Xorshift(seed); this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate() * @@ -991,7 +1010,7 @@ class LSystem idxStack.pop(); break; default: - let ignored = CTX_IGNORE_LIST.has(sequence[i]); + let ignored = this.ctxIgnoreList.has(sequence[i]); if(ignored) break; @@ -1357,6 +1376,7 @@ class LSystem * turnAngle: string, * seed: number, * ignoreList: string, + * ctxIgnoreList: string, * tropism: string, * variables: object * }} @@ -1369,6 +1389,7 @@ class LSystem turnAngle: this.userInput.turnAngle, seed: this.userInput.seed, ignoreList: this.userInput.ignoreList, + ctxIgnoreList: this.userInput.ctxIgnoreList, tropism: this.userInput.tropism, variables: this.userInput.variables }; @@ -3799,18 +3820,6 @@ let createSystemMenu = () => tmpAxiom = nt; } }); - let tmpAngle = values.turnAngle || '0'; - let angleEntry = ui.createEntry - ({ - text: tmpAngle.toString(), - row: 1, - column: 1, - horizontalTextAlignment: TextAlignment.END, - onTextChanged: (ot, nt) => - { - tmpAngle = nt; - } - }); let tmpRules = values.rules; let ruleEntries = []; let ruleMoveBtns = []; @@ -3899,7 +3908,7 @@ let createSystemMenu = () => ruleStack.children = [...ruleEntries, ...ruleMoveBtns]; } }); - let tmpIgnore = values.ignoreList; + let tmpIgnore = values.ignoreList || ''; let ignoreEntry = ui.createEntry ({ text: tmpIgnore, @@ -3911,11 +3920,35 @@ let createSystemMenu = () => tmpIgnore = nt; } }); + let tmpCI = values.ctxIgnoreList || ''; + let CIEntry = ui.createEntry + ({ + text: tmpCI, + row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCI = nt; + } + }); + let tmpAngle = values.turnAngle || '0'; + let angleEntry = ui.createEntry + ({ + text: tmpAngle.toString(), + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpAngle = nt; + } + }); let tmpTropism = values.tropism || '0'; let tropismEntry = ui.createEntry ({ text: tmpTropism.toString(), - row: 2, + row: 3, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -3926,7 +3959,7 @@ let createSystemMenu = () => let tmpSeed = values.seed || '0'; let seedLabel = ui.createGrid ({ - row: 3, + row: 4, column: 0, columnDefinitions: ['40*', '30*'], children: @@ -3954,7 +3987,7 @@ let createSystemMenu = () => ({ text: tmpSeed.toString(), keyboard: Keyboard.NUMERIC, - row: 3, + row: 4, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4019,17 +4052,26 @@ let createSystemMenu = () => ignoreEntry, ui.createLatexLabel ({ - text: getLoc('labelAngle'), + text: getLoc('labelCtxIgnored'), row: 1, column: 0, verticalTextAlignment: TextAlignment.CENTER }), + CIEntry, + ui.createLatexLabel + ({ + text: getLoc('labelAngle'), + row: 2, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), angleEntry, ui.createLatexLabel ({ text: getLoc('labelTropism'), - row: 2, + row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER @@ -4062,7 +4104,7 @@ let createSystemMenu = () => { Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, - tmpRules, tmpAngle, tmpSeed, tmpIgnore, + tmpRules, tmpAngle, tmpSeed, tmpIgnore, tmpCI, tmpTropism); if(tmpSystem) { @@ -4083,14 +4125,15 @@ let createSystemMenu = () => Sound.playClick(); let values = new LSystem().object; axiomEntry.text = values.axiom; - angleEntry.text = values.turnAngle; + angleEntry.text = values.turnAngle.toString(); tmpRules = values.rules; ruleEntries = []; rulesLabel.text = Localization.format( getLoc('labelRules'), ruleEntries.length); ruleStack.children = ruleEntries; ignoreEntry.text = values.ignoreList; - tropismEntry.text = values.tropism; + CIEntry.text = values.ctxIgnoreList; + tropismEntry.text = values.tropism.toString(); seedEntry.text = values.seed.toString(); } }) @@ -4315,7 +4358,7 @@ let createSystemClipboardMenu = (values) => renderer.constructSystem = new LSystem(sv.system.axiom, sv.system.rules, sv.system.turnAngle, sv.system.seed, sv.system.ignoreList, - sv.system.tropism); + sv.system.ctxIgnoreList, sv.system.tropism); tmpSystem = null; if('config' in sv) renderer.configureStaticCamera(...sv.config); @@ -4492,18 +4535,6 @@ let createViewMenu = (title, parentMenu) => tmpAxiom = nt; } }); - let tmpAngle = values.turnAngle || '0'; - let angleEntry = ui.createEntry - ({ - text: tmpAngle.toString(), - row: 1, - column: 1, - horizontalTextAlignment: TextAlignment.END, - onTextChanged: (ot, nt) => - { - tmpAngle = nt; - } - }); let tmpRules = []; for(let i = 0; i < values.rules.length; ++i) tmpRules[i] = values.rules[i]; @@ -4594,7 +4625,7 @@ let createViewMenu = (title, parentMenu) => ruleStack.children = [...ruleEntries, ...ruleMoveBtns]; } }); - let tmpIgnore = values.ignoreList; + let tmpIgnore = values.ignoreList || ''; let ignoreEntry = ui.createEntry ({ text: tmpIgnore, @@ -4606,11 +4637,35 @@ let createViewMenu = (title, parentMenu) => tmpIgnore = nt; } }); + let tmpCI = values.ctxIgnoreList || ''; + let CIEntry = ui.createEntry + ({ + text: tmpCI, + row: 1, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpCI = nt; + } + }); + let tmpAngle = values.turnAngle || '0'; + let angleEntry = ui.createEntry + ({ + text: tmpAngle.toString(), + row: 2, + column: 1, + horizontalTextAlignment: TextAlignment.END, + onTextChanged: (ot, nt) => + { + tmpAngle = nt; + } + }); let tmpTropism = values.tropism || '0'; let tropismEntry = ui.createEntry ({ text: tmpTropism.toString(), - row: 2, + row: 3, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4621,7 +4676,7 @@ let createViewMenu = (title, parentMenu) => let tmpSeed = values.seed || '0'; let seedLabel = ui.createGrid ({ - row: 3, + row: 4, column: 0, columnDefinitions: ['40*', '30*'], children: @@ -4649,7 +4704,7 @@ let createViewMenu = (title, parentMenu) => ({ text: tmpSeed.toString(), keyboard: Keyboard.NUMERIC, - row: 3, + row: 4, column: 1, horizontalTextAlignment: TextAlignment.END, onTextChanged: (ot, nt) => @@ -4722,17 +4777,26 @@ let createViewMenu = (title, parentMenu) => ignoreEntry, ui.createLatexLabel ({ - text: getLoc('labelAngle'), + text: getLoc('labelCtxIgnored'), row: 1, column: 0, verticalTextAlignment: TextAlignment.CENTER }), + CIEntry, + ui.createLatexLabel + ({ + text: getLoc('labelAngle'), + row: 2, + column: 0, + verticalTextAlignment: + TextAlignment.CENTER + }), angleEntry, ui.createLatexLabel ({ text: getLoc('labelTropism'), - row: 2, + row: 3, column: 0, verticalTextAlignment: TextAlignment.CENTER @@ -4807,7 +4871,7 @@ let createViewMenu = (title, parentMenu) => { Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, - tmpRules, tmpAngle, tmpSeed, tmpIgnore, + tmpRules, tmpAngle, tmpSeed, tmpIgnore, tmpCI, tmpTropism); tmpSystem = null; renderer.configureStaticCamera(tmpZE, tmpCX, @@ -4830,8 +4894,8 @@ let createViewMenu = (title, parentMenu) => { desc: tmpDesc, system: new LSystem(tmpAxiom, tmpRules, - tmpAngle, tmpSeed, tmpIgnore, tmpTropism). - object, + tmpAngle, tmpSeed, tmpIgnore, tmpCI, + tmpTropism).object, config: [tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright] }); @@ -5654,7 +5718,7 @@ var setInternalState = (stateStr) => tmpSystemDesc = state.system.desc; tmpSystem = new LSystem(state.system.axiom, state.system.rules, state.system.turnAngle, state.system.seed, state.system.ignoreList, - state.system.tropism); + state.system.ctxIgnoreList, state.system.tropism); } if('renderer' in state) From 829f3d393e33b325fde1526e96394f8e498448ac Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 1 Mar 2023 00:30:55 +0700 Subject: [PATCH 69/94] Fixed crash if there's no children --- parametric.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/parametric.js b/parametric.js index 9527313..a042c54 100644 --- a/parametric.js +++ b/parametric.js @@ -1095,12 +1095,16 @@ class LSystem let right = -1; if(tmpRules[j].right) { - for(let k = 0; k < children[i].length; ++k) + if(children[i]) { - if(tmpRules[j].right == sequence[children[i][k]]) + for(let k = 0; k < children[i].length; ++k) { - right = children[i][k]; - break; + if(tmpRules[j].right == sequence[children[i][ + k]]) + { + right = children[i][k]; + break; + } } } if(right == -1) From c58dc723467151fe8c42509a1083669bd314a978 Mon Sep 17 00:00:00 2001 From: Minh Date: Wed, 1 Mar 2023 01:09:51 +0700 Subject: [PATCH 70/94] Added 2 new ctx systems to manual --- parametric.js | 61 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/parametric.js b/parametric.js index a042c54..d89c4b4 100644 --- a/parametric.js +++ b/parametric.js @@ -316,7 +316,7 @@ Note 2: The list of context-ignored symbols can be configured in the ` + `letter 🅱, starts from the 🅱ase of the tree and travels to the to🅿️. Axiom: B[+AAA]A[-AA]A[+A]A -B < A = B +B0 = 0 +0<0>1 = 1[-F1F1] +0<1>0 = 1 +0<1>1 = 1 +1<0>0 = 0 +1<0>1 = 1F1 +1<1>0 = 1 +1<1>1 = 0 ++ = - +- = + +Turtle-ignored: 01 +Context-ignored: F+- +Turning angle: 22.5° + +Applies static camera: +Scale: lv+2 +Centre: (0, lv/2+1, 0) Upright` } ] @@ -712,6 +739,8 @@ class LSystem * @param {string} turnAngle the turning angle (in degrees). * @param {number} seed the seed used for stochastic systems. * @param {string} ignoreList a list of symbols to be ignored by the turtle. + * @param {string} ctxIgnoreList a list of symbols ignored when deriving + * context. * @param {string} tropism the tropism factor. * @param {object} variables NOT IMPLEMENTED */ @@ -2966,8 +2995,34 @@ const zUpQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); let globalRNG = new Xorshift(Date.now()); -let contentsTable = [0]; -let manualSystems = {}; +let contentsTable = [0, 1, 2]; +let manualSystems = +{ + 3: + { + system: new LSystem('B[+AAA]A[-AA]A[+A]A', [ + 'B0=0', + '0<0>1=1[-F1F1]', + '0<1>0=1', + '0<1>1=1', + '1<0>0=0', + '1<0>1=1F1', + '1<1>0=1', + '1<1>1=0', + '+=-', + '-=+' + ], 22.5, 0, '01', 'F+-'), + config: ['lv+2', 0, 'lv/2+1', 0, true] + } +}; let tmpSystem = null; let tmpSystemName = getLoc('welcomeSystemName'); let tmpSystemDesc = getLoc('welcomeSystemDesc'); From 27cc9b2d02cf022e8a26378842f0ed5947d851d1 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 00:12:14 +0700 Subject: [PATCH 71/94] Fixed precision error with system angles --- README.md | 29 +++-- TODO.md | 4 +- classic.js | 11 +- parametric.js | 300 +++++++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 309 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index c68b673..7bb75fd 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,25 @@ L-systems renderer in Exponential Idle. +## Installation + +Two editions of LSR are available. The Classic edition of LSR is lighter in +terms of processing, but does not support parametric or context-sensitive +syntax. + +- [Classic](./classic.js) +- [Parametric](./parametric.js) + +Navigate to the edition you want to download, click on the link, then click on +`Raw`. You will be delivered to the theory's raw code. Copy the page's URL. + +Then, access the custom theory panel within the game (unlocked after finishing +T9, the last theory) then enter the picking menu. Press the `+` symbol and +paste the URL in. + ## Features -Supported L-system features: +- Parametric, context-sensitive (2L) systems - Stochastic (randomised) rules - 3D turtle controls - Polygon modelling @@ -20,17 +36,6 @@ Be sure to back it up to another save before updating, and in case it's corrupted, please contact me. From now on, there's also an option to export the internal state in the theory menu, so please back it up. -## Installation - -Current version: 0.21.1 - -Navigate to [`renderer.js`](./renderer.js) and click on `Raw`. You will be -delivered to this theory's raw code. Copy the page's URL. - -Then, access the custom theory panel within the game (unlocked after finishing -T9, the last theory) then enter the picking menu. Press the `+` symbol and -paste the URL in. - ## Screenshots ![ss1](screenshots/33.jpg "Lilac branch") diff --git a/TODO.md b/TODO.md index ef20adb..dfc4e61 100644 --- a/TODO.md +++ b/TODO.md @@ -22,7 +22,6 @@ - [ ] Option to use old tropisme - [ ] Tropism direction - Maybe can have 4 arguments -- [x] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [ ] Compress internal state? LZW, LZP - [ ] Or just separate into multiple lines, with an add button @@ -49,6 +48,9 @@ ## 1.0: Completed +- [x] Split into two versions: Classic Renderer and Paramatric L-systems Rdr +- [x] Fix precision problem with BigNumber and/or Quaternions + - Source of error: missing a conversion of BN -> Number in LS constructor - [x] Turning angles (and tropism) - Formula expressions allow shenanigans such as `360/7`, mostly - [ ] Button to change mode between degrees and radians? diff --git a/classic.js b/classic.js index 299be87..da04ff7 100644 --- a/classic.js +++ b/classic.js @@ -49,7 +49,7 @@ var getDescription = (language) => let descs = { en: -`An educational tool that allows you to model plants and other fractal figures. +`An educational tool that allows you to model fractals figures and plants. Supported L-system features: - Stochastic (randomised) rules @@ -264,7 +264,7 @@ const locStrings = menuManual: 'User Guide ({0}/{1})', menuTOC: 'Table of Contents', labelSource: 'Source: ', - manualSystemDesc: 'User guide, page {0}.', + manualSystemDesc: 'From the user guide, page {0}.', manual: [ { @@ -1468,8 +1468,8 @@ class LSystem /** * @type {number} half the turning angle (in radians) for use in quats. */ - this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate() * - Math.PI / 360; + this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate(). + toNumber() * Math.PI / 360; /** * @type {Map} a map of rotation quaternions for * quicker calculations. @@ -1486,7 +1486,8 @@ class LSystem /** * @type {number} the tropism factor. */ - this.tropism = MathExpression.parse(tropism.toString()).evaluate(); + this.tropism = MathExpression.parse(tropism.toString()).evaluate(). + toNumber(); } /** diff --git a/parametric.js b/parametric.js index d89c4b4..ff50e0b 100644 --- a/parametric.js +++ b/parametric.js @@ -34,7 +34,7 @@ var getDescription = (language) => let descs = { en: -`An educational tool that allows you to model plants, mostly. +`An educational tool that allows you to model plants and fractal figures. Supported L-system features: - Parametric, context-sensitive (2L) systems @@ -45,7 +45,10 @@ Supported L-system features: Other features: - Can save a whole army of systems! - Camera modes: static and turtle-following -- Drawing speed and advanced stroke options!`, +- Drawing speed and advanced stroke options! + +Note: Systems from LSR can be ported to P-LSR with minimal changes. However,` + +`the opposite is rarely true.`, }; return descs[language] || descs.en; @@ -64,6 +67,7 @@ let tickDelayMode = false; let resetLvlOnConstruct = true; let measurePerformance = false; let debugCamPath = false; +let normaliseQuaternions = false; let maxCharsPerTick = 1250; let menuLang = Localization.language; @@ -253,7 +257,7 @@ const locStrings = menuManual: 'User Guide ({0}/{1})', menuTOC: 'Table of Contents', labelSource: 'Source: ', - manualSystemDesc: 'User guide, page {0}.', + manualSystemDesc: 'From the user guide, page {0}.', manual: [ { @@ -303,17 +307,18 @@ The symbol will only derive according to this rule if its ancestor bears the ` + `same symbol as {left}, and one of its children bears the same symbol as ` + `{right}. -Note: LSR uses a context-sensitive 2L-system, where the 2 means that a ` + -`context is determined by two symbols: an ancestor and a child. +Note: P-LSR uses a context-sensitive variant called 2L-systems, where the 2 ` + +`means that a context is determined by two symbols: an ancestor and a child. ` + +`Another variant, 1L-systems, only determines a context in one direction. Note 2: The list of context-ignored symbols can be configured in the ` + -`L-system menu.` +`L-system menu. These symbols will be left out of the ancestree computation.` }, { title: 'Example: Signal propagation', contents: `A simple signal sent by the concurrent youth. The signal, denoted by the ` + -`letter 🅱, starts from the 🅱ase of the tree and travels to the to🅿️. +`letter B, starts from the 🅱ase of the tree and travels to the to🅿️. Axiom: B[+AAA]A[-AA]A[+A]A B init(); -let testSuite = () => +let testDerive = () => { let a = new LSystem('[+(30)G]F/(180)A(2)', [ 'A(t):t<=5=[+(30)G]F/(180)A(t+2):0.5,[-(30)G]F\\(180)A(t+2):0.4,:0,C:0' @@ -5989,3 +6049,209 @@ let testSuite = () => let b2p = tmpDeriv.params; log(arrow.reconstruct(b2, b2p)); } + +let testQuaternion = () => +{ + // Normalisation = off + let a = new Quaternion().rotate(60, '+').rotate(60, '+'); + let b = new Quaternion().rotate(120, '+'); + // Round 1 results: + // [10:56:40] 60 + 60: + // 0.500 + 0.000i + 0.000j + -0.87k + // (-0.5, 0.866025403784439, 0) + // [10:56:40] 120: + // -0.50 + 0.000i + 0.000j + 0.866k + // (-0.5, 0.866025403784439, 0) + a = a.rotate(60, '+').rotate(60, '+'); + b = b.rotate(120, '+'); + // Round 2 results: + // [10:58:17] 60 + 60: + // -0.50 + 0.000i + 0.000j + -0.87k + // (-0.500000000000001, -0.866025403784438, 0) + // [10:58:17] 120: + // -0.50 + 0.000i + 0.000j + -0.87k + // (-0.500000000000001, -0.866025403784438, 0) + a = a.rotate(60, '+').rotate(60, '+'); + b = b.rotate(120, '+'); + // Round 3 results: + // [10:59:03] 60 + 60: + // -1.00 + 0.000i + 0.000j + 0.000k + // (1, -1.11022302462516E-15, 0) + // [10:59:03] 120: + // 1.000 + 0.000i + 0.000j + 0.000k + // (1, -7.7715611723761E-16, 0) + a = a.rotate(60, '+').rotate(60, '+'); + b = b.rotate(120, '+'); + // Round 4 results: + // [11:00:54] 60 + 60: + // -0.50 + 0.000i + 0.000j + 0.866k + // (-0.499999999999999, 0.866025403784439, 0) + // [11:00:54] 120: + // -0.50 + 0.000i + 0.000j + 0.866k + // (-0.499999999999999, 0.866025403784439, 0) + a = a.rotate(60, '+').rotate(60, '+'); + b = b.rotate(120, '+'); + // Round 5 results: + // [11:01:45] 60 + 60: + // 0.500 + 0.000i + 0.000j + 0.866k + // (-0.500000000000002, -0.866025403784438, 0) + // [11:01:45] 120: + // -0.50 + 0.000i + 0.000j + -0.87k + // (-0.500000000000001, -0.866025403784438, 0) + a = a.rotate(60, '+').rotate(60, '+'); + b = b.rotate(120, '+'); + // Round 6 results: + // [11:02:19] 60 + 60: + // 1.000 + 0.000i + 0.000j + 0.000k + // (1, -2.22044604925031E-15, 0) + // [11:02:19] 120: + // 1.000 + 0.000i + 0.000j + 0.000k + // (1, -1.77635683940025E-15, 0) + + log(`60 + 60:\n${a.toString()}\n${a.headingVector.toString()}`); + log(`120:\n${b.toString()}\n${b.headingVector.toString()}`); +} + +let testQuaternion2 = () => +{ + // Normalisation = off + let a = new Quaternion().rotate(60, '+').rotate(60, '+').rotate(120, '-'); + // Round 1 results: + // [11:05:41] 60 + 60 - 120: + // -1.00 + 0.000i + 0.000j + 0.000k + // (1, -1.11022302462516E-16, 0) + a = a.rotate(60, '+').rotate(60, '+').rotate(120, '-'); + // Round 2 results: + // [11:07:00] 60 + 60 - 120: + // 1.000 + 0.000i + 0.000j + 0.000k + // (1, -1.11022302462516E-16, 0) + a = a.rotate(60, '+').rotate(60, '+').rotate(120, '-'); + // Round 3 results: + // [11:07:31] 60 + 60 - 120: + // -1.00 + 0.000i + 0.000j + 0.000k + // (1, -1.11022302462516E-16, 0) + log(`60 + 60 - 120:\n${a.toString()}\n${a.headingVector.toString()}`); + // Results are exact same if replaced with BigNumber.from(120).toNumber(). +} + +let testQuaternion3 = () => +{ + // Normalisation = off + let a = new Quaternion().rotate(60, '+').rotate(120, '-').rotate(60, '+'); + for(let i = 0; i < 1000; ++i) + a = a.rotate(60, '+').rotate(120, '-').rotate(60, '+'); + + // [11:12:20] 60 - 120 + 60: + // -1.00 + 0.000i + 0.000j + 0.000k + // (1, -2.22044604925031E-16, 0) + log(`60 - 120 + 60:\n${a.toString()}\n${a.headingVector.toString()}`); +} + +let testVector = () => +{ + // Normalisation = off + let state = new Vector3(0, 0, 0); + let ori = new Quaternion(); + for(let i = 0; i < 180; ++i) + { + state += ori.headingVector; + ori = ori.rotate(120, '+'); + state += ori.headingVector; + ori = ori.rotate(120, '-'); + state += ori.headingVector; + ori = ori.rotate(120, '-'); + state += ori.headingVector; + ori = ori.rotate(120, '+'); + state += ori.headingVector; + ori = ori.rotate(120, '+'); + state += ori.headingVector; + state += ori.headingVector; + ori = ori.rotate(120, '+'); + state += ori.headingVector; + state += ori.headingVector; + ori = ori.rotate(120, '+'); + if(i % 10 == 9) + log(`Error ${i}: ${state.x} ${state.y}`); + } + // [11:30:13] Error 9: -8.881784197001252e-16 6.8833827526759706e-15 + // [11:30:14] Error 19: -1.7763568394002505e-15 1.2656542480726785e-14 + // [11:30:14] Error 29: 1.7763568394002505e-15 1.887379141862766e-14 + // [11:30:14] Error 39: 3.9968028886505635e-15 2.55351295663786e-14 + // [11:30:14] Error 49: 4.884981308350689e-15 3.2862601528904634e-14 + // [11:30:14] Error 59: 7.327471962526033e-15 3.907985046680551e-14 + // [11:30:14] Error 69: 8.881784197001252e-15 4.707345624410664e-14 + // [11:30:14] Error 79: 1.199040866595169e-14 5.484501741648273e-14 + // [11:30:14] Error 89: 1.3322676295501878e-14 6.150635556423367e-14 + // [11:30:14] Error 99: 1.4654943925052066e-14 6.816769371198461e-14 + // [11:30:14] Error 109: 1.6431300764452317e-14 7.527312106958561e-14 + // [11:30:14] Error 119: 1.8207657603852567e-14 8.193445921733655e-14 + // [11:30:14] Error 129: 1.9539925233402755e-14 8.948397578478762e-14 + // [11:30:14] Error 139: 2.2648549702353193e-14 9.614531393253856e-14 + // [11:30:14] Error 149: 2.3092638912203256e-14 1.0347278589506459e-13 + // [11:30:14] Error 159: 2.531308496145357e-14 1.1013412404281553e-13 + // [11:30:14] Error 169: 2.708944180085382e-14 1.1723955140041653e-13 + // [11:30:14] Error 179: 2.9753977059954195e-14 1.2523315717771766e-13 +} + +let testVector2 = () => +{ + let state = new Vector3(0, 0, 0); + let ori = new Quaternion(); + + state += ori.headingVector; + log(`${state.x} ${state.y}`); + ori = ori.rotate(120, '+'); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + ori = ori.rotate(120, '-'); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + ori = ori.rotate(120, '-'); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + ori = ori.rotate(120, '+'); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + ori = ori.rotate(120, '+'); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + ori = ori.rotate(120, '+'); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + state += ori.headingVector; + log(`${state.x} ${state.y}`); + + // [11:39:17] 1 0 + // [11:39:17] 0.5000000000000002 0.8660254037844388 + // [11:39:17] 1.5000000000000002 0.8660254037844388 + // [11:39:17] 1.0000000000000004 0 + // [11:39:17] 2.0000000000000004 0 + // [11:39:17] 1.5000000000000007 0.8660254037844388 + // [11:39:17] 1.0000000000000009 1.7320508075688776 + // [11:39:17] 0.5000000000000003 0.8660254037844392 + // [11:39:17] -2.220446049250313e-16 6.661338147750939e-16 + + // Renderer results: + // [11:40:39] 1 0 + // [11:40:39] 0.4951538954001423 0.8632093666488738 + // [11:40:39] 1.4951538954001427 0.8632093666488738 + // [11:40:40] 0.9903077908002847 -3.3306690738754696e-16 + // [11:40:40] 1.9903077908002853 -4.440892098500626e-16 + // [11:40:40] 1.4854616862004275 0.8632093666488738 + // [11:40:40] 0.9806155816005697 1.726418733297748 + // [11:40:40] 0.4903547602598699 0.8548429608841593 + // [11:40:40] 0.00009393891917008901 -0.016732811529429403 + + // Rotation half-angle: 120 -> 1.0471975511965976 + // System half-angle: 120 -> 1.05 +} + +let testAngle = () => +{ + let straightNum = 120; + let bigNumConvert = BigNumber.from('120').toNumber(); + let expressionResult = MathExpression.parse('120').evaluate().toNumber(); + log(`${straightNum} vs. ${bigNumConvert} vs. ${expressionResult}`); +} From 17b759073b9597a3c9fa506cf04dbde22689b717 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 00:18:28 +0700 Subject: [PATCH 72/94] Updated Koch example to include -(120) --- parametric.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/parametric.js b/parametric.js index ff50e0b..1afe336 100644 --- a/parametric.js +++ b/parametric.js @@ -386,12 +386,12 @@ T(g): applies a tropism force of g.` `using parametric L-systems. Axiom: F(1) -F(d) = F(d/3)+F(d/3)--F(d/3)+F(d/3) +F(d) = F(d/3)+F(d/3)-(120)F(d/3)+F(d/3) Turning angle: 60° Applies static camera: -Scale: 1 -Centre: (1/2, sqrt(3)/8, 0)` +Scale: 1/2 +Centre: (1/2, sqrt(3)/12, 0)` }, { title: 'Parametric L-systems', @@ -3078,9 +3078,9 @@ let manualSystems = 6: { system: new LSystem('F(1)', [ - 'F(d)=F(d/3)+F(d/3)--F(d/3)+F(d/3)' + 'F(d)=F(d/3)+F(d/3)-(120)F(d/3)+F(d/3)' ], 60), - config: [1, '1/2', 'sqrt(3)/8', 0, false] + config: ['1/2', '1/2', 'sqrt(3)/12', 0, false] } }; let tmpSystem = null; From 8dd4deadce8ddd77cbc1e5990498f4958419bdc8 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 01:30:52 +0700 Subject: [PATCH 73/94] Added page about Param 2LS --- parametric.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/parametric.js b/parametric.js index 1afe336..045394e 100644 --- a/parametric.js +++ b/parametric.js @@ -382,8 +382,8 @@ T(g): applies a tropism force of g.` `The Koch curve belongs to a family of self-similar fractals generated by ` + `the iterated function systems (IFS) method. An IFS can construct a fractal ` + `by recursively applying affine transformations (translation, rotation, ` + -`scaling) to an initial figure, or... axiom! Many IFSs can be reconstructed ` + -`using parametric L-systems. +`scaling) to an initial figure... an axiom! Many IFSs can be reconstructed ` + +`using parametric L-systems, as long as only lines are involved. Axiom: F(1) F(d) = F(d/3)+F(d/3)-(120)F(d/3)+F(d/3) @@ -394,11 +394,31 @@ Scale: 1/2 Centre: (1/2, sqrt(3)/12, 0)` }, { - title: 'Parametric L-systems', + title: 'Parametric 2L-systems', contents: `Beyond geometric applications, parametric L-systems allow individual ` + `symbols to hold additional information such as its state of growth, elapsed ` + -`time, ` +`time, etc. They can be even peeked at in context rules! +The syntax for a parametric rule goes as follows: +{symbol}({param_0},...) : {condition*} = {derivation_0} : {probability**},... + +Examples: +I(t) : t>0 = FI(t-1) +A(t) : t>5 = B(t+1)CD(t^0.5, t-2) +Example including context: +A(x) < B(y) > C(z) : x+y+z>10 = E((x+y)/2)F((y+z)/2) + +Note: All arithmetic processing in parameters is done using the game's ` + +`MathExpression class (just like the formulae for Auto-prestige/supremacy). +As such, there are several unavailable expressions: +% (modulus) +== (equality) +true, false (keywords) +a ? b : c (conditional ternary) +Conversion from boolean to number is also unavailable. + +* When omitted, the condition is assumed to be always true. +** When omitted, the chance is assumed to be 100%.` } ] } From efbf46db9888b59375762d65df68ae568ff54d02 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 15:33:56 +0700 Subject: [PATCH 74/94] Implemented variables --- TODO.md | 16 ++-- parametric.js | 230 ++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 223 insertions(+), 23 deletions(-) diff --git a/TODO.md b/TODO.md index dfc4e61..5ee07dc 100644 --- a/TODO.md +++ b/TODO.md @@ -18,19 +18,22 @@ - [ ] Localisation - [ ] Folders for saved systems - [ ] Ask Gilles about changing the spline used in 3D graph -- Too much hassle to implement, defer them to LG: +- Too much hassle to implement, defer them to LG? - [ ] Option to use old tropisme - [ ] Tropism direction - Maybe can have 4 arguments + +## 1.0, Mistletoe ed. + - [ ] Compress internal state? LZW, LZP - [ ] Or just separate into multiple lines, with an add button -## 1.0, Mistletoe ed. +## 1.0: Completed -- [ ] Parametric systems +- [x] Parametric systems - [x] Input context-ignored symbols - - [ ] New option in constructor for MathExpression variables - - [ ] Button in LS menu next to axiom entry + - [x] New option in constructor for MathExpression variables + - [x] Button in LS menu next to axiom entry - Different classes - Button in LS menu / save menu to switch modes? - Theory settings? @@ -45,9 +48,6 @@ - Round brackets gonna make it hard for actual drawing - although maybe it would've been already stripped down by the time it gets to the turtle - `~`: Parameters of the following symbol can control model size in rule - -## 1.0: Completed - - [x] Split into two versions: Classic Renderer and Paramatric L-systems Rdr - [x] Fix precision problem with BigNumber and/or Quaternions - Source of error: missing a conversion of BN -> Number in LS constructor diff --git a/parametric.js b/parametric.js index 045394e..a426643 100644 --- a/parametric.js +++ b/parametric.js @@ -160,6 +160,7 @@ const locStrings = btnSave: 'Save', btnClear: 'Clear All', btnDefault: '* Reset to Defaults', + btnVar: 'Variables', btnAdd: 'Add', btnUp: '▲', btnDown: '▼', @@ -205,6 +206,8 @@ const locStrings = labelCtxIgnored: 'Context-ignored: ', labelTropism: 'Tropism (gravity): ', labelSeed: 'Seed (≠ 0): ', + menuVariables: 'Define Variables', + labelVars: 'Variables: {0}', menuRenderer: 'Renderer Menu', labelInitScale: '* Initial scale: ', @@ -814,7 +817,7 @@ class LSystem * @param {string} ctxIgnoreList a list of symbols ignored when deriving * context. * @param {string} tropism the tropism factor. - * @param {object} variables NOT IMPLEMENTED + * @param {object} variables globally defined variables for the system. */ constructor(axiom = '', rules = [], turnAngle = 0, seed = 0, ignoreList = '', ctxIgnoreList = '', tropism = 0, variables = {}) @@ -831,6 +834,13 @@ class LSystem tropism: tropism, variables: variables }; + // I want to transfer them to a map to deep copy them. LS menu uses + // arrays so we're fine on that. + this.variables = new Map(); + for(let key in variables) + this.variables.set(key, MathExpression.parse(variables[key]). + evaluate()); + let axiomMatches = this.parseSequence(axiom.replace(TRIM_SP, '')); this.axiom = axiomMatches.result; this.axiomParams = axiomMatches.params; @@ -843,7 +853,8 @@ class LSystem let params = this.axiomParams[i].split(','); for(let j = 0; j < params.length; ++j) - params[j] = MathExpression.parse(params[j]).evaluate(); + params[j] = MathExpression.parse(params[j]).evaluate( + (v) => this.variables.get(v)); this.axiomParams[i] = params; // Maybe leave them at BigNumber? } @@ -1009,7 +1020,8 @@ class LSystem this.ctxIgnoreList = new Set(ctxIgnoreList); this.RNG = new Xorshift(seed); - this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate(). + this.halfAngle = MathExpression.parse(turnAngle.toString()).evaluate( + (v) => this.variables.get(v)). toNumber() * Math.PI / 360; this.rotations = new Map(); @@ -1022,7 +1034,8 @@ class LSystem this.rotations.set('\\', new Quaternion(-c, s, 0, 0)); this.rotations.set('/', new Quaternion(-c, -s, 0, 0)); - this.tropism = MathExpression.parse(tropism.toString()).evaluate(). + this.tropism = MathExpression.parse(tropism.toString()).evaluate( + (v) => this.variables.get(v)). toNumber(); } @@ -1213,8 +1226,9 @@ class LSystem continue; } - let tmpParamMap = (v) => tmpRules[j].paramMap(v, - seqParams[ancestors[i]], seqParams[i], seqParams[right]); + let tmpParamMap = (v) => this.variables.get(v) || + tmpRules[j].paramMap(v, seqParams[ancestors[i]], + seqParams[i], seqParams[right]); // Next up is the condition if(!tmpRules[j].condition.evaluate(tmpParamMap)) continue; @@ -1340,8 +1354,8 @@ class LSystem let ruleChoice = -1; for(let j = 0; j < tmpRules.length; ++j) { - let tmpParamMap = (v) => tmpRules[j].paramMap(v, - null, null, params); + let tmpParamMap = (v) => this.variables.get(v) || + tmpRules[j].paramMap(v, null, null, params); // Next up is the condition if(!tmpRules[j].condition.evaluate(tmpParamMap)) continue; @@ -3944,6 +3958,159 @@ let createConfigMenu = () => return menu; } +let createVariableMenu = (variables) => +{ + // Q: Does Object.entries mean that its contents are references, and + // therefore overwritable from afar? + let tmpVars = []; + let varEntries = []; + for(let i = 0; i < variables.length; ++i) + { + // I'm just making sure these are deep copied + tmpVars[i] = []; + tmpVars[i][0] = variables[i][0]; + tmpVars[i][1] = variables[i][1]; + + varEntries.push(ui.createEntry + ({ + row: i, + column: 0, + text: tmpVars[i][0], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpVars[i][0] = nt; + } + })); + varEntries.push(ui.createLatexLabel + ({ + text: '=', + row: i, + column: 1, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + })); + varEntries.push(ui.createEntry + ({ + row: i, + column: 2, + text: tmpVars[i][1], + horizontalTextAlignment: TextAlignment.END, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpVars[i][1] = nt; + } + })); + } + let varsLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelVars'), tmpVars.length), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }); + let varStack = ui.createGrid + ({ + columnDefinitions: ['50*', '20*', '30*'], + children: varEntries + }); + let addVarButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = tmpVars.length; + + tmpVars[i] = []; + tmpVars[i][0] = ''; + tmpVars[i][1] = ''; + + varEntries.push(ui.createEntry + ({ + row: i, + column: 0, + text: tmpVars[i][0], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpVars[i][0] = nt; + } + })); + varEntries.push(ui.createLatexLabel + ({ + text: '=', + row: i, + column: 1, + horizontalTextAlignment: TextAlignment.CENTER, + verticalTextAlignment: TextAlignment.CENTER + })); + varEntries.push(ui.createEntry + ({ + row: i, + column: 2, + text: tmpVars[i][1], + horizontalTextAlignment: TextAlignment.END, + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpVars[i][1] = nt; + } + })); + varsLabel.text = Localization.format(getLoc('labelVars'), + tmpVars.length); + varStack.children = varEntries; + } + }); + let menu = ui.createPopup + ({ + title: getLoc('menuVariables'), + isPeekable: true, + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + varsLabel, + addVarButton + ] + }), + ui.createScrollView + ({ + content: varStack + }), + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createButton + ({ + text: getLoc('btnSave'), + onClicked: () => + { + Sound.playClick(); + // This will telepathically clear the variables outside + variables.length = 0; + for(let i = 0; i < tmpVars.length; ++i) + if(tmpVars[i][0] && tmpVars[i][1]) + variables.push(tmpVars[i]); + menu.hide(); + } + }), + ] + }) + }); + return menu; +} + let createSystemMenu = () => { let values = renderer.system.object; @@ -3959,6 +4126,20 @@ let createSystemMenu = () => tmpAxiom = nt; } }); + let tmpVars = Object.entries(values.variables); + let varButton = ui.createButton + ({ + text: getLoc('btnVar'), + row: 0, + column: 2, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let varMenu = createVariableMenu(tmpVars); + varMenu.show(); + } + }); let tmpRules = values.rules; let ruleEntries = []; let ruleMoveBtns = []; @@ -4151,7 +4332,7 @@ let createSystemMenu = () => [ ui.createGrid ({ - columnDefinitions: ['20*', '80*'], + columnDefinitions: ['20*', '50*', '30*'], children: [ ui.createLatexLabel @@ -4163,6 +4344,7 @@ let createSystemMenu = () => TextAlignment.CENTER }), axiomEntry, + varButton ] }), ui.createGrid @@ -4244,7 +4426,7 @@ let createSystemMenu = () => Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore, tmpCI, - tmpTropism); + tmpTropism, Object.fromEntries(tmpVars)); if(tmpSystem) { tmpSystem = null; @@ -4265,6 +4447,7 @@ let createSystemMenu = () => let values = new LSystem().object; axiomEntry.text = values.axiom; angleEntry.text = values.turnAngle.toString(); + tmpVars = Object.entries(values.variables); tmpRules = values.rules; ruleEntries = []; rulesLabel.text = Localization.format( @@ -4280,7 +4463,7 @@ let createSystemMenu = () => }) ] }) - }) + }); return menu; } @@ -4674,6 +4857,20 @@ let createViewMenu = (title, parentMenu) => tmpAxiom = nt; } }); + let tmpVars = Object.entries(values.variables); + let varButton = ui.createButton + ({ + text: getLoc('btnVar'), + row: 0, + column: 2, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let varMenu = createVariableMenu(tmpVars); + varMenu.show(); + } + }); let tmpRules = []; for(let i = 0; i < values.rules.length; ++i) tmpRules[i] = values.rules[i]; @@ -4876,7 +5073,7 @@ let createViewMenu = (title, parentMenu) => }), ui.createGrid ({ - columnDefinitions: ['20*', '80*'], + columnDefinitions: ['20*', '50*', '30*'], children: [ ui.createLatexLabel @@ -4888,6 +5085,7 @@ let createViewMenu = (title, parentMenu) => TextAlignment.CENTER }), axiomEntry, + varButton ] }), ui.createGrid @@ -5011,7 +5209,7 @@ let createViewMenu = (title, parentMenu) => Sound.playClick(); renderer.constructSystem = new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore, tmpCI, - tmpTropism); + tmpTropism, Object.fromEntries(tmpVars)); tmpSystem = null; renderer.configureStaticCamera(tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright); @@ -5034,7 +5232,8 @@ let createViewMenu = (title, parentMenu) => desc: tmpDesc, system: new LSystem(tmpAxiom, tmpRules, tmpAngle, tmpSeed, tmpIgnore, tmpCI, - tmpTropism).object, + tmpTropism, Object.fromEntries(tmpVars)). + object, config: [tmpZE, tmpCX, tmpCY, tmpCZ, tmpUpright] }); @@ -5857,7 +6056,8 @@ var setInternalState = (stateStr) => tmpSystemDesc = state.system.desc; tmpSystem = new LSystem(state.system.axiom, state.system.rules, state.system.turnAngle, state.system.seed, state.system.ignoreList, - state.system.ctxIgnoreList, state.system.tropism); + state.system.ctxIgnoreList, state.system.tropism, + state.system.variables); } if('renderer' in state) From 1d6536da3ca74b71e15659bce37fc1696b7fd207 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 16:38:48 +0700 Subject: [PATCH 75/94] Added clipboard separation --- TODO.md | 5 +- classic.js | 230 +++++++++++++++++++++++++++++++++--------------- parametric.js | 239 ++++++++++++++++++++++++++++++++++---------------- 3 files changed, 328 insertions(+), 146 deletions(-) diff --git a/TODO.md b/TODO.md index 5ee07dc..2efaac2 100644 --- a/TODO.md +++ b/TODO.md @@ -25,11 +25,12 @@ ## 1.0, Mistletoe ed. -- [ ] Compress internal state? LZW, LZP - - [ ] Or just separate into multiple lines, with an add button +- [ ] Complete new manual ## 1.0: Completed +- [ ] Compress internal state? LZW, LZP + - [x] Or just separate into multiple lines, with an add button - [x] Parametric systems - [x] Input context-ignored symbols - [x] New option in constructor for MathExpression variables diff --git a/classic.js b/classic.js index da04ff7..805a222 100644 --- a/classic.js +++ b/classic.js @@ -4542,24 +4542,61 @@ let createNamingMenu = () => let createSystemClipboardMenu = (values) => { - let tmpSys = values; - let sysEntry = ui.createEntry + let totalLength = 0; + let tmpSys = []; + let sysEntries = []; + for(let i = 0; i * ENTRY_CHAR_LIMIT < values.length; ++i) + { + tmpSys.push(values.slice(i * ENTRY_CHAR_LIMIT, (i + 1) * + ENTRY_CHAR_LIMIT)); + sysEntries.push(ui.createEntry + ({ + text: tmpSys[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpSys[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + } + let lengthLabel = ui.createLatexLabel ({ - text: tmpSys, - clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, - onTextChanged: (ot, nt) => - { - tmpSys = nt; - warningEntry.isVisible = sysEntry.text.length >= ENTRY_CHAR_LIMIT; - } + text: Localization.format(getLoc('labelTotalLength'), totalLength), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) }); - let warningEntry = ui.createLatexLabel + let entryStack = ui.createStackLayout ({ - isVisible: sysEntry.text.length >= ENTRY_CHAR_LIMIT, - text: Localization.format(getLoc('labelEntryCharLimit'), - ENTRY_CHAR_LIMIT), - margin: new Thickness(0, 0, 0, 4), - verticalTextAlignment: TextAlignment.CENTER + children: sysEntries + }); + let addEntryButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = sysEntries.length; + tmpSys[i] = ''; + sysEntries.push(ui.createEntry + ({ + text: tmpSys[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpSys[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + entryStack.children = sysEntries; + } }); let menu = ui.createPopup @@ -4569,20 +4606,28 @@ let createSystemClipboardMenu = (values) => ({ children: [ - sysEntry, + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + lengthLabel, + addEntryButton + ] + }), + entryStack, ui.createBox ({ heightRequest: 1, margin: new Thickness(0, 6) }), - warningEntry, ui.createButton ({ text: getLoc('btnConstruct'), onClicked: () => { Sound.playClick(); - let sv = JSON.parse(tmpSys); + let sv = JSON.parse(tmpSys.join('')); tmpSystemName = sv.title; tmpSystemDesc = sv.desc; renderer.constructSystem = new LSystem(sv.system.axiom, @@ -4601,58 +4646,6 @@ let createSystemClipboardMenu = (values) => return menu; } -let createStateClipboardMenu = (values) => -{ - let tmpState = values; - let sysEntry = ui.createEntry - ({ - text: tmpState, - // clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, - onTextChanged: (ot, nt) => - { - tmpState = nt; - warningEntry.isVisible = sysEntry.text.length >= ENTRY_CHAR_LIMIT; - } - }); - let warningEntry = ui.createLatexLabel - ({ - isVisible: sysEntry.text.length >= ENTRY_CHAR_LIMIT, - text: Localization.format(getLoc('labelEntryCharLimit'), - ENTRY_CHAR_LIMIT), - margin: new Thickness(0, 0, 0, 4), - verticalTextAlignment: TextAlignment.CENTER - }); - - let menu = ui.createPopup - ({ - title: getLoc('menuClipboard'), - content: ui.createStackLayout - ({ - children: - [ - sysEntry, - ui.createBox - ({ - heightRequest: 1, - margin: new Thickness(0, 6) - }), - warningEntry, - ui.createButton - ({ - text: getLoc('btnImport'), - onClicked: () => - { - Sound.playClick(); - setInternalState(tmpState); - menu.hide(); - } - }) - ] - }) - }); - return menu; -} - let createViewMenu = (title, parentMenu) => { let systemObj = savedSystems.get(title); @@ -5631,6 +5624,103 @@ let createSequenceMenu = () => return menu; } +let createStateClipboardMenu = (values) => +{ + let totalLength = 0; + let tmpState = []; + let stateEntries = []; + for(let i = 0; i * ENTRY_CHAR_LIMIT < values.length; ++i) + { + tmpState.push(values.slice(i * ENTRY_CHAR_LIMIT, (i + 1) * + ENTRY_CHAR_LIMIT)); + stateEntries.push(ui.createEntry + ({ + text: tmpState[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpState[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + } + let lengthLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelTotalLength'), totalLength), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }); + let entryStack = ui.createStackLayout + ({ + children: stateEntries + }); + let addEntryButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = stateEntries.length; + tmpState[i] = ''; + stateEntries.push(ui.createEntry + ({ + text: tmpState[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpState[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + entryStack.children = stateEntries; + } + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuClipboard'), + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + lengthLabel, + addEntryButton + ] + }), + entryStack, + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createButton + ({ + text: getLoc('btnImport'), + onClicked: () => + { + Sound.playClick(); + setInternalState(tmpState.join('')); + menu.hide(); + } + }) + ] + }) + }); + return menu; +} + let createWorldMenu = () => { let tmpOD = offlineReset; diff --git a/parametric.js b/parametric.js index a426643..11ec8d1 100644 --- a/parametric.js +++ b/parametric.js @@ -237,6 +237,7 @@ const locStrings = labelApplyCamera: 'Applies static camera: ', menuClipboard: 'Clipboard Menu', + labelTotalLength: 'Total length: {0}', labelEntryCharLimit: `Warning: This entry has been capped at {0} ` + `characters. Proceed with caution.`, @@ -412,8 +413,8 @@ Example including context: A(x) < B(y) > C(z) : x+y+z>10 = E((x+y)/2)F((y+z)/2) Note: All arithmetic processing in parameters is done using the game's ` + -`MathExpression class (just like the formulae for Auto-prestige/supremacy). -As such, there are several unavailable expressions: +`MathExpression class (just like the formulae for Auto-prestige/supremacy). ` + +`As such, there are several unavailable expressions: % (modulus) == (equality) true, false (keywords) @@ -4068,7 +4069,6 @@ let createVariableMenu = (variables) => let menu = ui.createPopup ({ title: getLoc('menuVariables'), - isPeekable: true, content: ui.createStackLayout ({ children: @@ -4634,24 +4634,61 @@ let createNamingMenu = () => let createSystemClipboardMenu = (values) => { - let tmpSys = values; - let sysEntry = ui.createEntry + let totalLength = 0; + let tmpSys = []; + let sysEntries = []; + for(let i = 0; i * ENTRY_CHAR_LIMIT < values.length; ++i) + { + tmpSys.push(values.slice(i * ENTRY_CHAR_LIMIT, (i + 1) * + ENTRY_CHAR_LIMIT)); + sysEntries.push(ui.createEntry + ({ + text: tmpSys[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpSys[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + } + let lengthLabel = ui.createLatexLabel ({ - text: tmpSys, - clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, - onTextChanged: (ot, nt) => - { - tmpSys = nt; - warningEntry.isVisible = sysEntry.text.length >= ENTRY_CHAR_LIMIT; - } + text: Localization.format(getLoc('labelTotalLength'), totalLength), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) }); - let warningEntry = ui.createLatexLabel + let entryStack = ui.createStackLayout ({ - isVisible: sysEntry.text.length >= ENTRY_CHAR_LIMIT, - text: Localization.format(getLoc('labelEntryCharLimit'), - ENTRY_CHAR_LIMIT), - margin: new Thickness(0, 0, 0, 4), - verticalTextAlignment: TextAlignment.CENTER + children: sysEntries + }); + let addEntryButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = sysEntries.length; + tmpSys[i] = ''; + sysEntries.push(ui.createEntry + ({ + text: tmpSys[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpSys[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + entryStack.children = sysEntries; + } }); let menu = ui.createPopup @@ -4661,26 +4698,35 @@ let createSystemClipboardMenu = (values) => ({ children: [ - sysEntry, + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + lengthLabel, + addEntryButton + ] + }), + entryStack, ui.createBox ({ heightRequest: 1, margin: new Thickness(0, 6) }), - warningEntry, ui.createButton ({ text: getLoc('btnConstruct'), onClicked: () => { Sound.playClick(); - let sv = JSON.parse(tmpSys); + let sv = JSON.parse(tmpSys.join('')); tmpSystemName = sv.title; tmpSystemDesc = sv.desc; renderer.constructSystem = new LSystem(sv.system.axiom, sv.system.rules, sv.system.turnAngle, sv.system.seed, sv.system.ignoreList, - sv.system.ctxIgnoreList, sv.system.tropism); + sv.system.ctxIgnoreList, sv.system.tropism, + sv.system.variables); tmpSystem = null; if('config' in sv) renderer.configureStaticCamera(...sv.config); @@ -4693,58 +4739,6 @@ let createSystemClipboardMenu = (values) => return menu; } -let createStateClipboardMenu = (values) => -{ - let tmpState = values; - let sysEntry = ui.createEntry - ({ - text: tmpState, - // clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, - onTextChanged: (ot, nt) => - { - tmpState = nt; - warningEntry.isVisible = sysEntry.text.length >= ENTRY_CHAR_LIMIT; - } - }); - let warningEntry = ui.createLatexLabel - ({ - isVisible: sysEntry.text.length >= ENTRY_CHAR_LIMIT, - text: Localization.format(getLoc('labelEntryCharLimit'), - ENTRY_CHAR_LIMIT), - margin: new Thickness(0, 0, 0, 4), - verticalTextAlignment: TextAlignment.CENTER - }); - - let menu = ui.createPopup - ({ - title: getLoc('menuClipboard'), - content: ui.createStackLayout - ({ - children: - [ - sysEntry, - ui.createBox - ({ - heightRequest: 1, - margin: new Thickness(0, 6) - }), - warningEntry, - ui.createButton - ({ - text: getLoc('btnImport'), - onClicked: () => - { - Sound.playClick(); - setInternalState(tmpState); - menu.hide(); - } - }) - ] - }) - }); - return menu; -} - let createViewMenu = (title, parentMenu) => { let systemObj = savedSystems.get(title); @@ -5762,6 +5756,103 @@ let createSequenceMenu = () => return menu; } +let createStateClipboardMenu = (values) => +{ + let totalLength = 0; + let tmpState = []; + let stateEntries = []; + for(let i = 0; i * ENTRY_CHAR_LIMIT < values.length; ++i) + { + tmpState.push(values.slice(i * ENTRY_CHAR_LIMIT, (i + 1) * + ENTRY_CHAR_LIMIT)); + stateEntries.push(ui.createEntry + ({ + text: tmpState[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpState[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + } + let lengthLabel = ui.createLatexLabel + ({ + text: Localization.format(getLoc('labelTotalLength'), totalLength), + verticalTextAlignment: TextAlignment.CENTER, + margin: new Thickness(0, 12) + }); + let entryStack = ui.createStackLayout + ({ + children: stateEntries + }); + let addEntryButton = ui.createButton + ({ + text: getLoc('btnAdd'), + row: 0, + column: 1, + heightRequest: SMALL_BUTTON_HEIGHT, + onClicked: () => + { + Sound.playClick(); + let i = stateEntries.length; + tmpState[i] = ''; + stateEntries.push(ui.createEntry + ({ + text: tmpState[i], + clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, + onTextChanged: (ot, nt) => + { + tmpState[i] = nt; + totalLength += (nt ? nt.length : 0) - (ot ? ot.length : 0); + lengthLabel.text = Localization.format(getLoc( + 'labelTotalLength'), totalLength); + } + })); + entryStack.children = stateEntries; + } + }); + + let menu = ui.createPopup + ({ + title: getLoc('menuClipboard'), + content: ui.createStackLayout + ({ + children: + [ + ui.createGrid + ({ + columnDefinitions: ['70*', '30*'], + children: + [ + lengthLabel, + addEntryButton + ] + }), + entryStack, + ui.createBox + ({ + heightRequest: 1, + margin: new Thickness(0, 6) + }), + ui.createButton + ({ + text: getLoc('btnImport'), + onClicked: () => + { + Sound.playClick(); + setInternalState(tmpState.join('')); + menu.hide(); + } + }) + ] + }) + }); + return menu; +} + let createWorldMenu = () => { let tmpOD = offlineReset; From ab43bc177987d0c6a8df08b9b76411497ad561b3 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 20:52:45 +0700 Subject: [PATCH 76/94] Reworked workload system for ancestree and derive --- TODO.md | 4 + parametric.js | 225 +++++++++++++++++++++++++++++++------------------- 2 files changed, 142 insertions(+), 87 deletions(-) diff --git a/TODO.md b/TODO.md index 2efaac2..5487a1f 100644 --- a/TODO.md +++ b/TODO.md @@ -26,6 +26,10 @@ ## 1.0, Mistletoe ed. - [ ] Complete new manual +- [x] Split workload for ancestree (AND for derive too if this works well) + - [ ] Apply split technique to sequence menu + - [ ] And collatz? +- [ ] Separate update measurer from draw ## 1.0: Completed diff --git a/parametric.js b/parametric.js index 11ec8d1..73730f8 100644 --- a/parametric.js +++ b/parametric.js @@ -68,7 +68,7 @@ let resetLvlOnConstruct = true; let measurePerformance = false; let debugCamPath = false; let normaliseQuaternions = false; -let maxCharsPerTick = 1250; +let maxCharsPerTick = 250; let menuLang = Localization.language; let savedSystems = new Map(); @@ -1095,59 +1095,70 @@ class LSystem * @param {string} sequence the sequence. * @returns {object} */ - getAncestree(sequence) + getAncestree(sequence, task = {}) { // Scanning behaviour should be very similar to renderer drawing. - let stack = []; - let idxStack = []; - let ancestors = []; - let children = []; - let i; // Piece of shit Javascript doesn't let me put the let in the - // for loop normally. - for(i = 0; i < sequence.length; ++i) + let tmpStack = task.stack || []; + let tmpIdxStack = task.idxStack || []; + let tmpAncestors = task.ancestors || []; + let tmpChildren = task.children || []; + let i = task.next || 0; + for(; i < sequence.length; ++i) { + if(i - task.next > maxCharsPerTick) + { + return { + next: i, + stack: tmpStack, + idxStack: tmpIdxStack, + ancestors: tmpAncestors, + children: tmpChildren + }; + } switch(sequence[i]) { case ' ': log('Blank space detected.') break; case '[': - idxStack.push(stack.length); + tmpIdxStack.push(tmpStack.length); break; case ']': - if(stack.length == 0) + if(tmpStack.length == 0) { log('You\'ve clearly made a bracket error.'); break; } - while(stack.length > idxStack[idxStack.length - 1]) - stack.pop(); + while(tmpStack.length > tmpIdxStack[tmpIdxStack.length - 1]) + tmpStack.pop(); - idxStack.pop(); + tmpIdxStack.pop(); break; default: let ignored = this.ctxIgnoreList.has(sequence[i]); if(ignored) break; - if(stack.length > 0) + if(tmpStack.length > 0) { - let ancIdx = stack[stack.length - 1]; - ancestors[i] = ancIdx; - if(typeof children[ancIdx] === 'undefined') - children[ancIdx] = []; - children[ancIdx].push(i); + let ancIdx = tmpStack[tmpStack.length - 1]; + tmpAncestors[i] = ancIdx; + if(typeof tmpChildren[ancIdx] === 'undefined') + tmpChildren[ancIdx] = []; + tmpChildren[ancIdx].push(i); } - stack.push(i); + tmpStack.push(i); break; } } return { - ancestors: ancestors, - children: children + next: 0, + stack: tmpStack, + idxStack: tmpIdxStack, + ancestors: tmpAncestors, + children: tmpChildren }; - // Tested this out on Chrome console, it worked. } /** @@ -1157,22 +1168,23 @@ class LSystem * @param {string} sequence the input string. * @returns {{next: number, result: string}} */ - derive(sequence, seqParams, ancestors, children, start = 0) + derive(sequence, seqParams, ancestors, children, task = {}) { - let result = ''; - let resultParams = []; - for(let i = start; i < sequence.length; ++i) + let result = task.derivation || ''; + let resultParams = task.parameters || []; + let i = task.next || 0; + let charCount = 0; + for(; i < sequence.length; ++i) { - if(result.length > maxCharsPerTick) + if(charCount > maxCharsPerTick) { return { next: i, - result: result, - params: resultParams + charCount: charCount, + derivation: result, + parameters: resultParams }; } - let deriv; - let derivParams = null; if(sequence[i] == '%') { let branchLvl = 0; @@ -1191,7 +1203,11 @@ class LSystem break; } if(sequence[i] == ']') - deriv = sequence[i]; + { + result += sequence[i]; + ++charCount; + resultParams.push(null); + } else continue; } @@ -1236,10 +1252,10 @@ class LSystem if(typeof tmpRules[j].derivations === 'string') { - deriv = tmpRules[j].derivations; + result += tmpRules[j].derivations; + charCount += tmpRules[j].derivations.length; if(tmpRules[j].parameters) { - derivParams = []; for(let k = 0; k < tmpRules[j].parameters.length; ++k) { @@ -1259,7 +1275,7 @@ class LSystem } } } - derivParams.push(derivPi); + resultParams.push(derivPi); } } ruleChoice = j; @@ -1283,10 +1299,10 @@ class LSystem if(chanceSum > roll) // select this { choice = k; - deriv = tmpRules[j].derivations[k]; + result += tmpRules[j].derivations[k]; + charCount += tmpRules[j].derivations[k].length; if(tmpRules[j].parameters[k]) { - derivParams = []; for(let l = 0; l < tmpRules[j]. parameters[k].length; ++l) { @@ -1307,7 +1323,7 @@ class LSystem } } } - derivParams.push(derivPi); + resultParams.push(derivPi); } } break; @@ -1322,26 +1338,23 @@ class LSystem } if(ruleChoice == -1) { - deriv = sequence[i]; - derivParams = [seqParams[i]]; + result += sequence[i]; + ++charCount; + resultParams.push(...[seqParams[i]]); } } else { - deriv = sequence[i]; - derivParams = [seqParams[i]]; + result += sequence[i]; + ++charCount; + resultParams.push(...[seqParams[i]]); } - - result += deriv; - if(derivParams) - resultParams.push(...derivParams); - else - resultParams.push(derivParams); } return { next: 0, - result: result, - params: resultParams + charCount: charCount, + derivation: result, + parameters: resultParams }; } @@ -1655,9 +1668,6 @@ class Renderer */ this.levels = []; this.levelParams = []; - // Only stores one level, temporari - this.ancestors = null; - this.children = null; /** * @type {number} the current level (updates after buying the variable). */ @@ -1709,9 +1719,19 @@ class Renderer */ this.lastCamVel = new Vector3(0, 0, 0); /** - * @type {number} the next index to update for the current level. + * @type {object} the current ancestree task. + */ + this.ancestreeTask = + { + next: 0 + }; + /** + * @type {object} the current derivation task. */ - this.nextDeriveIdx = 0; + this.deriveTask = + { + next: 0 + }; /** * @type {number} how many nested polygons currently in (pls keep at 1). */ @@ -1752,44 +1772,57 @@ class Renderer if(charCount > maxCharsPerTick) return; - if(i == 0) + if(i == 0 && !('derivation' in this.deriveTask)) { - this.levels[i] = this.system.axiom; - this.levelParams[i] = this.system.axiomParams; - charCount += this.levels[i].length; - this.nextDeriveIdx = 0; + this.deriveTask = + { + next: 0, + derivation: this.system.axiom, + parameters: this.system.axiomParams + }; + charCount += this.system.axiom.length; } else { - if(!this.ancestors) - { - let at = this.system.getAncestree(this.levels[i - 1]); - this.ancestors = at.ancestors; - this.children = at.children; - charCount += this.ancestors.length; - } - let ret = this.system.derive(this.levels[i - 1], - this.levelParams[i - 1], this.ancestors, this.children, - this.nextDeriveIdx); - if(this.nextDeriveIdx == 0) + // If no ancestor (next is obviously 0): do work + // If no ancestor and next isn't 0: panik + // If has ancestor and next is 0: move to derive work + // If has ancestor and next isn't 0: do work + + while(!('ancestors' in this.ancestreeTask) || + ('ancestors' in this.ancestreeTask && this.ancestreeTask.next)) { - this.levels[i] = ret.result; - this.levelParams[i] = ret.params; + let at = this.system.getAncestree(this.levels[i - 1], + this.ancestreeTask); + charCount += (at.next - this.ancestreeTask.next); + this.ancestreeTask = at; + if(charCount > maxCharsPerTick) + return; } - else + // TODO: convert derivation to new tasking model + if(!('derivation' in this.deriveTask) || + ('derivation' in this.deriveTask && this.deriveTask.next)) { - this.levels[i] += ret.result; - this.levelParams[i].push(...ret.params); + let ret = this.system.derive(this.levels[i - 1], + this.levelParams[i - 1], this.ancestreeTask.ancestors, + this.ancestreeTask.children, this.deriveTask); + charCount += ret.charCount; + this.deriveTask = ret; } - - this.nextDeriveIdx = ret.next; - charCount += ret.result.length; } - if(this.nextDeriveIdx == 0) + this.levels[i] = this.deriveTask.derivation; + this.levelParams[i] = this.deriveTask.parameters; + if(!this.deriveTask.next) { ++this.loaded; - this.ancestors = null; - this.children = null; + this.ancestreeTask = + { + next: 0 + }; + this.deriveTask = + { + next: 0 + }; } else return; @@ -1929,7 +1962,14 @@ class Renderer this.system = system; this.levels = []; this.levelParams = []; - this.nextDeriveIdx = 0; + this.ancestreeTask = + { + next: 0 + }; + this.deriveTask = + { + next: 0 + }; this.loaded = -1; this.loadTarget = 0; if(resetLvlOnConstruct) @@ -1943,7 +1983,14 @@ class Renderer set seed(seed) { this.system.seed = seed; - this.nextDeriveIdx = 0; + this.ancestreeTask = + { + next: 0 + }; + this.deriveTask = + { + next: 0 + }; this.loaded = -1; this.loadTarget = this.lv; this.update(this.lv, true); @@ -3019,7 +3066,11 @@ class Measurer this.records[i] = closingStamp - this.lastStamp; this.windowSum += this.records[i]; this.sum += this.records[i]; - this.max = Math.max(this.max, this.records[i]); + if(this.records[i] > this.max) + { + this.max = this.records[i]; + // log(`Boom! ${this.title} took ${this.records[i]}ms.`) + } this.lastStamp = null; ++this.ticksPassed; } From 65a201313e3d9eec492f493f459a54d51fb50047 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 23:05:50 +0700 Subject: [PATCH 77/94] Applied workload technique to sequence menu --- TODO.md | 6 ++-- parametric.js | 85 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/TODO.md b/TODO.md index 5487a1f..6413c8e 100644 --- a/TODO.md +++ b/TODO.md @@ -26,13 +26,11 @@ ## 1.0, Mistletoe ed. - [ ] Complete new manual -- [x] Split workload for ancestree (AND for derive too if this works well) - - [ ] Apply split technique to sequence menu - - [ ] And collatz? -- [ ] Separate update measurer from draw ## 1.0: Completed +- [x] Split workload for ancestree (AND for derive too if this works well) + - [x] Apply split technique to sequence menu - [ ] Compress internal state? LZW, LZP - [x] Or just separate into multiple lines, with an add button - [x] Parametric systems diff --git a/parametric.js b/parametric.js index 73730f8..0d78f0c 100644 --- a/parametric.js +++ b/parametric.js @@ -1102,13 +1102,13 @@ class LSystem let tmpIdxStack = task.idxStack || []; let tmpAncestors = task.ancestors || []; let tmpChildren = task.children || []; - let i = task.next || 0; + let i = task.start || 0; for(; i < sequence.length; ++i) { - if(i - task.next > maxCharsPerTick) + if(i - task.start > maxCharsPerTick) { return { - next: i, + start: i, stack: tmpStack, idxStack: tmpIdxStack, ancestors: tmpAncestors, @@ -1153,7 +1153,7 @@ class LSystem } } return { - next: 0, + start: 0, stack: tmpStack, idxStack: tmpIdxStack, ancestors: tmpAncestors, @@ -1166,20 +1166,20 @@ class LSystem * position to be derived next tick. `result` contains the work completed * for the current tick. * @param {string} sequence the input string. - * @returns {{next: number, result: string}} + * @returns {{start: number, result: string}} */ derive(sequence, seqParams, ancestors, children, task = {}) { let result = task.derivation || ''; let resultParams = task.parameters || []; - let i = task.next || 0; + let i = task.start || 0; let charCount = 0; for(; i < sequence.length; ++i) { if(charCount > maxCharsPerTick) { return { - next: i, + start: i, charCount: charCount, derivation: result, parameters: resultParams @@ -1351,7 +1351,7 @@ class LSystem } } return { - next: 0, + start: 0, charCount: charCount, derivation: result, parameters: resultParams @@ -1471,16 +1471,27 @@ class LSystem }; } - reconstruct(sequence, params) + reconstruct(sequence, params, task = {}) { - let result = ''; - for(let i = 0; i < sequence.length; ++i) + let result = task.result || ''; + let i = task.start || 0; + for(; i < sequence.length; ++i) { + if((i - task.start) * (task.start + 1) > maxCharsPerTick) + { + return { + start: i, + result: result + } + } result += sequence[i]; if(params[i]) result += `(${params[i].join(', ')})`; } - return result; + return { + start: 0, + result: result + }; } /** * Purge the rules of empty lines. @@ -1723,14 +1734,14 @@ class Renderer */ this.ancestreeTask = { - next: 0 + start: 0 }; /** * @type {object} the current derivation task. */ this.deriveTask = { - next: 0 + start: 0 }; /** * @type {number} how many nested polygons currently in (pls keep at 1). @@ -1776,7 +1787,7 @@ class Renderer { this.deriveTask = { - next: 0, + start: 0, derivation: this.system.axiom, parameters: this.system.axiomParams }; @@ -1790,18 +1801,18 @@ class Renderer // If has ancestor and next isn't 0: do work while(!('ancestors' in this.ancestreeTask) || - ('ancestors' in this.ancestreeTask && this.ancestreeTask.next)) + ('ancestors' in this.ancestreeTask && this.ancestreeTask.start)) { let at = this.system.getAncestree(this.levels[i - 1], this.ancestreeTask); - charCount += (at.next - this.ancestreeTask.next); + charCount += (at.start - this.ancestreeTask.start); this.ancestreeTask = at; if(charCount > maxCharsPerTick) return; } // TODO: convert derivation to new tasking model if(!('derivation' in this.deriveTask) || - ('derivation' in this.deriveTask && this.deriveTask.next)) + ('derivation' in this.deriveTask && this.deriveTask.start)) { let ret = this.system.derive(this.levels[i - 1], this.levelParams[i - 1], this.ancestreeTask.ancestors, @@ -1812,16 +1823,16 @@ class Renderer } this.levels[i] = this.deriveTask.derivation; this.levelParams[i] = this.deriveTask.parameters; - if(!this.deriveTask.next) + if(!this.deriveTask.start) { ++this.loaded; this.ancestreeTask = { - next: 0 + start: 0 }; this.deriveTask = { - next: 0 + start: 0 }; } else @@ -1964,11 +1975,11 @@ class Renderer this.levelParams = []; this.ancestreeTask = { - next: 0 + start: 0 }; this.deriveTask = { - next: 0 + start: 0 }; this.loaded = -1; this.loadTarget = 0; @@ -1985,11 +1996,11 @@ class Renderer this.system.seed = seed; this.ancestreeTask = { - next: 0 + start: 0 }; this.deriveTask = { - next: 0 + start: 0 }; this.loaded = -1; this.loadTarget = this.lv; @@ -5656,6 +5667,21 @@ let createManualMenu = () => let createSeqViewMenu = (level) => { + let reconstructionTask = + { + start: 0 + }; + let updateReconstruction = () => + { + if(!('result' in reconstructionTask) || + ('result' in reconstructionTask && reconstructionTask.start)) + { + reconstructionTask = renderer.system.reconstruct( + renderer.levels[level], renderer.levelParams[level], + reconstructionTask); + } + return reconstructionTask.result; + } let pageTitle = ui.createLatexLabel ({ text: Localization.format(getLoc('labelLevelSeq'), level, @@ -5669,8 +5695,7 @@ let createSeqViewMenu = (level) => ({ fontFamily: FontFamily.CMU_REGULAR, fontSize: 16, - text: renderer.system.reconstruct(renderer.levels[level], - renderer.levelParams[level]), + text: () => updateReconstruction(), lineBreakMode: LineBreakMode.CHARACTER_WRAP }); let prevButton = ui.createButton @@ -5704,8 +5729,10 @@ let createSeqViewMenu = (level) => level = p; pageTitle.text = Localization.format(getLoc('labelLevelSeq'), level, renderer.levels[level].length); - pageContents.text = renderer.system.reconstruct(renderer.levels[level], - renderer.levelParams[level]); + reconstructionTask = + { + start: 0 + }; prevButton.isVisible = level > 0; nextButton.isVisible = level < renderer.levels.length - 1; From 95b3994b1aae8ca2da00460fb2a13bd744275731 Mon Sep 17 00:00:00 2001 From: Minh Date: Thu, 2 Mar 2023 23:42:31 +0700 Subject: [PATCH 78/94] Added separate loading message for ancestree --- parametric.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/parametric.js b/parametric.js index 0d78f0c..f5f5bc8 100644 --- a/parametric.js +++ b/parametric.js @@ -141,7 +141,9 @@ const locStrings = equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', equationOverlay: '{0}\n\n{1}', - rendererLoading: `\\begin{{matrix}}Loading...&\\text{{Stg. {0}}}&({1} + rendererBuildingTree: `\\begin{{matrix}}Building\\enspace ancestree...& + \\text{{Stg. {0}}}&({1}\\text{{ chars}})\\end{{matrix}}`, + rendererDeriving: `\\begin{{matrix}}Deriving...&\\text{{Stg. {0}}}&({1} \\text{{ chars}})\\end{{matrix}}`, currencyTime: ' (elapsed)', @@ -196,6 +198,7 @@ const locStrings = menuSequence: '{0} (Stage {1})', labelLevelSeq: 'Stage {0}: {1} chars', + labelLevelSeqLoading: 'Stage {0}: {1}/{2} chars', labelChars: '({0} chars)', menuLSystem: 'L-system Menu', @@ -2675,10 +2678,11 @@ class Renderer */ get loadingString() { - let len = typeof this.levels[this.loaded + 1] === 'undefined' ? 0 : - this.levels[this.loaded + 1].length; - return Localization.format(getLoc('rendererLoading'), this.loaded + 1, - len); + if(typeof this.levels[this.loaded + 1] === 'undefined') + return Localization.format(getLoc('rendererBuildingTree'), + this.loaded + 1, this.ancestreeTask.start); + return Localization.format(getLoc('rendererDeriving'), this.loaded + 1, + this.levels[this.loaded + 1].length); } /** * Returns the cursor's position as a string. From 6c4d1dcc77e11170ec4158950167b97f581fa72b Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 00:08:09 +0700 Subject: [PATCH 79/94] Fixed Classic crash when clearing all in LS menu --- classic.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/classic.js b/classic.js index 805a222..219f068 100644 --- a/classic.js +++ b/classic.js @@ -241,6 +241,7 @@ const locStrings = labelApplyCamera: 'Applies static camera: ', menuClipboard: 'Clipboard Menu', + labelTotalLength: 'Total length: {0}', labelEntryCharLimit: `Warning: This entry has been capped at {0} ` + `characters. Proceed with caution.`, @@ -4356,14 +4357,14 @@ let createSystemMenu = () => Sound.playClick(); let values = new LSystem().object; axiomEntry.text = values.axiom; - angleEntry.text = values.turnAngle; + angleEntry.text = values.turnAngle.toString(); tmpRules = values.rules; ruleEntries = []; rulesLabel.text = Localization.format( getLoc('labelRules'), ruleEntries.length); ruleStack.children = ruleEntries; ignoreEntry.text = values.ignoreList; - tropismEntry.text = values.tropism; + tropismEntry.text = values.tropism.toString(); seedEntry.text = values.seed.toString(); } }) From 8e03b9b69189a00afc6f1e006f402026a5b843c5 Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 00:48:01 +0700 Subject: [PATCH 80/94] Fixed derivation separation splitting parameters --- TODO.md | 2 ++ parametric.js | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 6413c8e..1b2ff79 100644 --- a/TODO.md +++ b/TODO.md @@ -29,6 +29,8 @@ ## 1.0: Completed +- [x] Issue: multiple parameters not working at all + - Cause: splitting commas -> Solution: semi-colons - [x] Split workload for ancestree (AND for derive too if this works well) - [x] Apply split technique to sequence menu - [ ] Compress internal state? LZW, LZP diff --git a/parametric.js b/parametric.js index f5f5bc8..3a5b087 100644 --- a/parametric.js +++ b/parametric.js @@ -291,7 +291,10 @@ This is different from how it was defined in The Algorithmic Beauty of ` + `Plants, where rules with a context are prioritised. Therefore, arrange your ` + `rules accordingly. -Declaring models now has a different syntax to align more with ` + +The syntax for multiple derivations on the same line has also changed from , ` + +`(comma) to ; (semi-colon), due to the introduction of parameters. + +Finally, declaring models now has a different syntax to align more with ` + `context-sensitivity: ~ > {symbol} = {model} Referencing a model in another rule still uses the old syntax: @@ -407,7 +410,7 @@ Centre: (1/2, sqrt(3)/12, 0)` `symbols to hold additional information such as its state of growth, elapsed ` + `time, etc. They can be even peeked at in context rules! The syntax for a parametric rule goes as follows: -{symbol}({param_0},...) : {condition*} = {derivation_0} : {probability**},... +{symbol}({param_0},...) : {condition*} = {derivation_0} : {probability**} ;... Examples: I(t) : t>0 = FI(t-1) @@ -951,7 +954,8 @@ class LSystem tmpRule.condition = MathExpression.parse('1'); // [i][4]: everything else - let tmpRuleMatches = ruleMatches[i][4].split(','); + // Doing just comma instead of semi-colon will ruin the parameters! + let tmpRuleMatches = ruleMatches[i][4].split(';'); for(let j = 0; j < tmpRuleMatches.length; ++j) { if(typeof tmpRuleMatches[j] === 'undefined') From 919b704e670c1cd8acff0196ea8d5fd42477f4d1 Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 16:07:41 +0700 Subject: [PATCH 81/94] Added model discussion into manual --- classic.js | 9 ++++++--- parametric.js | 44 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/classic.js b/classic.js index 219f068..211ea85 100644 --- a/classic.js +++ b/classic.js @@ -143,7 +143,7 @@ const locStrings = { en: { - versionName: 'v1.0, Work in Progress', + versionName: 'v1.0', welcomeSystemName: 'Arrow', welcomeSystemDesc: 'Welcome to L-systems Renderer!', equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', @@ -698,8 +698,11 @@ To reference a model in another rule, attach a tilde in front of the symbol ` + Note: The symbol will not disappear from the rule after the model has been ` + `drawn, but it will be ignored by the turtle. -Note 2: The model only lasts for one level, and needs to be refreshed ` + -`(example follows in the next page).` +Note 2: Unlike the incorporated surfaces described in the Algorithmic Beauty ` + +`of Plants, models in LSR work differently. The model symbol in LSR only ` + +`lasts for one level (and disappears afterwards), and thus, models need to ` + +`be continuously refreshed. +(Example follows in the next page)` }, { title: 'Example: Lilac branch', diff --git a/parametric.js b/parametric.js index 3a5b087..64c7e46 100644 --- a/parametric.js +++ b/parametric.js @@ -135,7 +135,7 @@ const locStrings = { en: { - versionName: 'v1.0, Mistletoe ed. (WIP)', + versionName: 'v1.0, Mistletoe ed.', welcomeSystemName: 'Arrow', welcomeSystemDesc: 'Welcome to L-systems Renderer!', equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', @@ -429,6 +429,48 @@ Conversion from boolean to number is also unavailable. * When omitted, the condition is assumed to be always true. ** When omitted, the chance is assumed to be 100%.` + }, + { + title: 'Example: ', + contents: +`` + }, + { + title: 'Appendix: Model discussions', + contents: +`About the differences between LSR models (which disappear after one stage) ` + +`and The Algorithmic Beauty of Plants (which stick around). +The motive behind this mechanism in LSR, is that when a symbol moves to ` + +`another place, the original ~ (tilde) ends up referencing another symbol ` + +`entirely, which both wastes one space and can introduce errors by drawing ` + +`the wrong model. +This design choice is not final, and if feedback can prove its ` + +`inconvenience, further considerations can be made: should it stick around ` + +`like defined in Abop? Should references be ditched entirely and models be ` + +`drawn automatically without having to reference? Will the syntax cease to ` + +`make sense?` + }, + { + title: 'Appendix: Credits', + contents: +`First of all, a biggest thanks goes out to Sir Gilles-Philippe Paillé of ` + +`Conic Games. Without his work on the game Exponential Idle, the foundation ` + +`for this theory, perhaps I would have never found myself writing this page ` + +`today. He, along with the people in the #custom-theories-dev channel, has ` + +`also helped me with numerous problems of custom theories (CT) development. +If by any chance you have not yet tried this game, I highly recommend it. ` + +`The download link is provided at the bottom of this page.`, + source: 'https://conicgames.github.io/exponentialidle' + }, + { + title: 'Credits (2)', + contents: +`The other massive thanks goes to Algorithmic Botany, the research team that ` + +`has been expanding Lindenmayer's work on L-systems. The site also hosts the ` + +`book 'The Algorithmic Beauty of Plants', which has been the primary source ` + +`of reference in the development of LSR, including the various syntax and ` + +`processing rules, as well as explanations to the scientific motives behind ` + +`the design of L-systems. ` } ] } From 719d88c12d4f628c132694276c9f7147a1d03798 Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 16:45:24 +0700 Subject: [PATCH 82/94] Fixed false conditions not working --- parametric.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/parametric.js b/parametric.js index 64c7e46..faabe7c 100644 --- a/parametric.js +++ b/parametric.js @@ -1296,7 +1296,8 @@ class LSystem tmpRules[j].paramMap(v, seqParams[ancestors[i]], seqParams[i], seqParams[right]); // Next up is the condition - if(!tmpRules[j].condition.evaluate(tmpParamMap)) + if(tmpRules[j].condition.evaluate(tmpParamMap) == + BigNumber.ZERO) continue; if(typeof tmpRules[j].derivations === 'string') @@ -1420,7 +1421,8 @@ class LSystem let tmpParamMap = (v) => this.variables.get(v) || tmpRules[j].paramMap(v, null, null, params); // Next up is the condition - if(!tmpRules[j].condition.evaluate(tmpParamMap)) + if(tmpRules[j].condition.evaluate(tmpParamMap) == + BigNumber.ZERO) continue; if(typeof tmpRules[j].derivations === 'string') From 223ef765f8694ff9a2817c83175849bde2c5b2cd Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 18:13:29 +0700 Subject: [PATCH 83/94] Added 4-argument tropism --- parametric.js | 53 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/parametric.js b/parametric.js index faabe7c..b461b2a 100644 --- a/parametric.js +++ b/parametric.js @@ -382,9 +382,10 @@ Then, a solution to that would be the ability to embed extra information ` + `parametric L-systems. F(d): moves turtle forward by a distance d, and draw a line. -(Note: other letters don't follow this syntax, and always move by 1.) +(Note: other letters move by 1 instead of taking the parameter.) +-&^\\/(a): rotate turtle by an angle of a degrees. -T(g): applies a tropism force of g.` +T(g): applies a tropism force of g. +T(g, x, y, z): applies a tropism of g in the direction (x, y, z).` }, { title: 'Example: The Koch curve', @@ -766,7 +767,7 @@ class Quaternion } /** * https://stackoverflow.com/questions/71518531/how-do-i-convert-a-direction-vector-to-a-quaternion - * (Deprecated) Applies a gravi-tropism vector to the quaternion. Inaccurat! + * (Deprecated) Applies a gravi-tropism vector to the quaternion. * @param {number} weight the vector's length (negative for upwards). * @returns {Quaternion} */ @@ -787,16 +788,23 @@ class Quaternion /** * Applies a gravi-tropism vector to the quaternion. * @param {number} weight the branch's susceptibility to bending. + * @param {number} x the tropism vector's x component. + * @param {number} y the tropism vector's y component. + * @param {number} z the tropism vector's z component. * @returns {Quaternion} */ - applyTropism(weight = 0) + applyTropism(weight = 0, x = 0, y = -1, z = 0) { if(weight == 0) return this; // a = e * |HxT| (n) let curHead = this.headingVector; - let rotAxis = new Vector3(curHead.z, 0, -curHead.x); + let rotAxis = new Vector3( + curHead.y * z - curHead.z * y, + curHead.z * x - curHead.x * z, + curHead.x * y - curHead.y * x, + ); let n = rotAxis.length; if(n == 0) return this; @@ -2208,11 +2216,20 @@ class Renderer this.ori = this.ori.alignToVertical(); break; case 'T': - if(this.modelParams[this.models.length - 1][ - this.mdi[this.mdi.length - 1]]) - this.ori = this.ori.applyTropism( - this.modelParams[this.models.length - 1][ - this.mdi[this.mdi.length - 1]][0].toNumber()); + let args = this.modelParams[this.models.length - 1][ + this.mdi[this.mdi.length - 1]]; + if(args) + { + if(args.length >= 4) + this.ori = this.ori.applyTropism( + args[0].toNumber(), + args[1].toNumber(), + args[2].toNumber(), + args[3].toNumber()); + else + this.ori = this.ori.applyTropism( + args[0].toNumber()); + } else this.ori = this.ori.applyTropism( this.system.tropism); @@ -2431,9 +2448,19 @@ class Renderer this.ori = this.ori.alignToVertical(); break; case 'T': - if(this.levelParams[this.lv][this.i]) - this.ori = this.ori.applyTropism(this.levelParams[ - this.lv][this.i][0].toNumber()); + let args = this.levelParams[this.lv][this.i]; + if(args) + { + if(args.length >= 4) + this.ori = this.ori.applyTropism( + args[0].toNumber(), + args[1].toNumber(), + args[2].toNumber(), + args[3].toNumber()); + else + this.ori = this.ori.applyTropism( + args[0].toNumber()); + } else this.ori = this.ori.applyTropism( this.system.tropism); From 1d9ea7105ef7f5fbdd27a4e55d19fd3a83c82040 Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 20:21:22 +0700 Subject: [PATCH 84/94] Fixed crash when model rule is not found --- TODO.md | 4 ++-- parametric.js | 8 -------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/TODO.md b/TODO.md index 1b2ff79..cd21d2b 100644 --- a/TODO.md +++ b/TODO.md @@ -20,8 +20,6 @@ - [ ] Ask Gilles about changing the spline used in 3D graph - Too much hassle to implement, defer them to LG? - [ ] Option to use old tropisme - - [ ] Tropism direction - - Maybe can have 4 arguments ## 1.0, Mistletoe ed. @@ -29,6 +27,8 @@ ## 1.0: Completed +- [x] Tropism direction + - Maybe can have 4 arguments - [x] Issue: multiple parameters not working at all - Cause: splitting commas -> Solution: semi-colons - [x] Split workload for ancestree (AND for derive too if this works well) diff --git a/parametric.js b/parametric.js index b461b2a..96dbc30 100644 --- a/parametric.js +++ b/parametric.js @@ -1423,7 +1423,6 @@ class LSystem if(this.models.has(symbol)) { let tmpRules = this.models.get(symbol); - let ruleChoice = -1; for(let j = 0; j < tmpRules.length; ++j) { let tmpParamMap = (v) => this.variables.get(v) || @@ -1459,7 +1458,6 @@ class LSystem resultParams.push(derivPi); } } - ruleChoice = j; break; } else // Stochastic time @@ -1514,15 +1512,9 @@ class LSystem // log(`roll = ${roll} choice = ${choice}`) if(choice == -1) continue; - ruleChoice = j; break; } } - if(ruleChoice == -1) - { - deriv = sequence[i]; - derivParams = [seqParams[i]]; - } } return { result: result, From 894be161cf74fc80fccbb32f8bbd68ff0d5082f1 Mon Sep 17 00:00:00 2001 From: Minh Date: Fri, 3 Mar 2023 21:40:32 +0700 Subject: [PATCH 85/94] Added stamp stick example to manual --- parametric.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/parametric.js b/parametric.js index 96dbc30..83ca458 100644 --- a/parametric.js +++ b/parametric.js @@ -432,9 +432,37 @@ Conversion from boolean to number is also unavailable. ** When omitted, the chance is assumed to be 100%.` }, { - title: 'Example: ', + title: 'Example: Stamp stick', contents: -`` +`Adopted from an L-system made in Houdini. The symbol J represents 4 organs ` + +`at the same time, with the 'type' parameter controlling which model to load: +type <= 0: leaves, +type <= 1: flower bud, +type <= 2: blooming flower, +type <= 3: closed flower, +and the 's' parameter controlling the model's size. + +Variables: b = 2.25 +The variable b controls how quickly the model type switches + +Axiom: FA(1) +A(t) = F(b/2.5)//[+(24)&B(t)]//[&B(t)]//[&B(t)]A(t+1) +B(t) = ~J(0.15, t/b-2) +J(s, type) = ~J(s*0.75+0.25, type) +~>J(s, type): type<=0 = {[+(32)F(s).-TF(s)TF.-TF(s)..][-(32)F(s)+(16)[TF(s)TF.].]} +~>J(s, type): type<=1 = [F~p(s)/(60)~p(s)/(60)~p(s)] +~>p(s) = {[+F(s/2).--F(s/2).][-F(s/2).].} +~>J(s, type): type<=2 = [F~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)] +~>k(s) = {[F(s).+(72)[&F(s-0.3).][F(s)..][^F(s-0.3).].]} +~>J(s, type): type<=3 = [F~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)] +~>m(s) = {[+(24)F(s).-F(s/2)..].} +Turning angle: 48° +Tropism: 0.16 + +Applies static camera: +Scale: 7 +Centre: (0, lv/2+1, 0) +Upright` }, { title: 'Appendix: Model discussions', @@ -3249,6 +3277,24 @@ let manualSystems = 'F(d)=F(d/3)+F(d/3)-(120)F(d/3)+F(d/3)' ], 60), config: ['1/2', '1/2', 'sqrt(3)/12', 0, false] + }, + 8: + { + system: new LSystem('FA(1)', [ + 'A(t) = F(b/2.5)//[+(24)&B(t)]//[&B(t)]//[&B(t)]A(t+1)', + 'B(t) = ~J(0.15, t/b-2)', + 'J(s, type) = ~J(s*0.75+0.25, type)', + '~>J(s, type): type<=0 = {[+(32)F(s).-TF(s)TF.-TF(s)..][-(32)F(s)+(16)[TF(s)TF.].]}', + '~>J(s, type): type<=1 = [F~p(s)/(60)~p(s)/(60)~p(s)]', + '~>p(s) = {[+F(s/2).--F(s/2).][-F(s/2).].}', + '~>J(s, type): type<=2 = [F~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)]', + '~>k(s) = {[F(s).+(72)[&F(s-0.3).][F(s)..][^F(s-0.3).].]}', + '~>J(s, type): type<=3 = [F~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)]', + '~>m(s) = {[+(24)F(s).-F(s/2)..].}' + ], '48', 0, '', '', 0.16, { + 'b':'2.25' + }), + 'config': ['7', '0', 'lv/2+1', '0', true] } }; let tmpSystem = null; From e4dd4128efae43752a2a1c8757e5d8fa2bc28b67 Mon Sep 17 00:00:00 2001 From: Minh Date: Sat, 4 Mar 2023 00:43:48 +0700 Subject: [PATCH 86/94] Adjusted stamp stick example to cap at type 3 --- classic.js | 4 ++-- parametric.js | 36 ++++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/classic.js b/classic.js index 211ea85..21e436c 100644 --- a/classic.js +++ b/classic.js @@ -67,8 +67,8 @@ Warning: v0.20 might break your internal state. Be sure to back it up, and ` + return descs[language] || descs.en; } -var authors = 'propfeds#5988\n\nThanks to:\nSir Gilles-Philippe Paillé, ' + - 'for providing help with quaternions\nskyhigh173#3120, for ' + +var authors = 'propfeds\n\nThanks to:\nSir Gilles-Philippe Paillé, for ' + + 'providing help with quaternions\nskyhigh173#3120, for ' + 'suggesting clipboard and JSON internal state formatting'; var version = 1; diff --git a/parametric.js b/parametric.js index 83ca458..ff2a984 100644 --- a/parametric.js +++ b/parametric.js @@ -53,8 +53,8 @@ Note: Systems from LSR can be ported to P-LSR with minimal changes. However,` + return descs[language] || descs.en; } -var authors = 'propfeds#5988\n\nThanks to:\nSir Gilles-Philippe Paillé, ' + - 'for providing help with quaternions\nskyhigh173#3120, for ' + +var authors = 'propfeds\n\nThanks to:\nSir Gilles-Philippe Paillé, for ' + + 'providing help with quaternions\nskyhigh173#3120, for ' + 'suggesting clipboard and JSON internal state formatting'; var version = 0; @@ -263,7 +263,7 @@ const locStrings = menuManual: 'User Guide ({0}/{1})', menuTOC: 'Table of Contents', - labelSource: 'Source: ', + labelSource: 'Reference: ', manualSystemDesc: 'From the user guide, page {0}.', manual: [ @@ -443,26 +443,29 @@ type <= 3: closed flower, and the 's' parameter controlling the model's size. Variables: b = 2.25 -The variable b controls how quickly the model type switches +The variable b controls how quickly the model type switches, with lower ` + +`values being faster. A lower value also decreases the organ density. Axiom: FA(1) -A(t) = F(b/2.5)//[+(24)&B(t)]//[&B(t)]//[&B(t)]A(t+1) +A(t): t<=5*b = F(2/b)//[+(24)&B(t)]//[&B(t)]//[&B(t)]A(t+1) B(t) = ~J(0.15, t/b-2) J(s, type) = ~J(s*0.75+0.25, type) ~>J(s, type): type<=0 = {[+(32)F(s).-TF(s)TF.-TF(s)..][-(32)F(s)+(16)[TF(s)TF.].]} ~>J(s, type): type<=1 = [F~p(s)/(60)~p(s)/(60)~p(s)] ~>p(s) = {[+F(s/2).--F(s/2).][-F(s/2).].} -~>J(s, type): type<=2 = [F~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)] +~>J(s, type): type<=2 = [FT~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)] ~>k(s) = {[F(s).+(72)[&F(s-0.3).][F(s)..][^F(s-0.3).].]} -~>J(s, type): type<=3 = [F~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)] +~>J(s, type): type<=3 = [FT~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)] ~>m(s) = {[+(24)F(s).-F(s/2)..].} +Turtle-ignored: A Turning angle: 48° Tropism: 0.16 Applies static camera: Scale: 7 Centre: (0, lv/2+1, 0) -Upright` +Upright`, + source: 'https://www.houdinikitchen.net/2019/12/21/how-to-create-l-systems/' }, { title: 'Appendix: Model discussions', @@ -499,7 +502,8 @@ If by any chance you have not yet tried this game, I highly recommend it. ` + `book 'The Algorithmic Beauty of Plants', which has been the primary source ` + `of reference in the development of LSR, including the various syntax and ` + `processing rules, as well as explanations to the scientific motives behind ` + -`the design of L-systems. ` +`the design of L-systems.`, + source: 'http://algorithmicbotany.org/' } ] } @@ -3281,18 +3285,18 @@ let manualSystems = 8: { system: new LSystem('FA(1)', [ - 'A(t) = F(b/2.5)//[+(24)&B(t)]//[&B(t)]//[&B(t)]A(t+1)', + 'A(t): t<=5*b = F(2/b)//[+(24)&B(t)]//[&B(t)]//[&B(t)]A(t+1)', 'B(t) = ~J(0.15, t/b-2)', 'J(s, type) = ~J(s*0.75+0.25, type)', '~>J(s, type): type<=0 = {[+(32)F(s).-TF(s)TF.-TF(s)..][-(32)F(s)+(16)[TF(s)TF.].]}', '~>J(s, type): type<=1 = [F~p(s)/(60)~p(s)/(60)~p(s)]', '~>p(s) = {[+F(s/2).--F(s/2).][-F(s/2).].}', - '~>J(s, type): type<=2 = [F~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)]', + '~>J(s, type): type<=2 = [FT~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)/(72)~k(s)]', '~>k(s) = {[F(s).+(72)[&F(s-0.3).][F(s)..][^F(s-0.3).].]}', - '~>J(s, type): type<=3 = [F~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)]', + '~>J(s, type): type<=3 = [FT~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)/(72)~m(s)]', '~>m(s) = {[+(24)F(s).-F(s/2)..].}' - ], '48', 0, '', '', 0.16, { - 'b':'2.25' + ], '48', 0, 'A', '', 0.16, { + 'b': '2.25' }), 'config': ['7', '0', 'lv/2+1', '0', true] } @@ -5596,7 +5600,7 @@ let createManualMenu = () => let sourceGrid = ui.createGrid ({ isVisible: 'source' in manualPages[page], - columnDefinitions: ['20*', '80*'], + columnDefinitions: ['auto', '1*'], children: [ ui.createLatexLabel @@ -5604,7 +5608,7 @@ let createManualMenu = () => text: getLoc('labelSource'), row: 0, column: 0, - horizontalOptions: LayoutOptions.END, + horizontalTextAlignment: TextAlignment.START, verticalTextAlignment: TextAlignment.CENTER }), sourceEntry From 42bddb403117224cb05529f9f5ed58736ba8e099 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 02:07:50 +0700 Subject: [PATCH 87/94] Welcome to LSR --- TODO.md | 2 ++ classic.js | 27 +++++++++++---------------- parametric.js | 12 +++++++----- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/TODO.md b/TODO.md index cd21d2b..ed76c9d 100644 --- a/TODO.md +++ b/TODO.md @@ -24,6 +24,8 @@ ## 1.0, Mistletoe ed. - [ ] Complete new manual +- [ ] Make a mistletoe for P-LSR + - To prevent lag, probably only create one stage with full models ## 1.0: Completed diff --git a/classic.js b/classic.js index 21e436c..d1353bf 100644 --- a/classic.js +++ b/classic.js @@ -145,7 +145,7 @@ const locStrings = { versionName: 'v1.0', welcomeSystemName: 'Arrow', - welcomeSystemDesc: 'Welcome to L-systems Renderer!', + welcomeSystemDesc: 'Welcome to the L-systems Renderer!', equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', equationOverlay: '{0}\n\n{1}', @@ -689,28 +689,23 @@ Upright` `remains, as writing the model in a different rule will delay its drawing by ` + `one level. With a special kind of rule, we can assign dedicated models to ` + `each symbol to be drawn instantly. -To declare a model rule, attach a tilde in front of the symbol on the left side: +To declare a model rule, attach a ~ (tilde) in front of the symbol: ~{symbol} = {model} -To reference a model in another rule, attach a tilde in front of the symbol ` + -`in the same way it was declared. +To reference a model in another rule, attach a tilde in the same way it was ` + +`declared. The model will be represented as a temporary sequence that cannot ` + +`evolve, replacing the default action of drawing a straight line. +The tilde, and subsequently its model, will disappear in the following level. -Note: The symbol will not disappear from the rule after the model has been ` + -`drawn, but it will be ignored by the turtle. - -Note 2: Unlike the incorporated surfaces described in the Algorithmic Beauty ` + -`of Plants, models in LSR work differently. The model symbol in LSR only ` + -`lasts for one level (and disappears afterwards), and thus, models need to ` + -`be continuously refreshed. -(Example follows in the next page)` +Note: This is unlike the incorporated surfaces described in the Algorithmic ` + +`Beauty of Plants, where the tilde does not need to be refreshed.` }, { title: 'Example: Lilac branch', contents: -`Ripped straight off of page 92 of The Algorithmic Beauty of Plants. But I ` + -`made the model myself. -K represents the flower, and its model is refreshed every level with the ` + -`rule K = ~K. +`Ripped straight off of page 92 of The Algorithmic Beauty of Plants. +K represents the flower, and its model has to be refreshed every level with ` + +`the rule K = ~K. Axiom: A~K A = [--//~K][++//~K]I///A diff --git a/parametric.js b/parametric.js index ff2a984..56a0372 100644 --- a/parametric.js +++ b/parametric.js @@ -135,9 +135,9 @@ const locStrings = { en: { - versionName: 'v1.0, Mistletoe ed.', - welcomeSystemName: 'Arrow', - welcomeSystemDesc: 'Welcome to L-systems Renderer!', + versionName: 'v1.0', + welcomeSystemName: 'Mistletoe', + welcomeSystemDesc: 'Welcome to the Parametric L-systems Renderer.', equationOverlayLong: '{0} – {1}\n\n{2}\n\n{3}', equationOverlay: '{0}\n\n{1}', @@ -426,7 +426,9 @@ Note: All arithmetic processing in parameters is done using the game's ` + == (equality) true, false (keywords) a ? b : c (conditional ternary) -Conversion from boolean to number is also unavailable. +Conversion (from boolean to number) +For more information, check the Math Expression manual in the Auto-prestige ` + +`settings. * When omitted, the condition is assumed to be always true. ** When omitted, the chance is assumed to be 100%.` @@ -3248,7 +3250,7 @@ const zUpQuat = new Quaternion(0, 0, 0, 1); let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); let globalRNG = new Xorshift(Date.now()); -let contentsTable = [0, 1, 2, 5, 7]; +let contentsTable = [0, 1, 2, 5, 7, 9, 10]; let manualSystems = { 3: From 9c5b2a57276f88cba55b998a8552e1fbcc8274f7 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 04:32:08 +0700 Subject: [PATCH 88/94] Fixed Xorshift implementation --- classic.js | 59 ++++++++++++++++++++++++++------------------ parametric.js | 68 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 77 insertions(+), 50 deletions(-) diff --git a/classic.js b/classic.js index d1353bf..b622bc9 100644 --- a/classic.js +++ b/classic.js @@ -1041,40 +1041,51 @@ class Xorshift * @constructor * @param {number} seed must be initialized to non-zero. */ - constructor(seed = 1752) + constructor(seed = 0) { - this.state = seed; - this.mod = 0x100000000; - // 0x ffffffff + 1 + this.x = seed; + this.y = 0; + this.z = 0; + this.w = 0; + for(let i = 0; i < 64; ++i) + this.nextInt; } /** - * Returns a random integer within [0, 2^32) probably. + * Returns a random integer within [0, 2^31) probably. * @returns {number} */ get nextInt() { - let x = this.state; - x ^= x << 13; - x ^= x >> 17; - x ^= x << 5; - this.state = x; - return this.state; + let t = this.x ^ (this.x << 11); + this.x = this.y; + this.y = this.z; + this.z = this.w; + this.w ^= (this.w >> 19) ^ t ^ (t >> 8); + return this.w; } /** - * Returns a random floating point number within [0, 1] or [0, 1). - * @param {boolean} [includeEnd] (default: false) whether to include the - * number 1 in the range. + * Returns a random floating point number within [0, 1). * @returns {number} */ - nextFloat(includeEnd = false) + get nextFloat() { - let result; - if(includeEnd) // [-1, 1] - result = this.nextInt / (this.mod - 1); - else // [-1, 1) - result = this.nextInt / this.mod; - - return (result + 1) / 2; + return (this.nextInt >>> 0) / ((1 << 30) * 2); + } + /** + * Returns a full random double floating point number using 2 rolls. + * @returns {number} + */ + get nextDouble() + { + let top, bottom, result; + do + { + top = this.nextInt >>> 10; + bottom = this.nextFloat; + result = (top + bottom) / (1 << 21); + } + while(result === 0); + return result; } /** * Returns a random integer within a range of [start, end). @@ -1086,7 +1097,7 @@ class Xorshift { // [start, end) let size = end - start; - return start + Math.floor(this.nextFloat() * size); + return start + Math.floor(this.nextFloat * size); } /** * Returns a random element from an array. @@ -3315,7 +3326,7 @@ var getEquationOverlay = () => let result = ui.createLatexLabel ({ text: overlayText, - margin: new Thickness(5, 4), + margin: new Thickness(8, 4), fontSize: 9, textColor: Color.TEXT_MEDIUM }); diff --git a/parametric.js b/parametric.js index 56a0372..4a0b336 100644 --- a/parametric.js +++ b/parametric.js @@ -478,6 +478,11 @@ The motive behind this mechanism in LSR, is that when a symbol moves to ` + `another place, the original ~ (tilde) ends up referencing another symbol ` + `entirely, which both wastes one space and can introduce errors by drawing ` + `the wrong model. +Another reason is due to the fact that models in LSR consist of regular ` + +`symbols instead of being created using traditional techniques, but the ` + +`resulting models are not derivable, perhaps it is a more intuitive choice ` + +`to let them disappear. + This design choice is not final, and if feedback can prove its ` + `inconvenience, further considerations can be made: should it stick around ` + `like defined in Abop? Should references be ditched entirely and models be ` + @@ -546,40 +551,51 @@ class Xorshift * @constructor * @param {number} seed must be initialized to non-zero. */ - constructor(seed = 1752) + constructor(seed = 0) { - this.state = seed; - this.mod = 0x100000000; - // 0x ffffffff + 1 + this.x = seed; + this.y = 0; + this.z = 0; + this.w = 0; + for(let i = 0; i < 64; ++i) + this.nextInt; } /** - * Returns a random integer within [0, 2^32) probably. + * Returns a random integer within [0, 2^31) probably. * @returns {number} */ get nextInt() { - let x = this.state; - x ^= x << 13; - x ^= x >> 17; - x ^= x << 5; - this.state = x; - return this.state; + let t = this.x ^ (this.x << 11); + this.x = this.y; + this.y = this.z; + this.z = this.w; + this.w ^= (this.w >> 19) ^ t ^ (t >> 8); + return this.w; } /** - * Returns a random floating point number within [0, 1] or [0, 1). - * @param {boolean} [includeEnd] (default: false) whether to include the - * number 1 in the range. + * Returns a random floating point number within [0, 1). * @returns {number} */ - nextFloat(includeEnd = false) + get nextFloat() { - let result; - if(includeEnd) // [-1, 1] - result = this.nextInt / (this.mod - 1); - else // [-1, 1) - result = this.nextInt / this.mod; - - return (result + 1) / 2; + return (this.nextInt >>> 0) / ((1 << 30) * 2); + } + /** + * Returns a full random double floating point number using 2 rolls. + * @returns {number} + */ + get nextDouble() + { + let top, bottom, result; + do + { + top = this.nextInt >>> 10; + bottom = this.nextFloat; + result = (top + bottom) / (1 << 21); + } + while(result === 0); + return result; } /** * Returns a random integer within a range of [start, end). @@ -591,7 +607,7 @@ class Xorshift { // [start, end) let size = end - start; - return start + Math.floor(this.nextFloat() * size); + return start + Math.floor(this.nextFloat * size); } /** * Returns a random element from an array. @@ -1375,7 +1391,7 @@ class LSystem } else // Stochastic time { - let roll = this.RNG.nextFloat(); + let roll = this.RNG.nextFloat; let chanceSum = 0; let choice = -1; for(let k = 0; k < tmpRules[j].derivations.length; ++k) @@ -1498,7 +1514,7 @@ class LSystem { // Models can be drawn any time, thus, the RNG should be // separate from actual rule processing. - let roll = globalRNG.nextFloat(); + let roll = globalRNG.nextFloat; let chanceSum = 0; let choice = -1; for(let k = 0; k < tmpRules[j].derivations.length; ++k) @@ -3443,7 +3459,7 @@ var getEquationOverlay = () => let result = ui.createLatexLabel ({ text: overlayText, - margin: new Thickness(5, 4), + margin: new Thickness(8, 4), fontSize: 9, textColor: Color.TEXT_MEDIUM }); From ba83821f37ac0ad7a518ec75a46deccae67e6b31 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 17:17:16 +0700 Subject: [PATCH 89/94] Fixed rule swap btns not replacing text correctly --- classic.js | 38 ++++++++++++++++++++++++-------------- parametric.js | 40 +++++++++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 29 deletions(-) diff --git a/classic.js b/classic.js index b622bc9..658441c 100644 --- a/classic.js +++ b/classic.js @@ -4121,9 +4121,11 @@ let createSystemMenu = () => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } @@ -4149,11 +4151,12 @@ let createSystemMenu = () => { Sound.playClick(); let i = ruleEntries.length; + tmpRules[i] = ''; ruleEntries.push(ui.createEntry ({ row: i, column: 0, - text: '', + text: tmpRules[i], clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { @@ -4171,9 +4174,11 @@ let createSystemMenu = () => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } @@ -4809,9 +4814,11 @@ let createViewMenu = (title, parentMenu) => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } @@ -4837,11 +4844,12 @@ let createViewMenu = (title, parentMenu) => { Sound.playClick(); let i = ruleEntries.length; + tmpRules[i] = ''; ruleEntries.push(ui.createEntry ({ row: i, column: 0, - text: '', + text: tmpRules[i], clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { @@ -4859,9 +4867,11 @@ let createViewMenu = (title, parentMenu) => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } diff --git a/parametric.js b/parametric.js index 4a0b336..e7f7201 100644 --- a/parametric.js +++ b/parametric.js @@ -68,7 +68,7 @@ let resetLvlOnConstruct = true; let measurePerformance = false; let debugCamPath = false; let normaliseQuaternions = false; -let maxCharsPerTick = 250; +let maxCharsPerTick = 500; let menuLang = Localization.language; let savedSystems = new Map(); @@ -4368,9 +4368,11 @@ let createSystemMenu = () => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } @@ -4396,11 +4398,12 @@ let createSystemMenu = () => { Sound.playClick(); let i = ruleEntries.length; + tmpRules[i] = ''; ruleEntries.push(ui.createEntry ({ row: i, column: 0, - text: '', + text: tmpRules[i], clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { @@ -4418,9 +4421,11 @@ let createSystemMenu = () => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } @@ -5095,9 +5100,11 @@ let createViewMenu = (title, parentMenu) => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } @@ -5123,11 +5130,12 @@ let createViewMenu = (title, parentMenu) => { Sound.playClick(); let i = ruleEntries.length; + tmpRules[i] = ''; ruleEntries.push(ui.createEntry ({ row: i, column: 0, - text: '', + text: tmpRules[i], clearButtonVisibility: ClearButtonVisibility.WHILE_EDITING, onTextChanged: (ot, nt) => { @@ -5145,9 +5153,11 @@ let createViewMenu = (title, parentMenu) => onClicked: () => { Sound.playClick(); - let tmpRule = ruleEntries[i].text; - ruleEntries[i].text = ruleEntries[i - 1].text; - ruleEntries[i - 1].text = tmpRule; + let tmpRule = tmpRules[i]; + tmpRules[i] = tmpRules[i - 1]; + tmpRules[i - 1] = tmpRule; + ruleEntries[i - 1].text = tmpRules[i - 1]; + ruleEntries[i].text = tmpRules[i]; } })); } From 49b4e6f8cacedad412835f0623a8d93552c189c5 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 19:03:20 +0700 Subject: [PATCH 90/94] Added toe --- parametric.js | 52 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/parametric.js b/parametric.js index e7f7201..f4ba6ee 100644 --- a/parametric.js +++ b/parametric.js @@ -469,6 +469,32 @@ Centre: (0, lv/2+1, 0) Upright`, source: 'https://www.houdinikitchen.net/2019/12/21/how-to-create-l-systems/' }, + { + title: 'Example: Mistletoe', + contents: +`Welcome to the Parametric L-systems Renderer! + +Axiom: ++M(0) +M(t): t<2 = F~M(t+1) +M(t): t<3 = [&T$~M(t+1, 0)]/(120)[&T$M(t+1, 0)]/(120)[&T$M(t+1, 0)] +M(t, i): t<5 = F~M(t+1, i): 0.7-i; F~K(0)~M(t+1, i+0.3): 0.3+i +M(t, i): t>=5 = [&T~M(t-2, i+0.3)]/(180)[&TM(t-2, i+0.3)] +~> M(t): t<3 = [+(48)~L(t)]/(180)[+(48)~L(t)] +~> M(t, i) = [+(48)~L(2+0.4*t)]/(180)[+(48)~L(2+0.4*t)] +~> L(t) = {[+(16)TF(t/6).&(16)-(16)TF(t/10).-TF(t/8)..][-(16)TF(t/6)[&(16)+(16)TF(t/10).].]} +K(t): t<3 = ~K(t+1) +K(t): t>=3 = [&&\\~B(0.3)]/(120)[&&/~B(0.24)]/(120)[&&~B(0.33)] +~> K(t) = [&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)] +B(s) = ~B(s*0.8+0.2) +~> B(s) = {[-(67.5)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).]} +Turning angle: 32° +Seed: 1362151494 +Tropism: 0.16 + +Applies static camera: +Scale: 6 +Centre: (3, 3, 0)` + }, { title: 'Appendix: Model discussions', contents: @@ -3263,10 +3289,23 @@ const xUpQuat = new Quaternion(0, 1, 0, 0); const yUpQuat = new Quaternion(0, 0, 1, 0); const zUpQuat = new Quaternion(0, 0, 0, 1); -let arrow = new LSystem('X', ['F=FF', 'X=F[+X][-X]FX'], 30); -let renderer = new Renderer(arrow, '2^lv', 0, '2^lv'); +let toe = new LSystem('++M(0)', [ + 'M(t): t<2 = F~M(t+1)', + 'M(t): t<3 = [&T$~M(t+1, 0)]/(120)[&T$M(t+1, 0)]/(120)[&T$M(t+1, 0)]', + 'M(t, i): t<5 = F~M(t+1, i): 0.7-i; F~K(0)~M(t+1, i+0.3): 0.3+i', + 'M(t, i): t>=5 = [&T~M(t-2, i+0.3)]/(180)[&TM(t-2, i+0.3)]', + '~> M(t): t<3 = [+(48)~L(t)]/(180)[+(48)~L(t)]', + '~> M(t, i) = [+(48)~L(2+0.4*t)]/(180)[+(48)~L(2+0.4*t)]', + '~> L(t) = {[+(16)TF(t/6).&(16)-(16)TF(t/10).-TF(t/8)..][-(16)TF(t/6)[&(16)+(16)TF(t/10).].]}', + 'K(t): t<3 = ~K(t+1)', + 'K(t): t>=3 = [&&\\~B(0.3)]/(120)[&&/~B(0.24)]/(120)[&&~B(0.33)]', + '~> K(t) = [&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)]', + 'B(s) = ~B(s*0.8+0.2)', + '~> B(s) = {[-(67.5)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).]}', +], '32', 1362151494, '', '', 0.16, {}); +let renderer = new Renderer(toe, 6, 0, 3, 3, 0); let globalRNG = new Xorshift(Date.now()); -let contentsTable = [0, 1, 2, 5, 7, 9, 10]; +let contentsTable = [0, 1, 2, 5, 7, 10, 11]; let manualSystems = { 3: @@ -3316,7 +3355,12 @@ let manualSystems = ], '48', 0, 'A', '', 0.16, { 'b': '2.25' }), - 'config': ['7', '0', 'lv/2+1', '0', true] + config: ['7', '0', 'lv/2+1', '0', true] + }, + 9: + { + system: toe, + config: ['6', '3', '3', '0', false] } }; let tmpSystem = null; From 6768df062d9cade483bd6d8aa65a726d7ec889b5 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 19:30:16 +0700 Subject: [PATCH 91/94] Fixed toe selfie so it gets a better angle --- parametric.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/parametric.js b/parametric.js index f4ba6ee..8591aba 100644 --- a/parametric.js +++ b/parametric.js @@ -482,10 +482,11 @@ M(t, i): t>=5 = [&T~M(t-2, i+0.3)]/(180)[&TM(t-2, i+0.3)] ~> M(t): t<3 = [+(48)~L(t)]/(180)[+(48)~L(t)] ~> M(t, i) = [+(48)~L(2+0.4*t)]/(180)[+(48)~L(2+0.4*t)] ~> L(t) = {[+(16)TF(t/6).&(16)-(16)TF(t/10).-TF(t/8)..][-(16)TF(t/6)[&(16)+(16)TF(t/10).].]} -K(t): t<3 = ~K(t+1) -K(t): t>=3 = [&&\\~B(0.3)]/(120)[&&/~B(0.24)]/(120)[&&~B(0.33)] +K(c)>M(t, i): c<3 = ~K(c+1): 0.7-t/10, ~B(0.3): 0.3+t/10 +K(t): t<3 = ~K(t+1): 0.3+t/10, : 0.7-t/10 +K(t): t>=3 = [&&\\~B(0.3)]/(120)[&&\\~B(0.24)]/(120)[&&~B(0.27)] ~> K(t) = [&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)] -B(s) = ~B(s*0.8+0.2) +B(s) = ~B(s*0.9+0.1) ~> B(s) = {[-(67.5)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).]} Turning angle: 32° Seed: 1362151494 @@ -3297,12 +3298,13 @@ let toe = new LSystem('++M(0)', [ '~> M(t): t<3 = [+(48)~L(t)]/(180)[+(48)~L(t)]', '~> M(t, i) = [+(48)~L(2+0.4*t)]/(180)[+(48)~L(2+0.4*t)]', '~> L(t) = {[+(16)TF(t/6).&(16)-(16)TF(t/10).-TF(t/8)..][-(16)TF(t/6)[&(16)+(16)TF(t/10).].]}', - 'K(t): t<3 = ~K(t+1)', - 'K(t): t>=3 = [&&\\~B(0.3)]/(120)[&&/~B(0.24)]/(120)[&&~B(0.33)]', + 'K(c)>M(t, i): c<3 = ~K(c+1): 0.7-t/10, ~B(0.3): 0.3+t/10', + 'K(t): t<3 = ~K(t+1): 0.3+t/10, : 0.7-t/10', + 'K(t): t>=3 = [&&\\~B(0.3)]/(120)[&&\\~B(0.24)]/(120)[&&~B(0.27)]', '~> K(t) = [&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)]/(120)[&&F(0.3+t/10)]', - 'B(s) = ~B(s*0.8+0.2)', + 'B(s) = ~B(s*0.9+0.1)', '~> B(s) = {[-(67.5)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).+(45)F(s).]}', -], '32', 1362151494, '', '', 0.16, {}); +], '32', 157120112, '', 'F+-&^/\\~{}', 0.16, {}); let renderer = new Renderer(toe, 6, 0, 3, 3, 0); let globalRNG = new Xorshift(Date.now()); let contentsTable = [0, 1, 2, 5, 7, 10, 11]; From 5061d22d18e80f938fe1911846ad9c858acf0203 Mon Sep 17 00:00:00 2001 From: propfeds <46107294+propfeds@users.noreply.github.com> Date: Sun, 5 Mar 2023 19:39:16 +0700 Subject: [PATCH 92/94] Uploaded 1.0 screenshots --- ...5-10-767_com.conicgames.exponentialidle.jpg | Bin 0 -> 282845 bytes ...6-57-962_com.conicgames.exponentialidle.jpg | Bin 0 -> 285742 bytes ...2-30-873_com.conicgames.exponentialidle.jpg | Bin 0 -> 252509 bytes ...5-25-985_com.conicgames.exponentialidle.jpg | Bin 0 -> 289893 bytes ...6-45-355_com.conicgames.exponentialidle.jpg | Bin 0 -> 410055 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshots/Screenshot_2023-03-05-02-55-10-767_com.conicgames.exponentialidle.jpg create mode 100644 screenshots/Screenshot_2023-03-05-02-56-57-962_com.conicgames.exponentialidle.jpg create mode 100644 screenshots/Screenshot_2023-03-05-19-32-30-873_com.conicgames.exponentialidle.jpg create mode 100644 screenshots/Screenshot_2023-03-05-19-35-25-985_com.conicgames.exponentialidle.jpg create mode 100644 screenshots/Screenshot_2023-03-05-19-36-45-355_com.conicgames.exponentialidle.jpg diff --git a/screenshots/Screenshot_2023-03-05-02-55-10-767_com.conicgames.exponentialidle.jpg b/screenshots/Screenshot_2023-03-05-02-55-10-767_com.conicgames.exponentialidle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..502745d50f55c4df40a4a852d3849fad274f0a3a GIT binary patch literal 282845 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

jv+%YdR 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�@ulw@e0UIy#P# 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 z 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�Y0m+5Rp5F>O07^YTIHn?$ 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%0A2-7~?#&G#z2=9nBU08@2*b6CqUh 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 literal 0 HcmV?d00001 diff --git a/screenshots/Screenshot_2023-03-05-02-56-57-962_com.conicgames.exponentialidle.jpg b/screenshots/Screenshot_2023-03-05-02-56-57-962_com.conicgames.exponentialidle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31fa25e0dba8046216140135b95050188ccd1088 GIT binary patch literal 285742 zcmeFYbyQrA-7UDom*5_{aShTTtaceXQ(zv?^cXvxJ z-#+)eeeN6QjdR|(cf9fb*t5r4_3NrxwPww#HLGgXtUuF#egW`R6qFSJj~)R4j~;%2 zKP!*flx1bj-T^fgl-1<_k?{Bx;DH|F0{~E%vm;RPEuFrBA>H3`|4!zXP9Ogr|0m%? zxfhdvmkt1oasMaj|5X&G71+u0f$8Ysa&~-p_=B)k5182c->}=?*y7)C*x%Su8z}q0 z^X&n%S^o!Y@gK0O^GD|gp62!*oCoq5i`~1#kiY z0g8aP5BUEm{ZpR~*#Lm(IRJnW_0KqqWB{Pv9{_kY`_DM0ZvencKLDU^=%cx#`9Fkt z@^F6)fdBv}1pol90RTWW3;Kf-=shSwajDU;&aEy;eNG~ub9N%0zvvNZoc&+0wSV% z1{SW-35i*iRdqi{r;aF?1;u48KRA9#DnPLWCQq+#9<$0heGSUa$;)3}kykbZ`v+8a zvspo`oeSIASJyTkBqD!!4Id=__ZIs*d=Ti-(}yHsf`|A=7>}P|Ji&Z|@ehs%VF~!? z-#j7IGG~DM67feL5evKpe#xr*Il}0;d_29}E5${{Kt^ zkM+L(O3v@^EvkUJhggZVf}>T{D7ef>3e!Ekq1?*ATR*JE4JOr?nk-JZ)tm~;?A!T| zqqD@>GgS4TH3TapyNq`Ch62>v!!~ZeKwDhOJIh}0vgx^x-@MS;gRNLbnLv5^oj#R3L}N#j$7cZdMe z^gouAoez#I8Kx|mS)?jEk)x@r;~(ulTWg0FJ;ys~q)H}a+fWL+C0v!SV97AzL68Ql z)!gFRbOW#@)NK}mzt_QN3xzZ!7}AMcq5J` z3fs5D;3@MtZSgNxs&7HF7zRHOvMgKb+j1S-8Lf58to)8oAjEgM<5sgfH(t&KnSyRS ziG1l`_A#cEU=#s3Igx?a&q_Acz3h3Ko&6V6_KKss%%?rS$cg7Yd9!M|c(P-{ZbCfj z7P*vzpo0ofQTs~~&`~Nd#_B!8`~Rg$rBSb04f-HY?b%(3a@mz5@o=p3`n;9jrU4Bi zsqrLtVrEHe3Gs87m{p{em6M-$W3byPBIHit2Rq#Cxsp>ZHlc>sh#~PI6ZK2TY(gKW zk%==m^$5ElVl?-3BbK4_^Z)X+|JI*v5ydX~K%#p_*F?oa&aFx)G+4v7iGOZpExF?L ztfwM*`0L79bcwnCyj25mH@Eh^_W3&<8e(e;DQ_F4&Um}go85|*zUKtvSEcb8$Q3({ zJ!D;FJl8RHm@DItlvL(i%7{tXZjb~|$Utb(S`a(RAA~uTFr$%fL^Z`seDQKjr?^H> zZdDTZXww&Z@6f?GEiq0i@r8Zm{OW|?xKBiWa=2#~W_wcIZ#gqg&NSTIgvS_DYpv-y_4)Q?c)5#+YQAicMg8=K6bCv{;eDzA zXHvd?Ztj4+?e21KLwCNwxN5j1$~%KCwFn!b(QZ*Xt;tqJxX76xsms|vt3 z4Q~yQY8h285ojs*g|>Vu-F|I+Z+Lu_9ImTq&NDcIbV+22W?|U2Y;1>52YWxtqhBY= zU+M2*iYUsI{{z?qxyAhMHKF~Dc3J{amXBbR*2%$q@mP{ZYwBHYJv~%c>?>aA@8$k% zO-@`guSv1>y$NN_duv;zhUvBn)UR^17d?leT{>s9V#dk~LYicJ{cN3OZ^9@}fGI6X}1g z2CL__>*~aeLCBvWtMidnJ$zTE*`Qf5r%)|0x5P845CWlG0gCgaGNLV&xLdp;8A~9} zg`KZyuqnUzU(=r$$58�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
@m02v=|B^qhQ}#JTC{l5=@Cq#>SN;5^|s) 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%0D?^zCeb08idX*f@C3`KRygUwEW-J?J1O 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 WqoJWP_&@)~zn}PTK;YbOQ~wLi;o5fq literal 0 HcmV?d00001 diff --git a/screenshots/Screenshot_2023-03-05-19-36-45-355_com.conicgames.exponentialidle.jpg b/screenshots/Screenshot_2023-03-05-19-36-45-355_com.conicgames.exponentialidle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdb650f0fb033a559003f209f497392f22ae8e23 GIT binary patch literal 410055 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�_I<+s@kdDhB~>;+H3GyieB`NePR0= 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 literal 0 HcmV?d00001 From d969301bf1181a2b40212173ef98b9e53b47eb1f Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 19:42:54 +0700 Subject: [PATCH 93/94] Prepared for 1.0 release --- README.md | 10 +++++----- TODO.md | 14 +++++--------- ..._com.conicgames.exponentialidle.jpg => 35.jpg} | Bin ..._com.conicgames.exponentialidle.jpg => 36.jpg} | Bin ..._com.conicgames.exponentialidle.jpg => 37.jpg} | Bin ..._com.conicgames.exponentialidle.jpg => 38.jpg} | Bin ..._com.conicgames.exponentialidle.jpg => 39.jpg} | Bin 7 files changed, 10 insertions(+), 14 deletions(-) rename screenshots/{Screenshot_2023-03-05-02-55-10-767_com.conicgames.exponentialidle.jpg => 35.jpg} (100%) rename screenshots/{Screenshot_2023-03-05-02-56-57-962_com.conicgames.exponentialidle.jpg => 36.jpg} (100%) rename screenshots/{Screenshot_2023-03-05-19-32-30-873_com.conicgames.exponentialidle.jpg => 37.jpg} (100%) rename screenshots/{Screenshot_2023-03-05-19-35-25-985_com.conicgames.exponentialidle.jpg => 38.jpg} (100%) rename screenshots/{Screenshot_2023-03-05-19-36-45-355_com.conicgames.exponentialidle.jpg => 39.jpg} (100%) diff --git a/README.md b/README.md index 7bb75fd..66963e0 100644 --- a/README.md +++ b/README.md @@ -38,12 +38,12 @@ internal state in the theory menu, so please back it up. ## Screenshots -![ss1](screenshots/33.jpg "Lilac branch") +![ss1](screenshots/35.jpg "Lilac branch") -![ss2](screenshots/34.jpg "Single lilac model") +![ss2](screenshots/36.jpg "Sierpinski's Triangle") -![ss3](screenshots/32.jpg "Clover model") +![ss3](screenshots/38.jpg "Stamp stick") -![ss3](screenshots/31.jpg "3D Hilbert curve") +![ss3](screenshots/37.jpg "LS menu") -![ss3](screenshots/30.jpg "Sierpinski triangle") +![ss3](screenshots/39.jpg "Guide menu") diff --git a/TODO.md b/TODO.md index ed76c9d..48e5ca0 100644 --- a/TODO.md +++ b/TODO.md @@ -1,14 +1,13 @@ # LSR: To-do List - [LSR: To-do List](#lsr-to-do-list) - - [Other considerations](#other-considerations) - - [1.0, Mistletoe ed.](#10-mistletoe-ed) + - [Considerations](#considerations) - [1.0: Completed](#10-completed) - [0.21: Completed](#021-completed) - [0.20: Completed](#020-completed) - [Impossible or Scrapped](#impossible-or-scrapped) -## Other considerations +## Considerations - [ ] Add more comments in the code - [ ] A more detailed README @@ -21,14 +20,11 @@ - Too much hassle to implement, defer them to LG? - [ ] Option to use old tropisme -## 1.0, Mistletoe ed. - -- [ ] Complete new manual -- [ ] Make a mistletoe for P-LSR - - To prevent lag, probably only create one stage with full models - ## 1.0: Completed +- [x] Complete new manual +- [x] Make a mistletoe for P-LSR + - To prevent lag, probably only create one stage with full models - [x] Tropism direction - Maybe can have 4 arguments - [x] Issue: multiple parameters not working at all diff --git a/screenshots/Screenshot_2023-03-05-02-55-10-767_com.conicgames.exponentialidle.jpg b/screenshots/35.jpg similarity index 100% rename from screenshots/Screenshot_2023-03-05-02-55-10-767_com.conicgames.exponentialidle.jpg rename to screenshots/35.jpg diff --git a/screenshots/Screenshot_2023-03-05-02-56-57-962_com.conicgames.exponentialidle.jpg b/screenshots/36.jpg similarity index 100% rename from screenshots/Screenshot_2023-03-05-02-56-57-962_com.conicgames.exponentialidle.jpg rename to screenshots/36.jpg diff --git a/screenshots/Screenshot_2023-03-05-19-32-30-873_com.conicgames.exponentialidle.jpg b/screenshots/37.jpg similarity index 100% rename from screenshots/Screenshot_2023-03-05-19-32-30-873_com.conicgames.exponentialidle.jpg rename to screenshots/37.jpg diff --git a/screenshots/Screenshot_2023-03-05-19-35-25-985_com.conicgames.exponentialidle.jpg b/screenshots/38.jpg similarity index 100% rename from screenshots/Screenshot_2023-03-05-19-35-25-985_com.conicgames.exponentialidle.jpg rename to screenshots/38.jpg diff --git a/screenshots/Screenshot_2023-03-05-19-36-45-355_com.conicgames.exponentialidle.jpg b/screenshots/39.jpg similarity index 100% rename from screenshots/Screenshot_2023-03-05-19-36-45-355_com.conicgames.exponentialidle.jpg rename to screenshots/39.jpg From 1ea6e293ae056f102c350828f240751224fa8452 Mon Sep 17 00:00:00 2001 From: Minh Date: Sun, 5 Mar 2023 19:45:02 +0700 Subject: [PATCH 94/94] Fixed wordings in readme --- README.md | 9 ++++----- parametric.js | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 66963e0..dfdf9b4 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ -# L-systems-renderer +# L-systems Renderer -L-systems renderer in Exponential Idle. +An implementation of L-systems in Exponential Idle. ## Installation -Two editions of LSR are available. The Classic edition of LSR is lighter in -terms of processing, but does not support parametric or context-sensitive -syntax. +Two editions of the LSR are available. The Classic edition is lighter in terms +of processing, but does not support parametric or context-sensitive syntax. - [Classic](./classic.js) - [Parametric](./parametric.js) diff --git a/parametric.js b/parametric.js index 8591aba..c61b8b9 100644 --- a/parametric.js +++ b/parametric.js @@ -47,7 +47,7 @@ Other features: - Camera modes: static and turtle-following - Drawing speed and advanced stroke options! -Note: Systems from LSR can be ported to P-LSR with minimal changes. However,` + +Note: Systems from LSR can be ported to P-LSR with minimal changes. However, ` + `the opposite is rarely true.`, };

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∓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 doEwM7gtt<}lJW8T|Lk1s# literal 0 HcmV?d00001 diff --git a/screenshots/Screenshot_2023-03-05-19-32-30-873_com.conicgames.exponentialidle.jpg b/screenshots/Screenshot_2023-03-05-19-32-30-873_com.conicgames.exponentialidle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ab66ddcfcb54840df3aec1c3019692368a45e9c GIT binary patch literal 252509 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