From a25545f21627e06350cbcf0dee385bce4c73bcb2 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:02:57 +0700 Subject: [PATCH 01/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 6473974..e608291 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -17,7 +17,7 @@ creates Unity objects from the GAMA agents. 1. Make sure the scene was prepared with **GAMA > GAMA Panel > Setup Scene**. 2. Start `simple.webplatform` with `npm start` -3. Open and run the **Prey Predator 7** experiment in GAMA. +3. Open and run the **Prey Predator 6** experiment in GAMA. ![Windows Overview](../images/tutorial/02-windows-overview-gama-unity.png) 4. Press **Play** in Unity. From 8e74edd1d365cb4f5b9ac48e4b667ecda3eebc8f Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:07:57 +0700 Subject: [PATCH 02/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index e608291..7e2a347 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -3,7 +3,12 @@ It is time to run the first GAMA experiment in Unity with this package. In this tutorial, use the 6th **Prey Predator** model located in the following hierarchy from GAMA. -![Prey Predator 7 model location](../images/tutorial/02-prey-predator-7-location.png) +![Prey Predator 6 model location](../images/tutorial/02-prey-predator-7-location.png) + +> [!WARNING] +> Don't forget to convert it in "vr_xp" withe the Unity Plugin, otherwise it will not work!!! +> +> This step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) This experiment is used throughout the rest of the tutorial because it covers the main features provided by the package: static background species, dynamic agents, From 9915e2b234bbb0eb01ec6cc8f98c43ee3ef4fcce Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:10:33 +0700 Subject: [PATCH 03/13] Update warning message in tutorial documentation Corrected formatting and wording in warning message. --- Documentation~/tutorial/02-first-experiment-launching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 7e2a347..6688d00 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -6,7 +6,7 @@ tutorial, use the 6th **Prey Predator** model located in the following hierarchy ![Prey Predator 6 model location](../images/tutorial/02-prey-predator-7-location.png) > [!WARNING] -> Don't forget to convert it in "vr_xp" withe the Unity Plugin, otherwise it will not work!!! +> Don't forget to convert it in "**vr_xp**" with the Unity Plugin before starting, otherwise it will not work!!! > > This step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) From 318330961dac86b957aaff83b3b8676d4fde78ca Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:15:32 +0700 Subject: [PATCH 04/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 6688d00..a833d4c 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -22,7 +22,7 @@ creates Unity objects from the GAMA agents. 1. Make sure the scene was prepared with **GAMA > GAMA Panel > Setup Scene**. 2. Start `simple.webplatform` with `npm start` -3. Open and run the **Prey Predator 6** experiment in GAMA. +3. Open and run the "**vr_xp**" version of **Prey Predator 6** in GAMA. ![Windows Overview](../images/tutorial/02-windows-overview-gama-unity.png) 4. Press **Play** in Unity. From 8349b6f4992ce594f95a23f76d8d9aecc4cf7082 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:15:50 +0700 Subject: [PATCH 05/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index a833d4c..7f1d6fb 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -6,7 +6,7 @@ tutorial, use the 6th **Prey Predator** model located in the following hierarchy ![Prey Predator 6 model location](../images/tutorial/02-prey-predator-7-location.png) > [!WARNING] -> Don't forget to convert it in "**vr_xp**" with the Unity Plugin before starting, otherwise it will not work!!! +> Don't forget to convert it in **vr_xp** with the Unity Plugin before starting, otherwise it will not work!!! > > This step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) @@ -22,7 +22,7 @@ creates Unity objects from the GAMA agents. 1. Make sure the scene was prepared with **GAMA > GAMA Panel > Setup Scene**. 2. Start `simple.webplatform` with `npm start` -3. Open and run the "**vr_xp**" version of **Prey Predator 6** in GAMA. +3. Open and run the **vr_xp** version of **Prey Predator 6** in GAMA. ![Windows Overview](../images/tutorial/02-windows-overview-gama-unity.png) 4. Press **Play** in Unity. From 91328c502e1d7512030c8333e1eb782451fb79d0 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:16:44 +0700 Subject: [PATCH 06/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 7f1d6fb..6bce132 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -43,7 +43,7 @@ while the experiment is running. ## 2.2 Expected Result During Play Mode, Unity should connect to `simple.webplatform` and create live -Unity objects from the agents received from the **Prey Predator 7** model. +Unity objects from the agents received from the **Prey Predator 6** model. The imported agents are grouped by species in the Unity hierarchy. From 00209cd702beb458f2b2b2756cad6e387369c3cc Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:26:54 +0700 Subject: [PATCH 07/13] Update 00-gama-model-preparation.md --- Documentation~/tutorial/00-gama-model-preparation.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Documentation~/tutorial/00-gama-model-preparation.md b/Documentation~/tutorial/00-gama-model-preparation.md index f9a3c8b..2280c1d 100644 --- a/Documentation~/tutorial/00-gama-model-preparation.md +++ b/Documentation~/tutorial/00-gama-model-preparation.md @@ -5,14 +5,16 @@ render the experiment. ## 0.1 GAMA Requirements -Open your target VR-model in GAMA in the configuration of the screenshot below (ready to run). For explanations on how to install the Simple Unity Plugin, follow [this link](https://doc.project-simple.eu/gama/installation). +This tutorial requires a GAMA experiment converted into a Unity-compatible **vr_xp** experiment. This conversion is done with the **SIMPLE plugin**. + +Before continuing, make sure the **SIMPLE plugin** is installed in GAMA. Installation instructions are available [here](https://doc.project-simple.eu/gama/installation). + > [!WARNING] -> Don't forget to convert the experiment in "vr_xp", otherwise it will not work!!! -> -> This step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) +> Without the SIMPLE Unity plugin, you will not be able to convert the experiment to **vr_xp**, and Unity will not receive the simulation data correctly. + ![Open a GAMA experiment](../images/tutorial/02-open-gama-experiment.png) -_Exemple of an opened experiment in "Library models\Tutorials\Predator Prey\models"_ +_Example of the experiment that will be used throughout this tutorial_ ## 0.2 Middleware Requirements From 34b8b08c730a297a73759a5bfab6399315d18151 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:27:36 +0700 Subject: [PATCH 08/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 6bce132..4a95ab7 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -1,7 +1,7 @@ # 2. Run the GAMA Experiment in Play Mode It is time to run the first GAMA experiment in Unity with this package. In this -tutorial, use the 6th **Prey Predator** model located in the following hierarchy from GAMA. +tutorial, use the **6th prey Predator** model located in the following hierarchy from GAMA. ![Prey Predator 6 model location](../images/tutorial/02-prey-predator-7-location.png) From 43dffc90ba17da61aa9137f0be07c52162e10597 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 10:27:58 +0700 Subject: [PATCH 09/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 4a95ab7..ce6f82e 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -1,6 +1,6 @@ # 2. Run the GAMA Experiment in Play Mode -It is time to run the first GAMA experiment in Unity with this package. In this +It is time to run the first GAMA experiment in Unity with this package. For this tutorial, use the **6th prey Predator** model located in the following hierarchy from GAMA. ![Prey Predator 6 model location](../images/tutorial/02-prey-predator-7-location.png) From f51caf0e0cff9829a4cf4cf96cab1b5f24d6b7f5 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 15:18:34 +0700 Subject: [PATCH 10/13] Update 02-first-experiment-launching.md --- Documentation~/tutorial/02-first-experiment-launching.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index ce6f82e..80732c4 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -9,6 +9,9 @@ tutorial, use the **6th prey Predator** model located in the following hierarchy > Don't forget to convert it in **vr_xp** with the Unity Plugin before starting, otherwise it will not work!!! > > This step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) +> +> When choosing the parameters, you can keep the **default values** for each agent. +> Just make sure that the number of players is set to either `0` or `1`. This experiment is used throughout the rest of the tutorial because it covers the main features provided by the package: static background species, dynamic agents, From ca1f203895449b3fd63a0b79c25e547a90d80664 Mon Sep 17 00:00:00 2001 From: Florian BARBE Date: Fri, 3 Jul 2026 15:35:30 +0700 Subject: [PATCH 11/13] Update 05-dynamic-colors.md --- Documentation~/tutorial/05-dynamic-colors.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation~/tutorial/05-dynamic-colors.md b/Documentation~/tutorial/05-dynamic-colors.md index 9a417f9..17073ed 100644 --- a/Documentation~/tutorial/05-dynamic-colors.md +++ b/Documentation~/tutorial/05-dynamic-colors.md @@ -9,7 +9,7 @@ the `food` attribute of each `vegetation_cell`: instead of showing every grass cell with the same green, Unity can use a more or less intense green depending on the `food` value, like in the GAMA display. -## Attribute Requirements +## 5.1 Attribute Requirements The GAMA model must send the attribute in `add_geometries_to_send(...)`. @@ -33,7 +33,7 @@ map> prey_atts <- ["energy":: prey_energy]; do add_geometries_to_send(prey, up_prey, prey_atts); ``` -## Continuous Example: Vegetation Food +## 5.2 Continuous Example: Vegetation Food Use this mode when an attribute is numeric and should produce a gradual visual change. @@ -85,7 +85,7 @@ stronger than high values. ![Food dynamic color with invert enabled](../images/tutorial/05-dynamic-color-preview-food-result.png) -## Discrete Colors For States +## 5.3 Discrete Colors For States For attributes that represent a small set of states, use **Discrete** mode instead. This is useful for experiments with states such as: @@ -102,7 +102,7 @@ state = recovered -> green state = dead -> black ``` -## Runtime Behavior +## 5.4 Runtime Behavior Dynamic colors are applied per agent when Unity receives GAMA attributes. @@ -113,7 +113,7 @@ They do not replace the static preview workflow: - if the attribute is missing or cannot be parsed, Unity keeps the static/GAMA color instead of crashing. -## Result +## 5.4 Result At the end of this chapter, Unity should be able to show both static species settings and per-agent attribute variations, such as vegetation cells becoming From 054be6a67878b102f15627f43cf86c33c7035a92 Mon Sep 17 00:00:00 2001 From: Florian Barbe Date: Mon, 6 Jul 2026 14:28:54 +0700 Subject: [PATCH 12/13] Document VR experiment species export --- .../02-vr-generation-export-species-add.png | Bin 0 -> 32952 bytes .../02-vr-generation-export-species-final.png | Bin 0 -> 34591 bytes .../02-vr-generation-general-parameters.png | Bin 0 -> 20790 bytes .../02-vr-generation-property-name.png | Bin 0 -> 6735 bytes .../tutorial/02-first-experiment-launching.md | 52 +++++++++++++++--- 5 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 Documentation~/images/tutorial/02-vr-generation-export-species-add.png create mode 100644 Documentation~/images/tutorial/02-vr-generation-export-species-final.png create mode 100644 Documentation~/images/tutorial/02-vr-generation-general-parameters.png create mode 100644 Documentation~/images/tutorial/02-vr-generation-property-name.png diff --git a/Documentation~/images/tutorial/02-vr-generation-export-species-add.png b/Documentation~/images/tutorial/02-vr-generation-export-species-add.png new file mode 100644 index 0000000000000000000000000000000000000000..f71ff6b92870e352ba2cca0345155b02224dcc36 GIT binary patch literal 32952 zcmeFZ2UJth)-H;oVgpn}6oe>66r_oObQKUON(bpE(o2vI0V1Lx3Pd`H^j-tfq=bN| zNRu8)AVKMb&=X49-NAGI^3J>EjrZR-#v9{02D(Ys-g~XNX8Gov-!fA7u{!ff&XWub z49pr2RrMJd7-+%xt%MpirkM1!rRKZS>pB@E% zKjHDv)Qf@PoHzaF5XK(l&%p5Vk%sC$Lw_qgCD_7pE`5!Ll=;S=_o!On+ml*pfe+W) z9&06<{TzN=z<(&v{)$&z%wzd%zcUJom1x0$(@`PcUY0C0?r`J zo!LG3YWg@hQz=(QhgujXnn6Nvzw1s#kj^lV7*-YBmZyi5`^^NbWVZGM=1)AVx7O{+XLEm4X0e_wC<$5W%?*SyLL z*bed*B;6Qpo~!m=EEZU!lw8ih78sC{fJiVbE{+4ZVn%MoVD4;u4)I!fZA#y128NWU zFPLa1_72MwP$v<}Ir2Ro_K<^VwsF?dv%!KB;qlmP7WF5pS3eHELmQpy+c>z1;ic&X zzxB-O^1E8eNb~lEW4FD@pqkyTwCy?>({_huPVP$sgWV>=bBal#&1ANG*WFj54cozT z&{e->rQxT>2d{2T*hR6@^vY?Nih=9#V}cD9LX?^N!30U`+tv0XF=%8NTG^!d6M?Je zriT8``@SU{7F`I!Zb5s>UVmdJipfdVVeu;bIoIOB48m32D&6oanUePMG^?E$j<) zdE?f5nkD#CfPuBkzOgu^t6Oxm4Lr$ZEPVy(YCg75AWyAV`m#DvSyQ~dyks!Z(&RZ& zKXb&IGLKz)XOxVClI51bH=tJbEfoY$qGZ0!|&qt#v zF{MJ}lr8W@~j5awru)!cSSH zjPG0iVAhY*%3V;ey-B*TM845rA^QEJR;A<2HSUl<1C=!nItuVoV{4w%MOrd$Mh;t7 zeWXG9?!<`g9jx*hV~nV7MfF~P4b!YinVBLVIyMg~H(3JwIA7~Cg(>W*j$xO~p@h*R zRQf&_d@r(d8p$sX-1+RMW>H~A!4%~lwm0~-&%AH;MjhIOv;tPap`97iYQ1rcCTbE_ zHgI<7&r1yPn#*_-#}Wr$sn14FR+q95Vo=OdD4m9|;(n|*D4@Y9tIXSQ(-igA)F?$K z#5*@bfvEjtBG#H5q2!78dFpg14NO*%JVBqr%Ye=x264+!XzGPWXm~iRFCK^QCmP?mRzCtVQSGPkDPO+o0`6)}>g%%;O=ea?~j5 zVt8}qtwX&uR1Rx-->vxEebO4}I4<;;7`gxu8)!v?t^!@aZ{*KzfrRa1n+ABu*4nG3 zP@WwVoy@@)wEGAaO1rzx9@YwF44`>`G1{|3*UZ$JhwT9uKcb9}=P^z2nXiRpJqneh zE_sx$D(*5)LDrdUCob94?UZ84O*U3pkASgX2e-QG4rVq#PCGV$s#=?=7R+GfdEd$l zh0{hqw&bJKK_`VB;MkB!Jb|f8t?R(r1wSh@q*Sz8vz?&Y?S)eTcNGV|gY1?mqP?M- zjO=vb_VKtdPVQQAY8?Ezs~VTgQYr_8AN_$QY+TMV&-CgiurMK#7`mf})yCmi4sAxP zo3Okz8g^(AYaAkVN1KKTQ`V)d!i%f-KDbY9m{KS^J6cqR8poM}X&fUmi26i)nu_Ow z<5Y0f!{b3e>x?q7EgOxqP{MS{NU|_sBb71qiKD6jp^WH{p6_YGfmGsU#?am)%iV;Z z@j8oQ?=*dIF@4J@?o2>Cvny@+pjo15Vb+6(uK|12@4{FZ7657>HdbCC1JeiI^YD=$ z8O*&4W&KwB_{v%su406?+r4SiVD1-WOy7k}^5O%E+nh-l+$9CB7DTsdWs2%O4}`F> zB@fYK*5wiQc_vIZ?B z@uze8Ygte2ylvU12;Saos@61XR^{YQisMKdiP`|%g&{7NRUA^vN$i9S&ik+t%k3k69}(0=n3O+Ag0~c`XQ2 z%*~)$bt?b1sfl1UvGQ%8<`fymZO6L6hkyri^^g{QK!dHR_Yi^m2_d8(IKbuHdO`zZ z{S|j@S}_GM3rPB7M1b5A_1k~|Q@W_##Ayc-GBcn`aOHO=f(d#isGpbCepX|Dy3r+! zRqTiPLef`dW-4i9sPJpo_nA)Hz9X=BGQo$N6|uijpJ>fYm6su@1kUuNwe`{MuV8dv z%4Nn(+-F6F!qyP>Dmq7gu*p>pA7%lym*y8~i+LA-y+_o%! zl6-F}rS1twxaf6RyV&Oqvz`KJMrwwQPNf-&8_m=?2ktJ-zT4FT(3cn=a;g*VM9b#q z?l4;2PLH27=pE;};2*&CvX-JpN!*w;Wj!Z7``QHMlsd3*M&!;PQ^9o?rqEl&2yQl? zk>&m>`lh~o^EIdg`-#y;=sP>PX*SNzR5N5vJt0A%OjwIr+MEt6@t;HQe@$YZ*k@WZ z>I9VyT4NH5=S-}M2eugXyPQpv*gIOGOMqT`k1A6$B~+-7=AgdsKhny-YsW0DA(7UA z4z5kF(_TXNOe4yB4$av^A8zhQEB8~y+M0{ckI9h4_x;PP8Z_a|sys(MzL#{jPq-*6 zfy^@5FaH9;Bg<@|HqVqZk}Vtc;Tgnee(_+yH@%^FwlU&q=X_qN(}jIe2S6Ze4fQ>< zSwjxT5@(@y!J-n3w3kbP3};N%m4i08qb;@{VH`v>4Lk>B5j08pIZey*xz1cOz?O#bcn%J&NvQ>B?gpPEJ$W8;IWTEgsFKuB21aX|3P< zOv*MXt~NHi(CI^Wfk5%ft|>;DZDooIf|^!T%=En;kxE?lgNm%wzVg3T+pXDmn&rEU zAXyUa!kVWHJnShc6`W=x{?UK5;n~RY^yD$Xy}e@9nT1AAciOf{r{Y3zaH<(?vpS~I z)&|wn?^yOg zhdXL(r^QApeTu{5O`LbX%5w(d`~v5aI~JZ#uXzKI0QEYAB&)<;zXsrU;b zE&S`|&<8OBrY)mK=5GlS$jY0uZ2M+I^{+C)fDct);h^7Pv&?^<{13#)xB3(S|4N|eo#Za46v4aBdH2m>@S!6^LKD&1 zYs68eA1rTJN9?SXvvipELPwd&gjtg!US$Iw=n8Z={t}8szS>xw`^~-}O$Y&T-go_^wl(nVLULDbz^xEJ`d^00zxTefyHuo* z8hUq%V~pd?tzee(or%~hl4M2Q=WvIhVCFqroV0eCoBCYm=_B~q&D=;sX+skQ{1N&q zuIRluMvHx3v`-D3(~w&pFD5s!>{_vYL7M&Mn}TV|2U6gtFB>=TFTLb(O&+#dSVPn! zjQeq=2I`6>l1-c4tfVgQ)lurN)^?^F@D`J#TI&JqgX^PDX~L({pU$k$IGH<6wa>Nq zu+$OM+({|>lpm$S*UjV)H07bir#7TwYb~N9L$92K+v4XQ8OV+6T8mnbfn@leXF4aD zILA6BP`vi-1vHlXHZeO`CCxzk~TNjrbj7+~=iv?5|r3y~Wgh=x-!q_TIXI zOlBK@fCcGmV~Bh&xeLpI-;-w)!*t77KwbNtaZ{@<@xd`IQ9k2TUd3f*{$t&7U^ilC**ahQHeI zOE^JWiC;VlnW!FpgGf4qa1*c%oUs%&aTI-JgT{9hJY;h7VTv~RPdj8=YqINr?kgRo zj9ls}YEeG_Gs1_qP)x0)DTZ{8lBO=Da9mLtsq@=WQDf;onG{*!QIEjfiAs$UH%6bV z#lGvW%lhfoXT?!GGBaX#ap)hbSXg#ddOnB0DK%7hw@JuCO)g7eWan2cwkfmQ?ZD7& zoCPMgSPzyAV6T6es5@r_<*yrPc=^BEY_EaH^(H^(Jol1M)~4;nkBnvonY3{3lQS97 z-C*4-PR}Ncp2EQu5<46x-fqjpBwT3wBu{-&C%@_`?d5JQcqO||UG72bAn!v*2(XIQ zNr{GOB>di<+Thb}Ai#bOtoD9Zl1qzn_AyH@`SoG#0b=oG7pwVaxzfa^NzvDTrI8wV zU7>7JnM7G*bKAK`Y+FHTOZX1AlM~Vc3lrY&s$h~+!~icVx`bjMiSDl92L_sN+8tAJ zFf45pZ~i&lZD8yXb|60+h4@p{Q(A^0!@23Ujjd!wTRd~u4)WXwu-FiXCM(qFz&Us) z3r)EB5Nb=m8s#y{3F#DQ?J?t>f3hZQxWL7&n2uX_*ojTb57Zq!r3#)&SOu5)@Rf6% zvCC{rKq3a=j0|TSdfKf%7aNV=}( z3K^ccRR4sajSrw(aL*SYZAZ;+n-Ky&^PA2^Fgit)dv@wuAx2zGlSa(Jb2s`*)|h9H zQr%2ZzdeQFEizAFYgk|6rtPSaV=nL!gzHuDZ(NF-yoI~QToSmpiU4zhRXu|KiNb@e zg24&WV``X%X`!e1>i3@&ag|0Do;Z(nWa#HAqU;1QC?K06jdpgJ|6Vfs%c4(vt6ou8 zZ`jLbW#b|(=>3l}85B{4KtwH=a#o9ldfLKzzx~2hxp6|2KDy#m6;Zb^R&|13*7f^+e{QdUYkYF+uD)wwldJGdJQ5R)2)6A~8_PIZORF@T6^dh7 zGg&;-F|qIj-8~fZ=OT%__Y2{%YQ{37;CssDw*s+SB6qIZ$FjV(QymY%p5X2~HIk+m zT-eo)dT)1bq4qp!?VOWxPDVu4ulL9CZx@=xE3S8VeLYts7`sI;F{L~;I724c8RDq> z3f%tvmotPlg5_RJQX3R*Yh>AVPGl~oduIENf<`TwgO^>tXm$9V?~pxVb91IfB-boG zDW6n3q^uyTfOZhtk@?#AqV}rZ**XpmuS^Gng3p^#dGtlOmZuG$xYf2L;(EWwY9!6= zqh2J{(so7NVj(-gN;`);URwRvDPSr#7qmrp!QjeX|Ea>dF!e-^Ptj{dEOmR56h(-@ zo48x38|F;j$>ZiJdS%=JX9qiC^_o@Wo)k8Qy~DU%f;+mszmnT%fFK0O@vL0<6i$h* ztH6#)tNw-y?phSU@A+|860*4Fez?Oe*#YCnRT@5r>c|t7U`>d~cTJen<=sj`eZTr4 zqj(=4ZV|DnXtResuYbvqUZ(`R$@vf8Jag}doE?Zz^a}|KX7;hKwz_nE7M|Ln2l;mRId7HtI1mqU|7?-$>I-2n$y1ofds^V=R(*m6 z>U(1--i@n7ft$o-H&x_zyqu$@uO%>sV-NRJp@t#Fsa7N1x!Sal^W1Qgwbzi;Uc9<2Hs{g0@fZ2w@N~s4X-GPs z&@i=qPHr08kv?(OZVdXmPK|wOO%5X`JwW7JK3Fa~#u57_a>X{te!CgiJBIl){|4xk zH1H)JQ~70>)IIK1;>l#5n^m`eLw0XSR+HpqZhi|UO7zKWZGHU_&=vsP__D##Q<3I% z&pK@N*(;Hr1c?RnCZ4F>xg8i_Ht1#+2#vU`P?3f6@2%@-0)_-wPJ?^@9-hvi3S_lf6(}e0P)qJ2S4EEJHO(zmj<7#b{L>hVI*?iGxJ7zzL>aR{ zTF>?u=F_KBH10V$Io0V<8tbp9`zZ({*7_S+UxBu^SoX?HmaoQ`Ct{%Rlb&Wq6I0pd zL%^G$D!4|9%AUM}&|K2f|(9pmo8WuC!; zz0aZ^A&t1L;Kb5bf0L}2M{Vt2(PAKO%59_Y2(!#VX58T+nqodGf}BcWEhZG-V&{0M z**APl3dc3CaA?WgC{X3KcatM-KOZ}hz1jrs_d>*O{Y}o|QcqA%-SXiT6d$mPSsm+t z#^nnQlm4_$_}1hFtShP2gL-(x4=XYi%l0X&55M#wp~76=tfnnVsg6mxtC2fndf}72 z^rCb)^KfL`p?X-z52M4ZnR=2<9@yI(x$KfO1LZ+Sq8cxr;(JZ zAV^t=4I9inj|;XxX0I3SPIazp*`xKs2QKa?Y;z%K#KO4>s@m`zrCz!GBg&-5h^|yu zN@UNHlV>e15F7U1k1iF8H5ZdI{iSXOKO-Z4!=x9tlAF9KbHu09EzM1S3%LDm;o;&| zT~BLSYqL!1o`L8TrKr41UD%sa$hnEBZ@;lC*f;uRhS7vk#+1{>W9uz@SJL!y{;SEd1A0cJN7rkOc9`B&CSv z^G?Dig^xSP?UL80!Rqa{1)Ymfcms~8B8JN#Vi#BXD^uC$fxkb75I?R4EXvqlpvy(| zw%{x1&S$M{gqXdS!G&F>%Of&K0SX?MltEQPY>xu#Q6EVTKxTvlBR5AXn!pN0udJU0 z?)zxzC|{ZKyW6-|Iwv>Gvn;#ns+{F!T`nEC3n2^+jW^2OIijd(sVrL-g{&|robcHZ z(Qnr|Oi*>P1@?U)H;Rc&Am>;G*N-t`?vg|lDf>^|3^J(897!1!!cl|aEfPM|a+YP? ztj408@_30~8?q%}V$yECb%g`1QFNDq7x@cYG0N(KW?emrE}X9N&$5Vcf3f7Uxt6P^ z{*W&4)aBiHD`hT`y2K)3|8LI>EXsP)U=qjgp{4?kMahC_05elol&dVS%5uV5j zCWe#*;>iXJ_K(&xD26MqsMp*wHc6dFR`m+=xecy{2B+o$3LvArVXjF0dI_<;1Iql` zY8|(^ZGzok%5^Cryy@c^(P|4z<5(_-?!DeWthhke2oa`jS1`P$SQQ=*0^!kB~< z)}`V;J}YP2+MQj3Q`4XYa#p8Jqkeeuka zXK=Q{VAaoIrV3c)ugg+aFyzuozbnmfxW~GZp|xRu_`_Np?q2a^&*7JQ*Ae>a&FY4! z?)KU;Gdw=135lJa$Z2aT69b5f%Qd*To3_7=Tj;&r<_al>Z4A*nDWcg zp#@Bf624Qcpm~jdB&@guc?YDmRS$P8%pD7+Uf4sUN|BA2o8pN*dY87a&8bJ&7{u>g zDp{?0ju(>vf@sRQ>I-D+#E;Leb&^PnikX0ik&6H0VaTmcUW+6_-i9eI`MRKPs4$UL zX4(0x>P8_Gz!2 zodSMEYZ9WVGkYPMudv z(32AbdA;uS06dUJH{nV6rQaRZ?K4__O;er_IkJzNNp+)PJln%l@OC`$XC|k+c4~-} zo3F6$8~);UzMc7N1ofNn=@x&5v^ifeYW_M7h$A-Fc2^e;@4Rmz-GZ=^$4I(55yRLT z*)NY5TZS)NI)|`CuJMdKQC`6ehOjP)jm}2)UyE-*&P?{j+yD!6oY}~bi6LCGLA|1Z z$=`kK^|c{&mM+)6U)8yUkPlYr0dHUDbNzy_%wFB48*ZwtV2-&#xtImyZbSt_vP-Ai z&T%I5`uSG%veJ7raxpJ~GUYx;f^?ULu`xYx$%SXMn3H`b{dJEb-(sj~N-mk}V)|U< zC92;N966Z}cT#se4*k}7njOOZ-7DyHnlBDMtG6^KYDt^pvD0o`P;OVwyzgio#zrOV zERMU3Mk{kZW%-z)Audp?CFL`y1UJE~nibodEWY|=kXv>E-V8+kVx!)=+LOz{OIG0b zT_177!`4}Wz*R!&ggd;MaFi+sz!|(4ns+3+!RCPwpV6wQftUHBGim@;_IWB%6ZS+& z*C9C&wH7}LQB}_=1K{t=OZ@{yAImP#C^;sCqxOg1U?b`hiUXR=n`-)?Fq49ck3W8L zt4nRnbzc})8%Bc88;B<`;1xOvm z(84l6z0qkSgg>3TUFXl2mNkfsm10pdV6B?XxIBwQ_YGt-yIU|2B(#yWxI}cb;sc$A zuWKr&-Wl0rx{K9=tBhg%84$xJsuH0{`+F!!l|-qWb+MhkcFQbnA7t!elIoile_XW* z6b-bqCltXJ9a15HscQ|Y-x3=FFvLvYKF&Nxl$F{CbD1KEN|~g~ipeatY+Tz16c6w~=}@y-AYL>#xq&b1(AIs|I77S9Bim_Ul@g&cdZA%Q%T4 z-bL`>JYN6(s4%?VymnstYrL98K1U|`^;n$KLt=)|;K=xLR}@Xy1SpB5n>McrC5*UU#f zkgBtPlM(gfI{0Kcyx-tCFxj4z?JmCMie96>l-141C#8gjI?QfN-A|w|h{>JUTN4S( z-6EwKj=FN4I0M@j5$cT&f^u$z+i`Zd&!_J&CS7uwL=U zkxzEeCueh;Zy@xWs)65X(=t5)bd{pf_It;DZg@=2^V}aO6a%$hb~o6?6&-qk1(vib z0y*rnP*YMP@1cAd?rp^5q?d%J-u{yMb|+V&i%G3vA$@R0h~9oO<J= z_A@@2C1BFW42z${%Hr3*j2J8Ib?P$MG@fQ<6_%1R5>4&~;-%~yd2dV3Yd$JT#N6Kg zYIsAC^73>B)Fz}M7-s}L32|1PVXXY2X&$=XN~*0DdT0@>&&@^wR%%n%vq92(1+`%* zo+5@IJo^Zn(vuf`0_HMsK9Ju=^ChQJXgfMyW=5PT_vi>MMPh3v#M>;KLffoYX{5@> zr$sS%oGkTKv1kX-_pgphD8ts#c51qV8IV>SG^aM1XbycDBTP!`ha^ui%qJvU1!{CB zi5O^Vz5@XHyJ=9$A$nmzgOi(kgcZ80lCB6r(U)ZR{T=&$kAqTf9zW*1-$`JK$Icv7 z5>g&1{5VLfTK}#2^~IE%Nc(z9Y_SPTslWtnJ(3i5oa;(#+?!7${APuY^&FmO4nHWL zr#u2o-p|huw^W#E45Y9kC z|Kl`S;07RYbe-E!@XnNj{lOGo-T^WI+I$*VNJ?r%JLbB8fWUm|A<05Z_KF~>?bM~A zLikndig&(}0f$a z!)AP?ASPaTEaWZIhrWFCdK$`tbCJJ}ziu3!S~YD~wExRBVEN+NgE?$?c&x9jJ#`1` zwsZ?5cPklACY$KRiY1rc$8QooGj$yuirNOM%xx0_*mW=KfMlp+$lta@?&kAjgFTIw zC!_zs`eU+`_MXx1F0NrS!{6B`K2^c;x$|j4R(`DbWpZx1`2Y=pL~K?|O2<%{;Dl1+ z?7QI%3Ac;pg#jyxsrk(_f~pG#b)Trdwl*X`cjAKRQb>2)2vBZYQTYyA_D4}Zmr;Za zn}lw$I;+D4x<5bXPFi(d+&Ws3%3}v2=40VuayF$14GX zn0+R4#1ywLmyd4nk}CZm@+*NOUboG0UmGc~t|5azVB3b6z-4l%XN{YxGt4rNl2jtk zDvUNL^sOz;c_=q&iU$Rs!TUczhuFx625*B(B|17>+jl#xF5wb_Yt#|M+jJ@4Rb^qN zZW%(6${xK%sPsAY5w@rcTlW#m!Ghij{akp@P9yKT>X5+Tr2xVN9+oOuvSt`yTf=5HpTPlP<#H6rk=0y&ra zUetqZLAkY0n{DCRc5{0>Ao>i>#J7h*o0QV;xEG8k;wsq}J7L3G?u#zEA+coKc8OBo zO>t{&4`kR6`3$z$hg`hTQS`eQRBySo(Yg|arEcGTeog)MojXN|!X_U(U)(7PbE8)L zZjt6zaK@$Abw4R|Sx@dHV5_g|w&& zT@q_D?ryA@TcPjk@C=SsV}wGNcf;(&cP& zP;hIoeRM8h)lCT_=;Gx)&Z|VJ>(D}PsK-~t`0eBvhfK~OCVQ3|0VT+qldh3n>hmB6 z`rg=F>v3LJM$GG1e*DrB9%M(HytDvWA97l~+y^*=ci#Rim*aQ;7DxflB)tOK=qy_O zWO8p+`}!nkE$=1$84R-WyJEv3E<{Lidf3bXyKO5mEbMOy^U6Ppke^`x{kH%ALYa9KE`PH?Nm@s)kql4mc z&yiQqs8TpSt0wo!)|~10o=#mt`uOIs1TVdj(>ggnHjTWB&9Bs3#IR-Y^j2ui!?`G{g~~=eo|x=XbbLNq zxu+Q*Dx6*B9HROYIyp#8_h~OC&cCqc^|g2%~RL(J!Zkf#Y(BBUGgDc{jBI(-g^kK>*@BLNTGWe^N_X=VNvz#~Wf(<49q=6Uru zx;7B!)BIEEGNnjCQGkk1!W9*YKA6T7hLg3qCkJrgFahj5Z>=)Mqt--Gy}DKupyQgQ z<>0jxI$B*b4W|O0jAzJU!;*NHJREAF+iiLQt8uG4V3my4ev%`a)pemL#$gJyPkLP| zsL%C7UX0(a%z!w+Lzoz%@1#x43)gk{*K>&=fANb6O8(7OO{e~L1Yz)hb_5Ce3wzxU zfrh=oTxerXIhzI~OTGEJ!o#S7wbwDF76PIEcXG}Al0Zg9`wAmWoJLP_Jh?|B9bZ7K z(^z;!M$_k?A7*ocTIAF?O$JBuI+OlmS1|To#`4;Z^6^Tr?IeC-{DJtzoZ73XfU6o^ zhQ?M=$OG%_IrNK}YE(2u=jD zhfFv_KXLhCu8gY3<8tD@V~~Sh*>!P0bL)1?>zVZTo0;xyAor|IbbzsV5o*U!9@i z8xOET@LQ7V^IdE_Ywb{dgCicM9{$en`gzxm^Dfpul#l(!yXdNf#Kw%S8D~S!tLxc( zeK2>U$)OO+#bd{0ed29xaQt}2L$`}-&FjkRomL%USLs@mGW4I@8P`Qb9>ooh4VNj_ zo204b>;o|%pNYr+$~@!C;bFtzjrZ2W`vhEX*%II}$UQt$PHLxkI6eS-xR$WW`uK}X z+Jw>XMlDlB`mI9glz?F8b?%fG=+FP+7mv}rOd)Ty)H-k@@`8u045kaWR=RxrIYEZo zQnSL<3%~AQ!!jRx3GRa79>otMX5_B@2OydW2|@~kE^bpL=OqhizK!IWI~|+K->FEB!Z&?ridgmQrW( zB|({;>41G#&<2E_m_)tu$E5}%m+XJsOe^svNI5RFaW79Ha$G z#L@v?M?KHHdPgU`WUVKuFy`!mRnPM{FwugUyZiulYeNFI{|u(drQ54PX!g`NS+SLw zo$76S-7m^VNNAJdWH06kpl?Rpm-E3jL3y6k#tA%0!V2=ESa_bQZq`?!(=w)fW?yI4 ze;lp%m%1XniDR^#n0GO$1p2@Yn_R;(*)z7l!5D0hfJq)P%Bg)!Zj0;j5&d8~8-o0L zk$lj~8NG977i^*iw8uI^#76aWEU*8BRsGs1 zBiWgf*p)7}06{BN?n~}yeT?0WWyd|D9MF1KzwT$4(UeCL(J}_0-igy9FjR(r-KB#D z`l3CuEhTDVaKKC0dMW2l2wH=SDo~=-5VUP1N}Ao7_O$q?5kGgG^7BZapl5E%U07|2 zi8HuQar|~d!hJ{}w*`7-5qD&EK_(3>B*+&LVSQF_{>U=6LOKH~X?66m?b}An%*U7O zp&8l`-ZCx|F8lkh>%MTO|nE!HI=KmJvSJA_x9_;WIoFFyH&Y6==4+l0}b)bmX zs2ix5=E(ARy{Tdhz%*g?1%XD|q-jVBVqf5m!~|QPbZ$9LrjGd#+u}G8Jk!?7_?nLW zTTyJFN5gghj0WUmRj|I-_3(>sZ+#wjDnGjdM3lc7QwpQK$S&^*LMdCS)KM&o(eNFfJSWIVq^bB=ot&2{+ z$gWFHP)`F2!)VUo57v1zgeIe+`}hjwiX8GW+PA@C(1~4e0S8uDa~F^4UA}c7}dGWDjA!>iv5>n3uh? z+Xrx7$jp_&baJ9X)a5_BbV=O(bougMiUz|!sTx6l;|{}rHC5yPGfv3=c@eO&|JxWh z|3|w2KbNk!j*tH&&^YXw9j9|^CXY7OV|(7_t7J&vR5jmU$;Q)N%qg}uWpNMzTMAY% zDfqn5BGKLkj%rn)82k9kd%HBIN<8{n$B}CZjAS@Y4c#lEWg8dQXd30~<5W}+_-W68 z6A1I^A&SF7iSCa~_EGx9gsX49(n6-pr<2fl^C0liUC4L&RijX4L@P!O1Jd+sQap)x zXoDKL3WGF#BqXfce_U|wVT#orPEx!9nJ|pfUI;fp61U8BoEv1xHGLvKor8}~ug$|1u+bFdQ_Bl5a(|5yo*_J?IZf|#9*qX-_&RbELG3&Ew#IsM zKWu-Qw0Tx$h)YD{TFbpY!ZC~|ROq&Z4Nb*4xJ3K=(YQg$+IzkG;d@FU`^JfwGgpJV z@`b(H4H|QKx0OQFXSf4P%Em6f5P#9KcZPFhF%v}B$R|GmMGMHwEjN{kTKfKY6g9{- zJc;@Z8CAT)YZK;vDkdL!kL&U71I91^iB&cJ;N0%DO|8*#ZjlKat(|Dz>$)#YYfjM4 z8R%lmn|vZX$>?$F%Z!5boSu*HV`^L63_+m{`J_-|AQgFMu5|m6S|)}wPEPi)|Z2WgZvuN zk9sG(Aho7Po~#owLs=zVw>o!!jj3tD@~eu+wZC4zaOWT|jMU_}ssvtc-|Bsg7PK(W zM3NN;r7HyJ!<4CC_V@R11JDkr<=H)dzBmJ-eL+=Nx?Er?_{J6tE?%k{-Bw+bP3PuB zy-QG=NNKQ0ltGwqNn&g-Ffp_aoQvdG0XFWE_*5IRbpEL1DX+Iikltn%s=2v2VbZH_ zi7j*YwWpU?Vq9EKTiZPXfl!PJ=U~S=Po%a$m{o&49SnxGQ zhUq7f-%j}gTf?w*|DVJeH|N^Ay5&FL-#6mx(B4CjWNruusKq6G{8%zMX))!Cc9Vlr zn|XrP?|F@gbMw?sX0S*GEc^J+`ZmpBCi4~}1O{d4KY)3xN@qwOYm#T8<} zwXQg@W9&bzycu&_fgiC2!9vx;!%XQD)!9a{3kerzVT9rI4z!wGmyuij+E(l(`8$$s z&M?}Osuq(W1b*pU?o?z*@_t&4Y@ty;b*mRgC=tM^rQhySMP8T}l6e*w!RgZ2^X{Ew(RKqRN_8l}XlIb`*o+ z5CW3+&_zGKLxG{yd*)M2x%Hza=Y)}S)c&lj7OSH~{TYi>)t`Cu{A!9D%CzUTY-dJ} zGQl2z7>Ib|2-$EmbWT#dN4T*ZNVKO8cWQzI*NA*@3fKG5RQv%~=gV zp;J1~25;wrMmpo423r6qADHD-T*bBs5X#zZ!`t?EA%EoV;|a_|EOP-0X(}Xfd!*d# z3-DjgjhT$=@h=Uzf_!e>Ht1jT*KD7wSh!X0i0{*;Wd@)$P+`2(e#u5iXZm6tTXRqNKtvC@Eg}~e7 z4uJ`*(ge0ubY*SeJSOb2Td?gN|Ha)X#Wh9l(5IMNn(3{rw;Q ztttx&G_-(fUH@;}NsWsVAi{mKoiyQM$XYAND&I&tMD_r6ig zN(0g2YprM2Dz8rW5`R}!)v@XSm*H@q7`R~tYa(2rnF^lRY zeV`&$H4~e=*Q&U2c%!uJSW-b$kC`(N8XXM_f`Xs9#enKgBb(q ze)AH!351yHS5Q%sobL-jEp36!>hTuFXt^Bmz!)#JJoTC1Il~B&-$mfzu0Y&>V^+3Y zqPw@*cdW~T4_6(UIdluM-P;#hqZ^#cR6t5`RwPj zs?3Xg7cXCq+6{aOc3i#y&5Er6wDythH**J#hLWiTR?R`-+NLrsv13eZvn97Zm@c~^ zc~58?&STt<^j6i)jbaNkCe4iYY{Ry@rn0l^*_>2TEJltA-Mns`8aO-(%58b#_Vz}X z@3otufhXS?p(Zb!-kk`%kB4;tjy{_;cWu$3?~QV5(EOa_pyT49ws#4$mE?_aDsh9% zyz-2qm{X3$7V?Y-zUlY`wuiVb?5m} z8t<>|6q@jC^vRw*w^m!3Rbs5@(-M0L;H`9VZe?AgHZrsVq4Z7{#QTeLejt?m%0f!a zu`sDr{3f_zf-^Xv0;JVcZ=tK#Tk1TjCUv_dt0zM2VH^v&)w*EbsMaC>kgE)k)@Pu+tq4WDNB9vGm-h$!HV`DEnib^5oDaUeD}J2N>K_S_h#ILKi-)TziMEK z_5UGTc+NPhWP%5B0!mzx$q`EYmN|X2%#Q6IEwE->h%Z?x5i@jE#O$(A zrbHs^B|(x*%F6zXMjo}3qF8{sgNKpiT{sIdOGz2oWsa;z^CB%zF)HqHKPq{@on_DK zbLeI0G{_@vM^tZqNycYXvIV9N;?ZqV6zk`+hD4X?h?)Gb`|?~)AFZ{_t{Lo2S)gQqMVf5%V|8U@`42Luf|@Fzi<^+ zR57)bI_X_RkQsRs$UEbv(wsBGQOX>D0V|t$91Hmw?YxalRydm|GoB$W8d7f+=n|{c zOcL}=q=r!!U088*^>O)X*?QONsRQiUoAGDyU>gqH+F7??XrSYDzxd^ke4oHGk;c%= zKPV7wBQD#>Ldrl(b>!upOGa5GX2sV8Hx-VtHC-qu_4G?}t{WW-+;O{R$ieU$Kt2}| zyh@5rY%i-Xr9#()2q9)vPqE_PHKq*J`Tt-aA?qC=I^~UwiWY6zp8B!&_g-r#W7A>(;G=^z?F|B&HV3AP#^gdU32hoY^*zDnIctQGR}2%FS%g9b)M`|d_7K>p>pRCT1qtKuUE`9_Q1Dq)7ha62lYUcfRv z^8+U*X)d5QIeD)-`Bghf1(&y^YKv5W??EUsmWI^&$GAm^NpZb1VC=v+x5#DW{-JWn zut~j=cRrxpRU_O*?M1Ago#7|sndZ}&KtZ}4FwiKf+&nQgwHRpS0FAVzPQlD!TbN=2 zGnaHxP0g@{+bbZLk2(eW9Y(^VWsBQqjLlzcpAhIU@LEh<&!k8iV!Rui>&qqL9gLyz z(hJQ+QyBllbK_Fu$c|69U@`Ix+WD$~j>-e4FVq9H)RdJ9zv_^}iCDN-_ETD*mRdAe zGjsRu>rS$3#wFb_TsXF}QMp_DTU3zFb!kU+&&iziq?HMwQjj(1>(z*|S$9 ztyJ&tk0L9Umz^oSSaNhA1VV3|=-iuT?O1{lTRh3m^$2S>BQC=rOJ|RBt?W1616L&z zCDJ`1(;)vxU!}WApQMgLVGYkQm;D%0Y!~+cWZy#|+lqc%Q>00TWk4MkO@`(#k9g0O zpkkrjt<Wx@WjEC#Q;q05LZ**l>+jY2U0IiD5mtx9O9T?JFt z<2^`E{R|6(7f>qz(isK@7Jva}b4+`u6511dngk>kt~t4BMywtI_0Z#Brv5tX&{FS0AsO{!0zCi`z)AdY{B|3fr*P9>T)U8@t8GCZnKG z2AG*;v%g+$ZmzvFP{uW+v+A6kOAd~{M92O_Sn}e=0Nf$@avF4m=7n8fue1s#7?qpV zY66TGP0eQ>ml+t|_5uH!8PH+#SsuP&`QkhKj1t4cS&V3`&&rqTLkxEZr>C<-k^il{ z?~IBn+qx|yE!d(WCIng$X+$ImNGu~cNS085A~`8J2NNP7N)8GJg5(U6QIsG_auNze zGDVS!P*iy9fOhx2eQ&>SjQ7U-^UmPMq3YBL`|Q2;T64|0Hpvd-)N72?b~3ya5)u*? z5s?IZMnneIYroZ57=@A{lJVX=Mg7(gm!Up#LpBvOJLf{jw*%=;z~=_lu!s6}Wubv* zx@0;Nv^0(OjEsyXZO?POsa^uRe6}4Eb5gMEO6Lo$J_*1{ov70if=5@iW|mB)iWH%$ z6#g0$SE&Fmx|h4CztYM^wNm?5An+q&JI{GtL|&~LIITkm$clY4&8-2YWj-SGp_C`K?wvVv1 zWY!cT2(*GLv$*}*wNH?G2Pe7p%dP`A2^3+d3tyX`i@Y&zh={JY--;NX5CA&PLGl?! zL{MO0R4?463hYckwLVeDsW2o$nGx~5L9NX2j79@{b{a}Wv_khj)4&fs9d$xZ zNvZ2GBUipj(@}1n{JKUKwoPMzKq6oz5OEo5@6*ju#W%x>w8Vc9zWu!ni%}sMMBaXM z6wccw@298@RdpX3x?t{gN*q$68N>d4wD#B4J&NElVClv$0MqE>zsT5r9*x{Z_7J3N zuLc~fAGOQL-rN){qSIdNf_{Q*|2c!>!{$&o;?#hfXF0&x9W zBKG}A5ds`0(IGuhD$~w=>csXQW{dPmeg-xf-V4fE9sBV6G?HSEz(G-5NGH3Po14(( z7c^1+MzP7*SdQek6Pk+`3+Bh?UV2tvMtY3YgPqisw3JNg0*y~MMn%PKiU%m4+K2H3 zY^I50%Bk9A;suyqX+9TAP~1G(wu{F#QS#^ZZG$Q*4ldsTo$=qp3s<}F4Y`^Mt-4-U zdf|n}0cy4mgqt-_Nq5~44M*AF!EnLul$6Q~1lZ%$Dj3jrou>1+=%th z+k%E zFdW`B?eKWLmsfva2VsE)#4&Ih1t!GA!~n}(BaLO&OckS?k=mHK z2HLH`vk0W>R;m$e`Q49mF>;ZIU}F4mS0~gp@`=6#u+Wpx%+CYbslEDa;WkJ5tGzZ^ z_&RF_bdQ!VqkyBYnrHpi``EXXSWtbUP$r0o`n<};a0~l}e6cn>o>4tTQ}FX00J0F) zd->vy(`WOPSG8UeLFRIbV|lxmlgczmVXLg{{(-OYbFj9pT((@s2V(Mmy_efw44dSKN38?t7OAplLrxqV`4qul?+~PnaeCspFx3n@o(G{*ALb;l)oRwMnch5v16XxG{d&%&__an;03ge=B>wxr zyy|@b8V9yx5C(1R{9T)R{uF7O35tQ@yNfy|)R23QpZ_K@Z7KA83OE!V7M74G9~tw< z(;)EtFO-XO=pwKuW@`(hI{9YL5KF~-+_sWj*!)5)8L>lu9FMTz>EevFk;C-P9-`aa z8WJLk`=U1)kEs9R1fBnZVg?HjBvs1B)^f3Z($YG~%u+1DY+~_^a23Fr-h8Oa0vy+9 zmM{AIJX&}vU$r#CtwcG(V9)-N2=;sB(dqW4K>tSvU49I;9VRsg9u+pFbR<9Yh}5H( z8#U3qR(kqzLNydo5>2;iQQAk{29D1|Xf0k(L?zQTD=T?DO7Rat+@(I&4&R0SjB+8g z1*Q6;JyJ`6_m3TfetumBtVJ&lW<~gWX3JaAde4R{uQ>I>+pt}D(pmUqwMeAUlcGg0By29abJx;~^OYok1Bj!d*yQ<(%zDlW$%`j6Gm02f(%t`(|q;1=CR ztvS`S6yJ!d|5d)_Ygl6f1;HUZcIECmd@n zbTf1HzmCc`q^M}hms2(F&RI9d0CR;U;xWQ=z1lXcq`|Nbok*nSe~^5TGl(*xZe$-G z;J=b?plS9$t6Sq^N1*5NtGMNzTW4Jy>hg+}HPjZKcmk|1nt_+(&p;nK5B@I1Z$PaD z5ec}V&GG0g0n=u)-dtno(I-}%pirJPBx8O{1>242mvjW!lD2j#%WkBnQVV3cXsnbyw5Y+kr`CR4eZq|?Sp@g zV=V(uN2O-AkN3U7nfQQi?B7K__^7p2g*@kn?&!@kZQ8Jm+Br8LNG?XV{LabgX5jwg z_U7mtQFp!J%|hPiw@n)sK=~cs3T)>${218z4>1Sm;Tut4v=}H&)}TSZb?c)7bdsp- zfI~cxA(54jJS&)YcYkq_{4Hj&O_|I+D5%DCxs=K8}wSYej(v2{Rl^%;h%eziq_eG{aKWnT)k zwqu7IY$pWlJ->0nv+@QYQ#PNSM*rr(MLcAQqi72Lsi}M3XPvSImK1ejR0|#EU+hv) z5N>4S*QLm>{o4e>5?KhJIvwNF2$n{k`c?mCmQ1cJ&xe8Ok1|Fa6$XO3pyd1#6{Ex9n;o+q_OskH!R*9xM`m%+G*Ni(DJdJNp zZL6Bz&aH}>Ra`ZnWN)LZ=rXT{HZS<*_kd92z;QTk|tA(p8xv;`% z-W}jeqwJB2E$1IvyKMMK!K)l3d9Be|enH!n@d8=nu~Zetw-u$DsrB>9tK$*<0u=gR zM5Uw(MCs+Po{iMY1QvI4YSTN(IOJ4$jsGJH@Xq*e7QlD)*T3l5puwLmj<-xVMhk4z zZTRW%{%=r(5Pi2vD8&8g!{)}HGTNzS@FH~a7rtRu-fd8`G zH7*CIzz!VR%-8BpMc|ap@oAI`Z4MD>A@b3tFzx>VTj&38)Ff_kWY~|jYa|$*3GlT5 z7ijga3V*$Q4=THZH~WaL`zR`^%w-m*fXpPDrdq*y4%^q43U)R%KVKaZwI)tqAY$z6 z?{|c0!2%2^052au7VJbN)wrxUJv#~RFF1fzTjIQk=GFrxf@4kZP9`QLS%7HJjWk~y z^n3%W=&(K6BD-AJM;X8-G^woIki@a_IxA9i1O`loN?8_l1RmV9F}=Iq3*Uky+Sk}V zv{6G0;w5kdQ^jXxCMA)G?a7xXb&gv$4HF9VR&t7pf}w1{nD!UZa~_oYGeS$E?T$H8 z)^*?7^zQo#41!>SaO+9m6cPuENXR zN3q!}Ux@Fg^*&lE$oO%5D4gj&tL(>Jewk&(Nf4CJA~gl)zIpX6Z8%Ac{cL1DBH?zL zdI>vbL(=S5Ted&D!lEeG;;8j{YgSSTOQ$BIUw8o01jw@tb^pv@%14)23A^ne_zu73 zK5e;7KRRQkuBa)0`>?s^{n&;_(+>~_1K|TP5gh75k+K3*;y}SvujI4iS;NzKwX~S( z1*^-35QG|j`VoVAW}oxnJU3SI41zyn3mduz;mp=er~5IS2GWj^7W!wFy|r-NiDun< zsG=&F#>;q@_wTx+&HDGqW{K}FsYy}bChQo|GxDH)Y`y-qH7V}vH6B-Lbw(SpV7V=I zrSPpnaVl>4Gt<}B>+9yBrTV^om*}}>=$TkF)8q=+F{%J9rD_<7&45C>D}5-wzTyc+ z5Bd~0;`vnSb0@-p*F-LIPoi1o%}`q$&8yY`V6f zS>Mq4XGf|VP2km(Z8B0x)5%)1dwx~K!M`tQns5>B?s+A58OKu{8VAn!a57Ams9a0W z9V;CA<#}P;7iTSCCk)*qmmI+L9sg7j(OWq(qHp@zO6=~Q7N?X?=rGAK!5Ukf+vxIA zih-)MZm^s)ja&U?iSdzuf_Nd!tCe+6dM=$052w~2PTJ0+tz^3+R8x}f%oyFjo2oIk!borVO5v8J^Oo2LU`bD{A31tuxUQNZk>ATzh8DWgDXmVUDo1{!xPy zzv`lR2`BW0Y1K9Q-;^YILGCJr6Xo6)bX4OCe8J|?WZ~ggI5Mq6+xR{VsT*N z_LOZZU6A-(w}eS7$|TTrV6L2X@NJEYd-)rT*r}Vj-AC$$KYEvvs>$SUB{i#VpLCsf zus9`H%9{uG9W}@&JXe0ORijf*P{e4Q`Kd?Nv2){Hsr{6fANn);^!o4Yk^^VpOs7?r z|JRybojVML5U6mQ!gr1W0F7(OL9@I&G*UH!?7$OrE`OVTf!^!3Or@@fptg}8R!Wyg z0TKrJzc+NL9hlgajz`K{P_uiVYlb`dwJ0&``cCP7?wB#~j+C>m*7J01C~TSt-M2M6 zcB$Z0pCcP|t_?}PSabZB04H43qk4T)k7{ykXFAT;vL2kxTGt?1tmM zf@(bf4^;4dhVT2`mG7mV_I%|B3jIUe5(g{n7yZb`WIno#*H+V`(;*Cb3v`z;+uQVz zUHbCsvQF+Te~?f%S)m@8i)IM|(Wvh+n=%V6N=aa_90Sb%zsxT@vh|(&AZj?6aKEx-C8ouvCeu+#im<(JAo6qr5%Py;|+z zX??S7clNB&_^k14Mi(O+b?zENphUs^=V|si8lOqTw}kD#U=YYx{}O=sTrQihVVatp zY|SyMeSKC!Lc$GK&4rE!Mj?+D zb@&i6u~s5Z{1yP{GRqd^HsDp-yj%7AF@XKJL0YR?Knb0MpILjtBE}qdto6$0X3my0 zc8gM@(JjA3wOTfX$$T$mwtR8j6)F=VsKB;B0AuPy*iG!N1RUgUtE-c7`IZ{HG+J)Z zrI_|1l~J49zTkYk60FZg;PA-)Xyo zF-$U{$9cBZle(-%UP?xH#^MJOe!Wrdu$)Wr=BRwVKD++Ri`X8Y%CROonz>e>vn>A7 zlu$^FC#851$J`6dt50K}V%=xkE8*9~No8z@yRh|_)83vEwoa4MXt%5Qf&7cxxZOKe z*|5v^rsYB!3(K`6f{cn5Jw6g>Iu_d_mof`36J_6I{aR62!4Y=-EI-M`%0a&mS+dj zaNRLG6q1+fn0hM~iaf3*v#dqObrbmPV*gE$=HO>tGeVNBA&WqiN1~?zT#r z+Nt=qlm^L+a`&QX9ocT1mB?QA0Lj&v%5}e`_%0)?c}LE4s+Dy>{tL6|^?oA0EqP_O zb1+p|E|_%w!}QjizFmf&1Kl&AVS|Fr2;3DU<>{!nUmJqQONO});oRfvM33unp&EG* z1Af~)(wvY-KOuGp`!TbN13g@6St+E;+QC`A&%CqUb|Oq^@>z{UU!H03viMxOQaRsH zi(bZbt`*t1r3g?X*WVoSyi25Ol{~L`A8Tp&@T@D+!Fu|nAzP5p{zFEItifQZR(w}* zfoTg%fw=9#s6cw4=I~$#%U{J2d6QY&omrk%>V-?1v+^Aae%Fo85PnUe)jo#X&MTtk znj!lgc|s%Pgd14F2_47wNDV@Lrzm3%6M9S9*>(#FF-mriudss!!B|f1Wf3;M;xw>Z z<318Y64XSyMhvj%kl*^tw1SIXppve1ST?0LbK^7X- zkX+$lU!Xh@>UJf_ec7xf7<sPvVRTpfnB7OS@g+2_?KV^e6 zuM=xOINMONq+vpV)V!Jf6~=Uy!=5_2;& zjt!Ayfw^s{Q-K>!wf&dV153vJ3dG$jG(NI_lxzHHrT(5o`Xd4Q@4D5dm4LMWO7Q&& zvGMWp8lHlX)sQ82qTKt${9WcvSevhR<8J75e}0rCuv$w(+!2(|6?RD5BiUoa5}0CO zqpQ9(vI7ZUAu6Iy=dqO(SYN9hbdfe~36ANt*S}-(*aAJ-)yWl7-R9@#CkWX%h?^`N z94NT%T;m3Wg9~Y@Xl*!C)qRCi`T&OV3c&TKgx-DR;T5Gxd)8w0_{zbIl{3)>=x_5~ z4^+rlBioc$i;CphaV;8F6q2)pfW9+TBMr$wCnT&D7(nj(=&@sv=1X??#Hclg+$SnD z#H?&DZ{=*#mOzz7yuQYGMi>X$ac~DEWGRkamPjJlc+R>N*;q5}PNLtlXA08N-Num^ zA^cWvS%?KyK{tS86RQ-+aIPq0NJR@6in>zjrIH2E~^` zmf!?jTwLdMbFUoCD@mveiA*gS2f30dM z$i6@5(AF_$t>Y-ezU%*<4a^SAYb5Mp*nEfo38{ciXUGEDgi)tpjF2!P_A1<~4%^@$LZ>*mL`1af>r0oOMx$Hqm+v2%{KXhyTh9@EP9b^x4xY_= zb@LzKCoGXM1`h)PX-E3)!b}@baL<*;?QXUwg?>WA-eU+RPk@|b9kBZso);CK{CS@H^*B6 z9dFJUCoDDthE#P4_>hhEToI=xGw9x!ER-#Ft<8DL$jKp2(e*x$b6U%<-sGHGazkzy zIk{n6=`7UO97t}7s$Xn|g$y)5MRUGyfw9_ERdwNd^xDKv)J=RFLbMS6j>S1yy4y$V zOyGc0a6S9qEzqCJ`Dr9w$7lFn2f*(QrGXrlse3bxI8P$ZWK-tcZQqL8CQ_yy@vZI= zjajB{wwS}6&hese@Q&^T*7#Bdt*q-OWnm)fO3SK91zSAbCeNb*+<@Y#=R)9NLVh1u zClimkGQYgOT0xFce(2{H9uspqvcVX^@}P_^Y0VtBDtk`2xF5Lb7-mQlC;4$?nUK1hgWI-LIg;6Ei`~>5V`xVbZr5iZQg6aR6z6zzVsed zjR4d83`6d+4KZdR`;Rt>hM!{Kc?2WaO90Gd`wa&Nbu`F2i;*JJA8-6oyeeVxh`(5` z3t;I{CNO2dcFHn${=<@Z2(l0G>(2M^8e#j>?{4aKrc_eNc%*Kv2|q7xa4~LWA}^kt z9{rqmgNlLT)ea3hgt%+4RSl0>wV;O%Y;a~!QR($Hbep^Xh$teEXwxbFVOHc6R~UXM zk(xk>1nmgr#T4XWVu!E%H)k;3&{NDv zasxgu=B`&jb^!TAQZKOmPa_WG*#BF?MPz+L&8$KGcI25*K9@HXVyEY(smI z1G*lDD4K|Fd~o}h&E|zR{U1!l|3`=XNtsD*gwSdU3YRIJjg*JK2xC}qv3z|1-{shi zF$Dn)vZ+}?b!PkV=9JP>U4R|ir6m{kVIVhUvhRh6y;LP>l!vg6rRs}_h#^)Ogs&gTApx!vndo-5J^}}e8VkwU(GgMCFbUh7%X{ti&7T7i2!YH7Nj9N& z9sV(fHPSRWfet1sTZR*11kX$m%2TN&D^0=>{$hxsn^-|hr+ zb;nQc!x0&>{u192?;}`$t2Aq8knrGJ%go}M#wU|gX;}!%X9ES0iiS2|$ApCkhw$yxof!=$fHH)Xt| z^G>AiPEvC8N`3OetyY1>2<#3RZ=q1Ws}X0k_jjiq(DP1;bS3+Dhi#{V4~uZLPk6O9 z$5+0*Y#lr?h$rVQW2r`t;!fwLcICOu-y8s))YQ}zKQg89UK}AbAHM@u&}h)e7ns zki(ag_$B58Y?xOm7xT;zB_`Bta+v)pve7qy%VpU1-W!VWb<~shpckUPhg9TRCeu<^ z=?NUV6qzC~ipdL)Ni<>6fI@Bjb`g4*y0ddpG-7aIVOidkA#Cm$Zr#F0g*|S#4)cr_ z8T!}I#xaza8S2&jtQQp>g+RlV}%-1WY|sr%RiHvnZAC znElYfsre}Da$=FK$7O6bH+KEg%X6!Ao_Ho~JI~Ihg@<=wkwfgwvFh=Jqr!ce+)PY@ z_685u<_BWc=cpiCn) zgD3krq=0Ag`WXYZYyKOCzxsOMxDl~u{+q1$`J7l*--fS+a;(&E)+IP0>_RbzNj)K31?y!7kE0w1{Sd)ct3lE)2nFb+2^Wi98M9GsUA8v z0->FFZP`tLOToh8G#)8<*r-O2dn^#8R|-`jG8yK>u0}CCd+FBVV`c}NLM^`5RUc_I z=IDI4$o1KVskI`b@OyzqYOZ(9_q$a8#^v8-FGCiNgC3pAB>6mJr4oNyz&+5v3keUj zm%p54=ir!rAHtzt(A5|?^ooW+Z%`s|efbrp@J8v4fxh9(ZneuU(oD2?!)T2XfpxCF zBRI~6dMWGO75X{y^lQPxH5bY$ zlUnILZ#$f|GmumGt$_#660xe1(3k4Ic!)R{<@hSpT6A@hC*`EnOV+iLZ>;le6Qw5X z9Q_qcs!Nv5QTR?0-<$VTDml^*cs=Rpb#>op#?~v-U{b5j?E1PFef{;beQ#)Nc6+~! zexCmQW=fN$%XCFm_JEM*B%-E}I}Ai7kb*%pst(zcYFI}K&&C2F)3Nlo+`BnDF_gXA;< z9S`NkuYB}6ynnLf#9HQ6U(2qp{hpk2w5s`*N*(alc#Ymu=i~G}hsat}F^vuaT&eyY zNT=%^nbs~f=o5MWD%&!kV8jTmrJUuxbOBxpH0v`4;&N@{hi4?cw%W1IUsuEWOLVbM z&aYu3Nwsa2CrJ(`c}cFx4%A0dQm0nGpyuVvRpLu=LgW+*d(AIf?`!L(GqbMKNSq%d zt;kQ5>~B!_%rY5FxJw;vh_t-TTOqA9&ZDRPxh)YE9e|ow$TW*sBp(q==&*-d>ty^{ z0-cvvH+p0+CzqP4ZLk;1;R^R$MH=r}o{`GpVDYkLqrN*-1`D;E`HI;~xtba)-nz8` z*5xsl-JH75oE| z_{jC~B>!k}b1E^5nhM&{dW7q8;h4VHnlZ+Cz!B!dFW@gBEM3`<^*F5AcW(pBgYOT> zQ4Crd+}&pkc9#Nx1!dBs13AAF+zJ3>77*DD-hpW)<)fvl1T`cqH1rKeoXZCVmXUa> zLF_EG^&Y^;%Hs3)?dW=xiV7#7Fu^#DW&$-7dJ$B@1eSemI&Rwu-aeI;?v0mAWfA$w2Gq{VT z(0J07SRr=FjVQtc#`W_#&m%R?V~s~(HaxSsR?=`**pwQxvIk}MpFS==Jv`2m)XZfkERG#F4+v&xraGAoD{c{1uq zt56ovR5kBaKkvic^$3-v2k~#fg@bgsEO=xps%>F}wKHZAfs1+)^OfQyGaAm8o^jC= z)-S)pNELdS7?15%KU_}z&^R1AVQ$BJt%w!t zWe$m*hvnS|@Ls~`jaP%J+8wpLfvmy&o9SPEa-&b7#+d&Cm27l)q9 zfW&8b@laR-d!$*NdvoJPXocD{w=Q7I$!XrZ|JN6;4L?7;J?O3^o9WEcc>&K=vRaCb zUE8>VAxr7%^3$De1}dtmpKlgxmP==`;sqKuzVmUNAsCe(Ep~_wfw!+0Ss_0@=q6uD z`IHy9dBXq|z>mGi0j7km-nSt1Iw0aK z-}L4$?Hl14jxNNte~B(S_htR@!vW4*&4k|p`pHa=bNdXXp2Ll`D`-&T*k@kO`ftX0 zK0DsHp1H39shJO3BcEojJX=6WLSkf{PT_T(Tp7S%VciuXb(;ZaTxzb!fh6QG*{e!d JGA|k4{a-Z^-y;A3 literal 0 HcmV?d00001 diff --git a/Documentation~/images/tutorial/02-vr-generation-export-species-final.png b/Documentation~/images/tutorial/02-vr-generation-export-species-final.png new file mode 100644 index 0000000000000000000000000000000000000000..3d985dcbbb6dfa5e5061ec8407487092c1583081 GIT binary patch literal 34591 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 literal 0 HcmV?d00001 diff --git a/Documentation~/images/tutorial/02-vr-generation-property-name.png b/Documentation~/images/tutorial/02-vr-generation-property-name.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4073822d469b7828997a622fd48c897bca4201 GIT binary patch literal 6735 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 [!WARNING] -> Don't forget to convert it in **vr_xp** with the Unity Plugin before starting, otherwise it will not work!!! -> -> This step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) -> -> When choosing the parameters, you can keep the **default values** for each agent. -> Just make sure that the number of players is set to either `0` or `1`. +> The original GAMA experiment cannot be used directly in Unity. It must first be converted into a `vr_xp` experiment with the SIMPLE Unity plugin. + +## 2.1 Convert the GAMA Experiment to `vr_xp` + +Before running the model in Unity, convert the GAMA experiment with the SIMPLE +Unity plugin. During this conversion, each species that should appear in Unity +must be explicitly exported. + +On the first **Definition of the VR experiment** screen, keep the default values +and click **Next**. + +![VR experiment general parameters](../images/tutorial/02-vr-generation-general-parameters.png) + +On the **Export species** screen, do not immediately click **Next**. Select a +species on the left, then click the **+** button under **Aspect in Unity**. + +![Export species add one by one](../images/tutorial/02-vr-generation-export-species-add.png) + +Keep the default property name and click **OK**. + +![Keep default Unity property name](../images/tutorial/02-vr-generation-property-name.png) + +Repeat this for each species that must be visible in Unity, for example: + +- `prey` +- `predator` +- `vegetation_cell` + +At the end, these species should be marked as exported. + +![Final exported species selection](../images/tutorial/02-vr-generation-export-species-final.png) + +The `generic_species` entry is abstract and is not required for the visual +result. Exporting it is harmless, but it can also be ignored. + +> [!IMPORTANT] +> If the species are not added on the **Export species** screen, the experiment may still start in GAMA and the Unity player may be created, but no simulation agents will appear in Unity. + +After this, click **Next**, keep the default values, set the number of players +between `0` and `1`, then click **Finish**. This experiment is used throughout the rest of the tutorial because it covers the main features provided by the package: static background species, dynamic agents, @@ -21,7 +55,7 @@ This chapter validates the baseline live workflow: Unity enters Play Mode, connects to `simple.webplatform`, receives the running GAMA simulation, and creates Unity objects from the GAMA agents. -## 2.1 Steps +## 2.2 Steps 1. Make sure the scene was prepared with **GAMA > GAMA Panel > Setup Scene**. 2. Start `simple.webplatform` with `npm start` @@ -43,7 +77,7 @@ while the experiment is running. ![Runtime live overview](../images/tutorial/02-runtime-live-overview.png) -## 2.2 Expected Result +## 2.3 Expected Result During Play Mode, Unity should connect to `simple.webplatform` and create live Unity objects from the agents received from the **Prey Predator 6** model. @@ -55,7 +89,7 @@ The imported agents are grouped by species in the Unity hierarchy. At this stage, the important result is that the connection works and that GAMA agents are imported into Unity while the experiment is running. -## 2.3 Into the Next Step +## 2.4 Into the Next Step This is already useful: we now have a functional connection between GAMA, `simple.webplatform`, and Unity. The preys, predators and vegetation cells agents are imported and From 9112366d0ac6f8887f83c10487a1f0e62e434a25 Mon Sep 17 00:00:00 2001 From: Florian Barbe Date: Tue, 7 Jul 2026 15:25:16 +0700 Subject: [PATCH 13/13] Sync documentation from main --- Documentation~/09-troubleshooting.md | 453 ++++++++++++++++++ Documentation~/README.md | 4 +- .../tutorial/02-first-experiment-launching.md | 36 +- Documentation~/tutorial/05-dynamic-colors.md | 48 +- .../work-in-progress/09-troubleshooting.md | 84 ---- Documentation~/work-in-progress/README.md | 1 - 6 files changed, 513 insertions(+), 113 deletions(-) create mode 100644 Documentation~/09-troubleshooting.md delete mode 100644 Documentation~/work-in-progress/09-troubleshooting.md diff --git a/Documentation~/09-troubleshooting.md b/Documentation~/09-troubleshooting.md new file mode 100644 index 0000000..e4019dc --- /dev/null +++ b/Documentation~/09-troubleshooting.md @@ -0,0 +1,453 @@ +# Troubleshooting + +This page lists recurring problems encountered when connecting GAMA, +`simple.webplatform`, and Unity. + +Use it as a first diagnostic checklist before changing code. + +## Quick Checks + +Before investigating a specific symptom, check the following points: + +- GAMA is open and the target experiment is selected. +- The experiment used by Unity is the generated `vr_xp` experiment withe the Unity Plugin, not the + original GAMA experiment. +- `simple.webplatform` is running with `npm start`. +- The Unity package is up to date. + +## Port Reference + +`simple.webplatform` exposes several ports. They do not have the same role: + +```text +8000: web interface opened in the browser +8001: monitor WebSocket used by Unity to drive preview capture +8080: Unity player/runtime WebSocket used in Play Mode +1000: GAMA Server behind simple.webplatform +``` + +Seeing the web interface on `http://localhost:8000/` does not guarantee that +the monitor socket on `8001` or the Unity player socket on `8080` is running. + +## GAMA Model Was Not Converted To `vr_xp` + +The original GAMA experiment cannot be used directly by Unity. It must first be +converted into a Unity-compatible `vr_xp` experiment with the SIMPLE Unity +plugin for GAMA. + +If this step is skipped, Unity may connect to `simple.webplatform`, but it will +not receive the expected Unity geometry data. + +## Species Were Not Exported During `vr_xp` Conversion + +During the `vr_xp` conversion, each species that should appear in Unity must be +explicitly exported in the **Export species** step withe the Unity Plugin in GAMA. + +Do not simply click **Next** through the conversion wizard. Select each species +on the left and click **+** under **Aspect in Unity**. + +If Unity logs a JSON output with `names=0`, `pointsLoc=0`, or `pointsGeom=0`, +GAMA is probably sending an empty geometry payload. + +## Generate Preview Button Is Used Before GAMA Is Ready + +Before using **Generate Preview from GAMA**, the target experiment must be +selected or already open in GAMA. For the tutorial workflow, start the +`vr_xp` experiment in GAMA first, then generate the preview from Unity. + +If the experiment is not selected or not ready, Unity may connect to the +middleware but fail to capture useful geometry data. + +Steps **in this exact order**: + +1. Start `simple.webplatform` with `npm start`. +2. Open the `vr_xp` experiment in GAMA. +3. Then, and only then, click **Generate Preview from GAMA** in Unity. + +## Generate Preview Says That `localhost:8001` Is Not Responding + +Unity shows this kind of message: + +```text +The existing monitor ws://localhost:8001/ is not responding. +Launch simple.webplatform manually, then try again. +``` + +This means Unity cannot reach the `simple.webplatform` monitor WebSocket. The +browser page on `8000` may still be visible, but the backend service needed by +Unity is not responding on `8001`. + +Check that `simple.webplatform` was started with: + +```bash +npm start +``` + +Then check that the monitor and player sockets are listening. + +On macOS or Linux: + +```bash +lsof -nP -iTCP:8001 -sTCP:LISTEN +lsof -nP -iTCP:8080 -sTCP:LISTEN +``` + +On Windows: + +```powershell +netstat -ano | findstr :8001 +netstat -ano | findstr :8080 +``` + +If only port `8000` is open, the web interface is running but Unity cannot +generate the preview. Restart `simple.webplatform` and check the terminal for +backend errors. + +## Unity Connects But No Agents Appear In Play Mode + +If GAMA starts, Unity connects, but no simulation objects appear, check the +following points: + +- the experiment is the generated `vr_xp` experiment; +- species were exported during the `vr_xp` conversion; +- the generated model contains `add_geometries_to_send(...)`; +- `simple.webplatform` is listening on `8080`; +- the Unity Console does not show repeated socket close messages; +- the GAMA experiment is actually sending geometry updates. + +Useful Unity Console filters: + +```text +[GAMA][RUNTIME][CONNECTION] +[GAMA][CONNECTION] +[GAMA][RUNTIME][FLOW] +``` + +If the socket is open but the JSON output is empty, the problem is usually on +the GAMA model/export side, not on Unity rendering. + +## `unity_linker` Or Player Creation Fails + +Sometimes GAMA or `simple.webplatform` may report that the Unity linker/player +could not be created. This can happen when the middleware keeps stale state or +when the `vr_xp` experiment is incomplete. + +Fix: + +1. Stop the GAMA experiment. +2. Stop `simple.webplatform`. +3. Restart `simple.webplatform`. +4. Re-open the experiment in GAMA. +5. Enter Play Mode again in Unity. + +If the issue persists, inspect the generated GAML model: + +- `unity_linker_species` should point to the linker species. +- `create_player(string id)` should ask the `unity_linker` to create the player. +- `player_unity_properties` should not point to missing or invalid properties. +- the species to display should be sent with `add_geometries_to_send(...)`. + +## GAMA Reports A Nil Value Error + +A GAMA error such as `nil value detected` can break the Unity flow even if the +middleware and Unity are running. + +Check: + +- the generated `vr_xp` model compiles without errors; +- exported Unity properties are initialized before they are used; +- `player_unity_properties` does not contain an invalid property; +- the experiment was regenerated after changing exported species; +- GAMA and `simple.webplatform` were both restarted after a failed connection. + +If the error happens during `create_player`, regenerate the `vr_xp` experiment +and make sure the Unity linker and exported species are present. + +## No Preview Is Generated + +Check: + +- `simple.webplatform` is launched first and running; +- the experiment is then opened in GAMA (make sur to make it linkable by converting it with the Unity Plugin); +- the GAMA experiment was converted to `vr_xp`; +- the Unity player socket uses port `8080`; +- the monitor socket on `8001` is reachable; +- the GAMA model sends geometries through the Unity linker. + +If the preview still fails, using the develop branch of the package, open the Unity Console and search for: + +```text +[GAMA][CAPTURE] +[GAMA][PREVIEW] +[GAMA][CONNECTION] +``` + +## Preview Capture Is Cancelled Or Incomplete + +If the preview ends with a cancelled or incomplete capture, the most common +causes are: + +- the GAMA experiment was not ready when the capture started; +- the monitor socket on `8001` disconnected; +- the player socket on `8080` did not receive `json_output`; +- GAMA was still starting or compiling the experiment; +- an old middleware/player state was still active. + +Fix: + +1. Stop Play Mode in Unity. +2. Stop or reset the GAMA experiment. +3. Restart `simple.webplatform`. +4. Start the `vr_xp` experiment in GAMA. +5. Generate the preview again. + +If the second attempt works, the first capture most likely started before all +services were synchronized. + +## Preview Settings And Game Manager Settings Seem To Do The Same Thing + +The preview panel and the `Game Manager` Inspector edit the same species visual +override data. + +Changing values in the preview panel updates the preview scene and stores the +settings used later by Play Mode. Editing the same species in the `Game Manager` +Inspector changes the same kind of data. + +The **Validate Preview and Close Panel** button is mainly a workflow action: + +- it applies the current preview settings; +- it keeps the generated preview available in Edit Mode; +- it closes the preview panel; +- it makes the chosen settings ready for reuse in Play Mode. + +If the scene already updates while editing values, this is expected. The +validate button confirms and exits the preview workflow. + +## Colors Do Not Follow Attributes + +Unity can only use attributes that GAMA explicitly sends. + +Check: + +- the GAMA model sends the attribute in `add_geometries_to_send(...)`; +- Unity receives non-empty attributes; +- the species dynamic color override is enabled; +- the selected attribute name matches the GAMA attribute key exactly; +- discrete rules match the received values. + +For example, to expose a `food` attribute on `vegetation_cell`: + +```gaml +list grass_food <- vegetation_cell collect each.food; +map> grass_atts <- ["food":: grass_food]; + +do add_geometries_to_send(vegetation_cell, up_vegetation_cell, grass_atts); +``` + +If `food` is not sent by GAMA, it will not be available in Unity dynamic color +settings. + +## Discrete Dynamic Colors Cannot Be Tested On The Tutorial Model + +Discrete dynamic colors require an attribute with distinct values, for example a +state, status, type, or category. + +If the current model only exposes continuous numeric values such as `food`, use +the continuous dynamic color mode instead. + +To test discrete colors, first add or expose a categorical GAMA attribute, then +send it through `add_geometries_to_send(...)` and configure the discrete mapping +in Unity. + +## Prefab Does Not Change In Play Mode + +For Play Mode, the prefab must be loadable from a Unity `Resources` path. + +If a prefab is outside a `Resources` folder, Edit Mode preview may still use it, +but runtime loading can fall back to the default GAMA geometry. + +Move runtime prefabs under a `Resources` folder or use a prefab path that can be +resolved at runtime. + +## FPS Player Prefab Does Not Work + +The default FPS player prefab may not be configured for every project. This does +not prevent GAMA agents from being imported, but it can make navigation or +interaction unusable. + +Fix: + +- use the default scene setup only as a connection baseline; +- replace the FPS player with a project-specific player prefab if needed; +- check camera, input, colliders, and movement scripts before testing + interaction. + +## Scene Is Not Saved After Default Setup + +Unity does not always save the scene automatically after pressing **Default +Setup** in the GAMA Panel. + +Fix: + +1. Press **Default Setup**. +2. Check that the scene contains the required managers. +3. Save the scene manually with **File > Save**. + +If the scene is not saved, the required objects may disappear after reopening +the project. + +## Scale Looks Different Between Preview And Play Mode + +The scale multiplier is a visual override. It should change the size of each +agent visual without changing the logical spread of the species. + +If the species looks stretched or contracted as a whole: + +- check that the latest Unity package version is installed; +- regenerate the preview; +- reset the affected species override; +- verify that the scale is applied to agent visuals, not to the common species + parent object. + +Cell-like background species and moving agent species can have very different +geometry shapes, so compare the result in both Edit Mode preview and Play Mode. + +## Geometry Mesh Needs Height Instead Of Scale + +When no Unity prefab is assigned, Unity uses the geometry mesh sent by GAMA. In +that case, changing a global visual scale may not be the best control for flat +or background geometries. + +Workaround: + +- keep the scale multiplier close to `1` for background meshes; +- adjust the geometry height/depth in the GAMA Unity aspect when possible; +- use prefabs when per-agent visual control is required. + +This is a known usability limitation: a dedicated height control for GAMA +geometry meshes would be clearer than a generic scale control. + +## Play Mode Start Or Stop Is Slow + +Starting or stopping Play Mode may take several seconds on large scenes or when +the connection stack is restarting. + +Possible causes: + +- WebSocket initialization or shutdown; +- large numbers of runtime agents; +- repeated console logging; +- Unity recompilation or scene reload; +- `simple.webplatform` reconnecting or purging old players. + +Fix: + +- use the `main` package branch for user testing because it has reduced default + logging; +- use the `develop` branch only when detailed logs are needed; +- keep the Unity Console collapsed when testing large simulations; +- restart `simple.webplatform` if old sockets remain open. + +## Runtime Appearance Changes Cause Performance Spikes + +Changing colors, scale, visibility, or prefab overrides during Play Mode can +trigger updates on many agents at once. + +This is expected to be more expensive on large simulations. + +Workaround: + +- configure species appearance in Edit Mode preview when possible; +- avoid repeatedly changing overrides while thousands of agents are active; +- use reduced logging for user testing; +- test large visual changes on a smaller model first. + +## Editor Becomes Slow When Editing Game Manager Values + +In Edit Mode, changing `Game Manager` Inspector values can immediately update +the preview. On large previews, this can cause editor stutter. + +Workaround: + +- prefer the GAMA Panel preview workflow for common appearance changes; +- avoid dragging sliders continuously on very large scenes; +- type numeric values directly instead of scrubbing controls; +- hide or reduce the number of visible species while configuring one species. + +A future improvement would be a manual **Apply** button for expensive preview +updates instead of applying every editor value change immediately. + +## Simulation Stops When Unity Loses Focus + +If Unity is not the focused application during runtime, the connection can slow +down, pause, or be closed depending on the platform and middleware state. + +Workaround: + +- keep the Unity window focused while testing Play Mode; +- avoid switching to another application during connection-sensitive tests; +- if the socket closes, stop Play Mode, restart `simple.webplatform`, and run + the experiment again. + +## Agents Freeze Or Accumulate + +For dynamic species, Unity should receive complete enough updates to know which +agents still exist. + +If agents accumulate or freeze: + +- check that GAMA is still running; +- check that Unity is still connected to `simple.webplatform`; +- verify that the runtime socket on `8080` remains open; +- make sure the model sends regular geometry updates for dynamic species. + +Static or background species should not be removed just because they are absent +from a dynamic tick. + +## Background Geometry Is Not Explicitly Defined During GAMA Conversion + +The GAMA Unity conversion wizard currently exports species and aspects, but it +does not always make the distinction between dynamic agents and background +geometry obvious. + +Workaround: + +- export background species separately; +- configure their appearance in Unity preview; +- keep background species visible and stable; +- hide or reduce dynamic species while configuring the background. + +For road/building/static geometry workflows, it is useful to keep those species +as separate exported entries so their Unity appearance can be controlled +independently. + +## Background Geometry Changes Seem To Be Applied Repeatedly + +If background geometry or static species appear to be modified continuously, +check whether GAMA is resending the same static geometry every cycle. + +Workaround: + +- keep background species separate from dynamic species; +- avoid sending unnecessary changing attributes for background geometry; +- configure background appearance once in Unity preview; +- hide dynamic species temporarily while checking the background; +- if possible, send static/background geometry less frequently than dynamic + agents. + +A future improvement on the GAMA conversion side would be an explicit +background-geometry option and a way to avoid repeatedly applying unchanged +background visual data. + +## Too Many Debug Logs In Unity + +Very frequent `Debug.Log` calls can slow down Unity, especially when thousands +of agents are updated. + +For user testing, use the `main` branch of the Unity package, where default +logging is reduced. + +Use the `develop` branch only when collecting detailed logs for debugging. + +A future improvement would be a runtime **Developer/Debug mode** option instead +of requiring a separate branch for verbose logs. diff --git a/Documentation~/README.md b/Documentation~/README.md index c7a50e1..1fe6ea8 100644 --- a/Documentation~/README.md +++ b/Documentation~/README.md @@ -15,12 +15,14 @@ documentation. - [4. Generate and configure the Unity preview](tutorial/04-generate-preview.md) - [5. Dynamic colors from GAMA attributes](tutorial/05-dynamic-colors.md) +## Troubleshooting +- [Troubleshooting](09-troubleshooting.md) + ## Work in Progress - [Work in progress overview](work-in-progress/README.md) - [6. Configure species appearance](work-in-progress/06-configure-species.md) - [7. Apply preview settings in Play Mode](work-in-progress/07-apply-preview-settings.md) - [8. Optimize large simulations](work-in-progress/08-large-models-performance.md) -- [9. Troubleshooting](work-in-progress/09-troubleshooting.md) - [User guide](user-guide/README.md) - [Technical documentation](technical/README.md) - [Runtime architecture notes](gama-unity.md) diff --git a/Documentation~/tutorial/02-first-experiment-launching.md b/Documentation~/tutorial/02-first-experiment-launching.md index 9976390..ce65f5c 100644 --- a/Documentation~/tutorial/02-first-experiment-launching.md +++ b/Documentation~/tutorial/02-first-experiment-launching.md @@ -5,22 +5,26 @@ tutorial, use the **6th prey Predator** model located in the following hierarchy ![Prey Predator 6 model location](../images/tutorial/02-prey-predator-7-location.png) +This experiment is used throughout the rest of the tutorial because it covers the +main features provided by the package: static background species, dynamic agents, +species-specific rendering, live updates, and interaction with Unity objects. + +This chapter validates the baseline live workflow: Unity enters Play Mode, +connects to `simple.webplatform`, receives the running GAMA simulation, and +creates Unity objects from the GAMA agents. + > [!WARNING] > The original GAMA experiment cannot be used directly in Unity. It must first be converted into a `vr_xp` experiment with the SIMPLE Unity plugin. ## 2.1 Convert the GAMA Experiment to `vr_xp` -Before running the model in Unity, convert the GAMA experiment with the SIMPLE -Unity plugin. During this conversion, each species that should appear in Unity -must be explicitly exported. +Before running the model in Unity, convert the GAMA experiment with the SIMPLE Unity plugin. During this conversion, each species that should appear in Unity must be explicitly exported. -On the first **Definition of the VR experiment** screen, keep the default values -and click **Next**. +On the first **Definition of the VR experiment** screen, keep the default values and click **Next**. ![VR experiment general parameters](../images/tutorial/02-vr-generation-general-parameters.png) -On the **Export species** screen, do not immediately click **Next**. Select a -species on the left, then click the **+** button under **Aspect in Unity**. +On the **Export species** screen, do not immediately click **Next**. Select a species on the left, then click the **+** button under **Aspect in Unity**. ![Export species add one by one](../images/tutorial/02-vr-generation-export-species-add.png) @@ -38,25 +42,21 @@ At the end, these species should be marked as exported. ![Final exported species selection](../images/tutorial/02-vr-generation-export-species-final.png) -The `generic_species` entry is abstract and is not required for the visual -result. Exporting it is harmless, but it can also be ignored. +The `generic_species` entry is abstract and is not required for the visual result. Exporting it is harmless, but it can also be ignored. > [!IMPORTANT] > If the species are not added on the **Export species** screen, the experiment may still start in GAMA and the Unity player may be created, but no simulation agents will appear in Unity. -After this, click **Next**, keep the default values, set the number of players -between `0` and `1`, then click **Finish**. +After this, click **Next**, keep the default values, set the number of players between `0` and `1`, then click **Finish**. -This experiment is used throughout the rest of the tutorial because it covers the -main features provided by the package: static background species, dynamic agents, -species-specific rendering, live updates, and interaction with Unity objects. - -This chapter validates the baseline live workflow: Unity enters Play Mode, -connects to `simple.webplatform`, receives the running GAMA simulation, and -creates Unity objects from the GAMA agents. +For more details, this step is explained [in this tutorial](https://doc.project-simple.eu/tutorials/Tutorial-Step-1) ## 2.2 Steps +> [!WARNING] +> These steps must be followed **exactly in the order shown below**. +> If you change the order, the Unity connection may fail!!! + 1. Make sure the scene was prepared with **GAMA > GAMA Panel > Setup Scene**. 2. Start `simple.webplatform` with `npm start` 3. Open and run the **vr_xp** version of **Prey Predator 6** in GAMA. diff --git a/Documentation~/tutorial/05-dynamic-colors.md b/Documentation~/tutorial/05-dynamic-colors.md index 17073ed..f821225 100644 --- a/Documentation~/tutorial/05-dynamic-colors.md +++ b/Documentation~/tutorial/05-dynamic-colors.md @@ -35,18 +35,38 @@ do add_geometries_to_send(prey, up_prey, prey_atts); ## 5.2 Continuous Example: Vegetation Food -Use this mode when an attribute is numeric and should produce a gradual visual -change. +### 5.2.1 Attributes Sent By GAMA +Unity can only use dynamic color attributes that are sent by GAMA through the websocket. +In this experiment, the `send_geometries` reflex sends the agents and geometries to Unity. By default, `vegetation_cell` is sent without its `food` attribute: +```gaml +do add_geometries_to_send(vegetation_cell, up_vegetation_cell); +``` +To make `food` available in Unity, collect the `food` values and pass them as the third argument of `add_geometries_to_send`: +```gaml +list grass_food <- vegetation_cell collect each.food; +map> grass_atts <- ["food":: grass_food]; +do add_geometries_to_send(vegetation_cell, up_vegetation_cell, grass_atts); +``` +The complete reflex should look like this: +```gaml +reflex send_geometries { + list grass_food <- vegetation_cell collect each.food; + map> grass_atts <- ["food":: grass_food]; + do add_geometries_to_send(prey, up_prey); + do add_geometries_to_send(predator, up_predator); + do add_geometries_to_send(vegetation_cell, up_vegetation_cell, grass_atts); + do add_geometries_to_send(generic_species, up_generic_species); +} +``` +> [!NOTE] +> The key `food` is the attribute name that will be used later in Unity. This attribute must already exist on the GAMA `vegetation_cell` agents. -In this example, the `vegetation_cell` species receives a numeric `food` -attribute. The goal is: -```text -low food -> lighter/darker green -high food -> stronger green -``` +### 5.2.2 Using The Attribute In Unity + +After generating the preview, Unity can use the `food` attribute sent by GAMA through the websocket. -Steps: +In this tutorial, to display the numeric attribute `food`, you should follow the next steps in the Edit mode of a preview : 1. Select the `Game Manager`. 2. In the Inspector, find `vegetation_cell`. @@ -62,6 +82,16 @@ The numbered close-up below shows the important controls: ![Dynamic food color settings legend](../images/tutorial/05-dynamic-color-food-settings-legend.png) +In this example, the `vegetation_cell` species receives a numeric `food` attribute. The goal is: + +```text +low food -> lighter/darker green +high food -> stronger green +``` + +> [!NOTE] +> Unity can only use attributes that were explicitly sent by GAMA. If `food` is not included in `add_geometries_to_send`, it will not be available in the Unity dynamic color settings. + 1. Open the **Dynamic Color** foldout. 2. Enable the override. 3. Choose **Continuous** mode. diff --git a/Documentation~/work-in-progress/09-troubleshooting.md b/Documentation~/work-in-progress/09-troubleshooting.md deleted file mode 100644 index 2d18709..0000000 --- a/Documentation~/work-in-progress/09-troubleshooting.md +++ /dev/null @@ -1,84 +0,0 @@ -# 9. Troubleshooting - -This chapter lists common problems and the first checks to perform. - -## No Preview Is Generated - -Check: - -- `simple.webplatform` is running; -- GAMA is running; -- the experiment is open or selected; -- the Unity middleware port is `8080`; -- the model sends geometries through the Unity linker. - -> Screenshot to add: GAMA Panel state when preview generation fails. - -> Screenshot to add: middleware terminal or console showing whether -> `simple.webplatform` is running. - -## Runtime Agents Do Not Appear - -Check the Unity console for: - -```text -[GAMA][RUNTIME][CONNECTION] -[GAMA][CONNECTION] -[GAMA][RUNTIME][FLOW] -``` - -If Unity logs that the socket is not open, verify the middleware and connection -settings. - -> Screenshot to add: Console filtered on `[GAMA][RUNTIME][CONNECTION]` and -> `[GAMA][CONNECTION]`. - -> Screenshot to add: `Connection Manager` inspector with host and ports. - -## Colors Do Not Follow Attributes - -Check: - -- the GAMA model sends the attribute in `add_geometries_to_send(...)`; -- Unity receives non-empty attributes; -- the species dynamic color mode is enabled; -- the selected attribute name matches the GAMA attribute key exactly; -- discrete rules match the received values. - -> Screenshot to add: Dynamic Color setup next to a console log proving whether -> attributes were received. - -## Prefab Does Not Change In Play Mode - -For Play Mode, the prefab should be loadable from a Unity `Resources` path. - -If a prefab is outside `Resources`, Edit Mode preview can use it, but runtime -loading may fallback and log a warning. - -> Screenshot to add: prefab outside `Resources` warning in the console. - -## Scale Is Too Large In Play Mode - -Check: - -- the scale multiplier is not applied twice; -- the species override asset contains the expected context-specific entry; -- cell-like species keep their logical parent at scale `(1, 1, 1)`; -- the visual child receives the visual scale. - -> Screenshot to add: inspector showing scale fields in the `Game Manager`. - -> Screenshot to add: hierarchy showing logical parent scale and visual child -> scale. - -## Agents Freeze Or Accumulate - -For dynamic species, check that the live updates are complete or cumulative. -Unity should remove dynamic agents only after a complete update confirms they are -missing. - -Static/background species should not be pruned just because they are absent from -a dynamic tick. - -> Optional GIF to add: predator/prey or dynamic agents disappearing and -> appearing correctly during Play Mode. diff --git a/Documentation~/work-in-progress/README.md b/Documentation~/work-in-progress/README.md index e37b2f7..0e95d62 100644 --- a/Documentation~/work-in-progress/README.md +++ b/Documentation~/work-in-progress/README.md @@ -5,4 +5,3 @@ These tutorial chapters are not part of the stable tutorial flow yet. - [6. Configure species appearance](06-configure-species.md) - [7. Apply preview settings in Play Mode](07-apply-preview-settings.md) - [8. Optimize large simulations](08-large-models-performance.md) -- [9. Troubleshooting](09-troubleshooting.md)