{"componentChunkName":"component---src-templates-case-study-js","path":"/case-studies/evolution-aquerium","result":{"data":{"markdownRemark":{"id":"144c0032-2676-5cff-a1c1-c3bc1d1db2ce","html":"<h2 id=\"How-It-Works\"><a href=\"#How-It-Works\" aria-label=\"How It Works permalink\" class=\"gatsby-remark-autolink\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How It Works?</h2>\n<p>These Creatures are based on <a href=\"https://www.red3d.com/cwr/index.html\">Craig Reynold's</a> Steering Behaviors and <a href=\"https://www.red3d.com/cwr/boids/\">Flocking System</a></p>\n<p>It also implements Genetic Algorithm and mutations.</p>\n<p>You can learn more about them on Daniel Shiffman's YouTube Channel <a href=\"https://www.youtube.com/user/shiffman\">The Coding Train</a></p>\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=flxOkx0yLrY&#x26;t=1223s\">Coding Challenge #69.1: Evolutionary Steering Behaviors</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=mhjuuHl6qHM&#x26;t=1978s\">Coding Challenge #124: Flocking Simulation</a></li>\n<li><a href=\"https://www.youtube.com/playlist?list=PLRqwX-V7Uu6bJM3VgzjNV5YxVxUwzALHV\">Genetic Algorithm playlist The Nature of Code</a></li>\n</ul>\n<hr>\n<figure class=\"gatsby-resp-image-figure\" style>\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/5be65abe88a144658cd3fcb27f25e7f6/5d6a0/Evolution_Aquarium_codeflowchart.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 108.1081081081081%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAABibAAAYmwFJdYOUAAAC8UlEQVQ4y51U2WoUQRSd7/MXfBR89Ck+KQjig1ER8xDUaDCISVxCAjHBJIJIjCLiBlFQIyYzPTOZpbun1+rqpep4q2pmMkkmcblw6K361q1zzr0lDAkpJY6K476pKPUW9Raaq0TCJWpNgbYr0LSFvvcCob/11g+i92/pqN3VLU8lslxCCIlCSBxXXO/fQxUmSYIg8MHpqkIl80NBkAgigaIokOf7IYTYX6FJaHaKohCNRhNhGOp3YSxxbZLhzKUIN2ci2I4Hq+ahtmtg1ToIo+zwkXsV0oZgHHRUUDWmqpHRCCdO+7h8h0HkIbZ3yrAsi1CB53lUJfrcHj4yF2CJ1FD8RUzi9qME52/EmH6aECUcjWaAZstHqx3A9bj+Z0iFZhdFR5zmWgR173oC9+YTXJ9ieLjMUN+1UbZcVKoKDrbLNqI4H8ahqVCRHjDWX6AqnF/juDXLsLqR0nfAdhladgi3wxCTdmkmjz4y5xyu7+Pg+8FnBdHFEB8ahXsQVELMk/6CmLicXeJ4tp7q7w5VZTshHDdCx2O6AbK+KORD5bM49hGHbcSRZ6okqSWMoTvUHTOUcPFFQvbgqNY9zV/ZcrBL4tguJwGL/Ry+/pjiwpiHd5scy+sJTo4EeLLCjS/Jh1MLnHikhCFD2441h04XbUdVeSDh158FHiym+L6TY/09x9mrAdZIABWqwlPnQlwc9xF4NZQrFVSrFqGCWs1CvV6jFh1Qefj0yLuKGz9eucu0dXjCNHeOqxRWUDzGXZUPiJLlAilxlypR0kwrqBJ2fIHJuQRzq6keFo1WTO1mPNiyGfxI6vcDtjEJlZlVsoLcLOSe83Pqls0fObbKahAI4jQFY5lGzNQmQm/cT6iUNFH0RVh4nuLNpwx/H3vDRYvy7VeB6eUEX7Zy3Rlj9xnZJO2PLw05fLDuGXugU95+TjE6EWDjA6fpIjE+zbD0Mh3aLX+Kklmrjhfqq0o48TjByqv/TNg7v5ospv3M2DJE/3vC3/HcnqBnGmhSAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"Evolution Aquerium Codeflow Visualized (click to enlarge)\" title=\"Evolution Aquerium Codeflow Visualized (click to enlarge)\" src=\"/static/5be65abe88a144658cd3fcb27f25e7f6/fcda8/Evolution_Aquarium_codeflowchart.png\" srcset=\"/static/5be65abe88a144658cd3fcb27f25e7f6/12f09/Evolution_Aquarium_codeflowchart.png 148w,\n/static/5be65abe88a144658cd3fcb27f25e7f6/e4a3f/Evolution_Aquarium_codeflowchart.png 295w,\n/static/5be65abe88a144658cd3fcb27f25e7f6/fcda8/Evolution_Aquarium_codeflowchart.png 590w,\n/static/5be65abe88a144658cd3fcb27f25e7f6/efc66/Evolution_Aquarium_codeflowchart.png 885w,\n/static/5be65abe88a144658cd3fcb27f25e7f6/c83ae/Evolution_Aquarium_codeflowchart.png 1180w,\n/static/5be65abe88a144658cd3fcb27f25e7f6/5d6a0/Evolution_Aquarium_codeflowchart.png 1580w\" sizes=\"(max-width: 590px) 100vw, 590px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">Evolution Aquerium Codeflow Visualized (click to enlarge)</figcaption>\n  </figure>\n<h2 id=\"AgentBuilder-Class\"><a href=\"#AgentBuilder-Class\" aria-label=\"AgentBuilder Class permalink\" class=\"gatsby-remark-autolink\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>AgentBuilder Class</h2>\n<p>I make use of the \"builder\" pattern to create different varieties of creatures with different traits. And AgentBuilder class helps me do this easily see how it works.</p>\n<blockquote>\n<p><a href=\"https://medium.com/@axelhadfeg/builder-pattern-using-javascript-and-es6-ec1539182e24\">Learn more how builder pattern works</a></p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">AgentBuilder</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">type</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>acc <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vector</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>vel <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vector</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>type <span class=\"token operator\">=</span> type\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">setPos</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> y</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pos <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vector</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">setRadius</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">r <span class=\"token operator\">=</span> <span class=\"token number\">5</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius <span class=\"token operator\">=</span> r\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">setColor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">color</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color <span class=\"token operator\">=</span> color<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">setDNA</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">dna</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>dna <span class=\"token operator\">=</span> dna\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">// ... more setFunctions</span>\n\n  <span class=\"token function\">build</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// returns a new BaseAgent based on the values</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">BaseAgent</span><span class=\"token punctuation\">(</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pos<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pos<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">,</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius<span class=\"token punctuation\">,</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>dna<span class=\"token punctuation\">,</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color<span class=\"token punctuation\">,</span>\n      <span class=\"token keyword\">this</span>\n    <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>And now, the builder pattern is ready to be used. Let us see how we can build creatures with different traits.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token comment\">// later on</span>\n<span class=\"token keyword\">let</span> Predator <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AgentBuilder</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PREDATOR\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setRadius</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setMaxSpeed</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setMaxForce</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.05</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setHealthDecrease</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.002</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setColor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setFoodMultiplier</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">let</span> Avoider <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AgentBuilder</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"AVOIDER\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setRadius</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setMaxRadius</span><span class=\"token punctuation\">(</span><span class=\"token number\">8</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setMaxSpeed</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setMaxForce</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.2</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setHealthDecrease</span><span class=\"token punctuation\">(</span><span class=\"token number\">0.003</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setColor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">165</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">setFoodMultiplier</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">0.5</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<h2 id=\"BaseAgent-Class\"><a href=\"#BaseAgent-Class\" aria-label=\"BaseAgent Class permalink\" class=\"gatsby-remark-autolink\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>BaseAgent Class</h2>\n<p>BaseAgent class handles all the logic for the update, render, and physics, it's the heart of the codebase. the basic idea is to give each <code class=\"language-text\">agent</code> some essential traits like <code class=\"language-text\">health</code>, <code class=\"language-text\">radius</code>, <code class=\"language-text\">maxSpeed</code>, <code class=\"language-text\">maxSpeed</code> etc etc.</p>\n<blockquote>\n<p>see the full BaseAgent class's <a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/BaseAgent.js#L15\">code at github</a></p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">BaseAgent</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> radius<span class=\"token punctuation\">,</span> dna<span class=\"token punctuation\">,</span> color<span class=\"token punctuation\">,</span> builder</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// for flocking behaviour</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pos <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vector</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>acc <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vector</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>vel <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Vector</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n    <span class=\"token comment\">// i used builder pattern to create more variaty agents easily</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>builder <span class=\"token operator\">===</span> <span class=\"token keyword\">undefined</span><span class=\"token punctuation\">)</span> builder <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>builder <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// traits</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>health <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius <span class=\"token operator\">=</span> radius <span class=\"token operator\">||</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>maxSpeed <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">.</span>maxSpeed <span class=\"token operator\">||</span> <span class=\"token number\">1.5</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>maxForce <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">.</span>maxForce <span class=\"token operator\">||</span> <span class=\"token number\">0.05</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// amout of health will decrease over time</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>healthDecrease <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">.</span>healthDecrease <span class=\"token operator\">||</span> <span class=\"token number\">0.003</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// amount of health will increase after eating food</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">.</span>goodFoodMultiplier <span class=\"token operator\">||</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// amount of health will decrease after eating poison</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>badFoodMultiplier <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">.</span>badFoodMultiplier <span class=\"token operator\">||</span> <span class=\"token operator\">-</span><span class=\"token number\">0.4</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color <span class=\"token operator\">=</span> color<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>hasReproduced <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// randomly choose male or female</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>sex <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> <span class=\"token string\">'MALE'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'FEMALE'</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// females will be a bit bigger than male</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>maxRadius <span class=\"token operator\">=</span> builder<span class=\"token punctuation\">.</span>maxRadius <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getGender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> <span class=\"token string\">'FEMALE'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> <span class=\"token number\">15</span> <span class=\"token punctuation\">:</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// more code in between...</span>\n\n    <span class=\"token comment\">// colors based on their gender</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color <span class=\"token operator\">&amp;&amp;</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getGender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> <span class=\"token string\">'MALE'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">170</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color <span class=\"token operator\">&amp;&amp;</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getGender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> <span class=\"token string\">'FEMALE'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>color <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">39</span><span class=\"token punctuation\">,</span> <span class=\"token number\">201</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token punctuation\">}</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>Later on, I also gave them names, haha yes</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token operator\">...</span>\n<span class=\"token keyword\">let</span> names_female <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token string\">'hanna'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'mona'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'cutie'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'sweety'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'sofia'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'rose'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'laisy'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'daisy'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'mia'</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> names_male <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token string\">'joe'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'jim'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'kim'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'keo'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'shaun'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'morgan'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'jery'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'tom'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'anu'</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">'brian'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'ninja'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'daniel'</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// names based on gender</span>\n<span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getGender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> <span class=\"token string\">'MALE'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getRandomName</span><span class=\"token punctuation\">(</span>names_male<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">:</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getRandomName</span><span class=\"token punctuation\">(</span>names_female<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token operator\">...</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>And now, let's talk only about the main meat of the code, not any other unnecessary code.\nso in the base class we have some methods</p>\n<ul>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/BaseAgent.js#L235\">applyFlock()</a></p>\n<p>applies the flocking behavior</p>\n</li>\n<li><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/BaseAgent.js#L184\">defineFear()</a></li>\n</ul>\n<p>The primary function which defines the fear behavior and we can also use this inversely</p>\n<ul>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/BaseAgent.js#L271\">eat()</a></p>\n<p>seeks the nearby food</p>\n</li>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/BaseAgent.js#L215\">Behaviour()</a></p>\n<p>applies the force which returns from eat()</p>\n</li>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/BaseAgent.js#L320\">reproduce()</a></p>\n<p>Reproduction System checks for male and female agents, and if their radius is greater than 8 and they are close enough to each other, then they can reproduce with their specific DNA and creates a small Agent based on their DNA data and with some mutation.</p>\n</li>\n</ul>\n<h2 id=\"Flock-Class\"><a href=\"#Flock-Class\" aria-label=\"Flock Class permalink\" class=\"gatsby-remark-autolink\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Flock Class</h2>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/Flock.js\">Flock class</a> takes an agent and do the calculations for flocking behaviors like <code class=\"language-text\">separate</code>, <code class=\"language-text\">align</code>, <code class=\"language-text\">cohesion</code>, <code class=\"language-text\">seek</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Flock</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">currentAgent</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>currentAgent <span class=\"token operator\">=</span> currentAgent\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>wandertheta <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">seek</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">target</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">_returnSteer</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sum</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">wander</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">separate</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">agents</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">align</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">agents</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">cohesion</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">agents</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<h2 id=\"EcoSystem-Class\"><a href=\"#EcoSystem-Class\" aria-label=\"EcoSystem Class permalink\" class=\"gatsby-remark-autolink\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>EcoSystem Class</h2>\n<p>EcoSystem class manages all the <code class=\"language-text\">agents</code> and <code class=\"language-text\">behaviors</code>, basically it is like a state manager</p>\n<p>it has some methods which are</p>\n<ul>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/EcoSystem.js#L17\">addEntities</a></p>\n<p>adds all entities to the entities (food, poison) object</p>\n</li>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/EcoSystem.js#L28\">registerAgents</a></p>\n<p>registers Agents to the state and also creates corresponding Arrays for each of them which you can use by calling ecoSys.groups[your<em>given</em>name]</p>\n</li>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/EcoSystem.js#L39\">initialPopulation</a></p>\n<p>initializes the groups of population by the given amount</p>\n</li>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/EcoSystem.js#L98\">addBehavior</a></p>\n<p>specifies the behavior of the agent declaratively</p>\n</li>\n<li>\n<p><a href=\"https://github.com/anuraghazra/EvolutionAquerium/blob/master/src/js/EcoSystem.js#L150\">batchUpdateAgents</a></p>\n<p>updates all the agents</p>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">EcoSystem</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>groups <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span> <span class=\"token comment\">// agents</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>entities <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span> <span class=\"token comment\">// generic container (food, poison)</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>agents <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span> <span class=\"token comment\">// agent classes</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>behaviors <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span> <span class=\"token comment\">// calculated behaviors</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">addEntities</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">names</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">registerAgents</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">agents</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">initialPopulation</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">init</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">addBehavior</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">config</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token function\">batchUpdateAgents</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">list<span class=\"token punctuation\">,</span> foodPoison<span class=\"token punctuation\">,</span> weight<span class=\"token punctuation\">,</span> callback</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<h2 id=\"Setting-up-everything\"><a href=\"#Setting-up-everything\" aria-label=\"Setting up everything permalink\" class=\"gatsby-remark-autolink\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setting up everything</h2>\n<p>And the last step is to assemble every part of the code to create these boids like creatures and gave each of them behaviors</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-js line-numbers\"><code class=\"language-js\"><span class=\"token comment\">// Global</span>\n<span class=\"token keyword\">let</span> canvas <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span><span class=\"token string\">'#c'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> <span class=\"token constant\">WIDTH</span> <span class=\"token operator\">=</span> canvas<span class=\"token punctuation\">.</span>width <span class=\"token operator\">=</span> window<span class=\"token punctuation\">.</span>innerWidth<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> <span class=\"token constant\">HEIGHT</span> <span class=\"token operator\">=</span> canvas<span class=\"token punctuation\">.</span>height <span class=\"token operator\">=</span> <span class=\"token number\">600</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> ctx <span class=\"token operator\">=</span> canvas<span class=\"token punctuation\">.</span><span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token string\">'2d'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">let</span> <span class=\"token constant\">MAX_CREATURES</span> <span class=\"token operator\">=</span> <span class=\"token number\">300</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">REPRODUCTION_RATE</span> <span class=\"token operator\">=</span> <span class=\"token number\">0.5</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">ENABLE_SUPER_DEBUG</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// constants for flexibilty</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">CREATURE</span> <span class=\"token operator\">=</span> <span class=\"token string\">'CREATURE'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">PREDATOR</span> <span class=\"token operator\">=</span> <span class=\"token string\">'PREDATOR'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">AVOIDER</span> <span class=\"token operator\">=</span> <span class=\"token string\">'AVOIDER'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">EATER</span> <span class=\"token operator\">=</span> <span class=\"token string\">'EATER'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">FOOD</span> <span class=\"token operator\">=</span> <span class=\"token string\">'FOOD'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">POISON</span> <span class=\"token operator\">=</span> <span class=\"token string\">'POISON'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">load</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> ecoSys <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">EcoSystem</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// creates a Array which you can access with ecoSys.entities </span>\n  ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">addEntities</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token constant\">FOOD</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">POISON</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// register classes it will also create corresponding Arrays</span>\n  <span class=\"token comment\">// which you can use by calling ecoSys.groups[your_given_name]</span>\n  ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">registerAgents</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">:</span> Agent<span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">PREDATOR</span><span class=\"token punctuation\">:</span> Predator<span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">AVOIDER</span><span class=\"token punctuation\">:</span> Avoider<span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">EATER</span><span class=\"token punctuation\">:</span> Eater<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// initialPopulation have to use the same name</span>\n  <span class=\"token comment\">// which you configure in registerAgents</span>\n  ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">initialPopulation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">:</span> <span class=\"token number\">150</span><span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">PREDATOR</span><span class=\"token punctuation\">:</span> <span class=\"token function\">randomInt</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">AVOIDER</span><span class=\"token punctuation\">:</span> <span class=\"token function\">randomInt</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token constant\">EATER</span><span class=\"token punctuation\">:</span> <span class=\"token function\">randomInt</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">let</span> add <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'addnew'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  canvas<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'click'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>add<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">.</span>offsetX<span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">.</span>offsetY<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token comment\">//  ANIMATE LOOP</span>\n  <span class=\"token keyword\">function</span> <span class=\"token function\">animate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> grd <span class=\"token operator\">=</span> ctx<span class=\"token punctuation\">.</span><span class=\"token function\">createRadialGradient</span><span class=\"token punctuation\">(</span><span class=\"token constant\">WIDTH</span> <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">HEIGHT</span> <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">WIDTH</span> <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">HEIGHT</span> <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">WIDTH</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    grd<span class=\"token punctuation\">.</span><span class=\"token function\">addColorStop</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rgba(25,25,25,1)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    grd<span class=\"token punctuation\">.</span><span class=\"token function\">addColorStop</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rgba(0,0,25,1)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// Fill with gradient</span>\n    ctx<span class=\"token punctuation\">.</span>fillStyle <span class=\"token operator\">=</span> grd<span class=\"token punctuation\">;</span>\n    ctx<span class=\"token punctuation\">.</span><span class=\"token function\">fillRect</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">WIDTH</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">HEIGHT</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/**\n     * likes food dislikes poison\n     * run away form predators and eaters\n     * cloneItSelf\n     */</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">addBehavior</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      name<span class=\"token punctuation\">:</span> <span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">,</span>\n      like<span class=\"token punctuation\">:</span> <span class=\"token constant\">FOOD</span><span class=\"token punctuation\">,</span>\n      dislike<span class=\"token punctuation\">:</span> <span class=\"token constant\">POISON</span><span class=\"token punctuation\">,</span>\n      fear<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token constant\">PREDATOR</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">75</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token constant\">EATER</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">]</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      cloneItSelf<span class=\"token punctuation\">:</span> <span class=\"token number\">0.0015</span><span class=\"token punctuation\">,</span>\n      <span class=\"token function-variable function\">callback</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>ecoSys<span class=\"token punctuation\">.</span>groups<span class=\"token punctuation\">.</span><span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">.</span>length <span class=\"token operator\">&lt;</span> <span class=\"token constant\">MAX_CREATURES</span>\n          <span class=\"token operator\">&amp;&amp;</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> <span class=\"token constant\">REPRODUCTION_RATE</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">reproduce</span><span class=\"token punctuation\">(</span>ecoSys<span class=\"token punctuation\">.</span>groups<span class=\"token punctuation\">.</span><span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/**\n     * likes poison dislikes food\n     * seeks and eats creatures\n     * run away from eaters\n     */</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">addBehavior</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      name<span class=\"token punctuation\">:</span> <span class=\"token constant\">PREDATOR</span><span class=\"token punctuation\">,</span>\n      like<span class=\"token punctuation\">:</span> <span class=\"token constant\">POISON</span><span class=\"token punctuation\">,</span>\n      dislike<span class=\"token punctuation\">:</span> <span class=\"token constant\">FOOD</span><span class=\"token punctuation\">,</span>\n      likeDislikeWeight<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      fear<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token constant\">EATER</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token number\">50</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">agents<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          agents<span class=\"token punctuation\">.</span><span class=\"token function\">splice</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>health <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/**\n     * likes food dislikes poison\n     * run away form predators, eaters, creatures\n     */</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">addBehavior</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      name<span class=\"token punctuation\">:</span> <span class=\"token constant\">AVOIDER</span><span class=\"token punctuation\">,</span>\n      like<span class=\"token punctuation\">:</span> <span class=\"token constant\">FOOD</span><span class=\"token punctuation\">,</span>\n      dislike<span class=\"token punctuation\">:</span> <span class=\"token constant\">POISON</span><span class=\"token punctuation\">,</span>\n      cloneItSelf<span class=\"token punctuation\">:</span> <span class=\"token number\">0.0005</span><span class=\"token punctuation\">,</span>\n      <span class=\"token comment\">// likeDislikeWeight: [1, -1],</span>\n      fear<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">0.9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token constant\">EATER</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token constant\">PREDATOR</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>health <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>badFoodMultiplier<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n    <span class=\"token comment\">/**\n     * likes poison\n     * emits food as waste compound\n     * seeks creatures, predators, avoiders and EATS THEM\n     */</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">addBehavior</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      name<span class=\"token punctuation\">:</span> <span class=\"token constant\">EATER</span><span class=\"token punctuation\">,</span>\n      like<span class=\"token punctuation\">:</span> <span class=\"token constant\">POISON</span><span class=\"token punctuation\">,</span>\n      dislike<span class=\"token punctuation\">:</span> <span class=\"token constant\">POISON</span><span class=\"token punctuation\">,</span>\n      likeDislikeWeight<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      fear<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token constant\">CREATURE</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">list<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          list<span class=\"token punctuation\">.</span><span class=\"token function\">splice</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>health <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token constant\">PREDATOR</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">list<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          list<span class=\"token punctuation\">.</span><span class=\"token function\">splice</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>health <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        <span class=\"token constant\">AVOIDER</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">list<span class=\"token punctuation\">,</span> i</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          list<span class=\"token punctuation\">.</span><span class=\"token function\">splice</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>health <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>radius <span class=\"token operator\">+=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>goodFoodMultiplier<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token function-variable function\">callback</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> <span class=\"token number\">0.05</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token function\">addItem</span><span class=\"token punctuation\">(</span>ecoSys<span class=\"token punctuation\">.</span>entities<span class=\"token punctuation\">.</span><span class=\"token constant\">FOOD</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pos<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>pos<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// UPDATE &amp; RENDER</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    ecoSys<span class=\"token punctuation\">.</span><span class=\"token function\">update</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">renderItem</span><span class=\"token punctuation\">(</span>ecoSys<span class=\"token punctuation\">.</span>entities<span class=\"token punctuation\">.</span><span class=\"token constant\">FOOD</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'white'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">renderItem</span><span class=\"token punctuation\">(</span>ecoSys<span class=\"token punctuation\">.</span>entities<span class=\"token punctuation\">.</span><span class=\"token constant\">POISON</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'crimson'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">requestAnimationFrame</span><span class=\"token punctuation\">(</span>animate<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">animate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n\nwindow<span class=\"token punctuation\">.</span>onload <span class=\"token operator\">=</span> load<span class=\"token punctuation\">;</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>And that's it, phew, that was a lot of work. But in the end, we have beautiful flocking creatures playing around and interacting with each other. have fun watching them all day. &#x3C;3</p>","fields":{"slug":"/case-studies/evolution-aquerium"},"frontmatter":{"demo":"//anuraghazra.github.io/EvolutionAquerium","iframe":"//www.youtube.com/embed/GKIhVrOsQCI/?modestbranding=1&showinfo=0&autohide=1&rel=0","src":"//github.com/anuraghazra/EvolutionAquerium","title":"Evolution Aquerium","info":{"idea":"The basic idea of the project is to achieve and simulate biological creatures in an aquarium to see how they react in different scenarios","links":[["CodingTrain Steering Behavior Playlist","https://www.youtube.com/watch?v=mhjuuHl6qHM&t=1978s"],["Craige Reynold’s Flocking Behavior","https://www.red3d.com/cwr/index.html"]],"tech":["Javascript","HTML5 Canvas"]}}}},"pageContext":{"slug":"/case-studies/evolution-aquerium"}},"staticQueryHashes":["1033876704"]}