UNPKG

pixi-cull

Version:

a library to visibly cull objects designed to work with pixi.js

218 lines (212 loc) 18.8 kB
<!doctype html> <html class="default no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>pixi-cull</title> <meta name="description" content="Documentation for pixi-cull"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="assets/css/main.css"> <script async src="assets/js/search.js" id="search-script"></script> </head> <body> <header> <div class="tsd-page-toolbar"> <div class="container"> <div class="table-wrap"> <div class="table-cell" id="tsd-search" data-index="assets/js/search.json" data-base="."> <div class="field"> <label for="tsd-search-field" class="tsd-widget search no-caption">Search</label> <input id="tsd-search-field" type="text" /> </div> <ul class="results"> <li class="state loading">Preparing search index...</li> <li class="state failure">The search index is not available</li> </ul> <a href="index.html" class="title">pixi-cull</a> </div> <div class="table-cell" id="tsd-widgets"> <div id="tsd-filter"> <a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a> <div class="tsd-filter-group"> <div class="tsd-select" id="tsd-filter-visibility"> <span class="tsd-select-label">All</span> <ul class="tsd-select-list"> <li data-value="public">Public</li> <li data-value="protected">Public/Protected</li> <li data-value="private" class="selected">All</li> </ul> </div> <input type="checkbox" id="tsd-filter-inherited" checked /> <label class="tsd-widget" for="tsd-filter-inherited">Inherited</label> <input type="checkbox" id="tsd-filter-externals" checked /> <label class="tsd-widget" for="tsd-filter-externals">Externals</label> </div> </div> <a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a> </div> </div> </div> </div> <div class="tsd-page-title"> <div class="container"> <h1>pixi-cull</h1> </div> </div> </header> <div class="container container-main"> <div class="row"> <div class="col-8 col-content"> <div class="tsd-panel tsd-typography"> <a href="#pixi-cull" id="pixi-cull" style="color: inherit; text-decoration: none;"> <h1>pixi-cull</h1> </a> <p>A library to visibly cull objects designed to work with pixi.js (but not dependent on pixi.js).</p> <p>Includes two types of culling algorithms: simple and spatial hash. The spatial hash may be also be used for collision detection, AI, etc.</p> <p>Features include:</p> <ul> <li>automatic calculate bounding boxes for pixi.js objects</li> <li>also allow manual calculation for objects</li> <li>bounds calculated from any viewport including pixi-viewport (pixi-viewport.getVisibleBounds())</li> </ul> <a href="#moving-from-v1-to-v2" id="moving-from-v1-to-v2" style="color: inherit; text-decoration: none;"> <h2>Moving from v1 to v2</h2> </a> <p>pixi-cull has been reworked and ported to typescript. The following functionality was removed:</p> <ul> <li>removed the options to change the object&#39;s parameter names for AABB, dirty, spatial, and visible (this greatly simplified) the code</li> <li>removed calculatePIXI as an option, since this library is now solely designed for pixi.js</li> </ul> <a href="#rationale" id="rationale" style="color: inherit; text-decoration: none;"> <h2>Rationale</h2> </a> <p>Since I maintain pixi-viewport, I was asked a number of times for a culling library. Well here it is. Choose from two drop-in algorithms to cull your objects.</p> <a href="#simple-example" id="simple-example" style="color: inherit; text-decoration: none;"> <h2>Simple Example</h2> </a> <pre><code class="language-js"><span style="color: #AF00DB">import</span><span style="color: #000000"> </span><span style="color: #0000FF">*</span><span style="color: #000000"> </span><span style="color: #AF00DB">as</span><span style="color: #000000"> </span><span style="color: #001080">PIXI</span><span style="color: #000000"> </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;pixi.js&quot;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> { </span><span style="color: #001080">Viewport</span><span style="color: #000000"> } </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;pixi-viewport&quot;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> { </span><span style="color: #001080">Simple</span><span style="color: #000000">, </span><span style="color: #001080">SpatialHash</span><span style="color: #000000"> } </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&quot;pixi-cull&quot;</span> <span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">app</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #0070C1">PIXI</span><span style="color: #000000">.</span><span style="color: #795E26">Application</span><span style="color: #000000">()</span> <span style="color: #001080">document</span><span style="color: #000000">.</span><span style="color: #001080">body</span><span style="color: #000000">.</span><span style="color: #795E26">appendChild</span><span style="color: #000000">(</span><span style="color: #001080">app</span><span style="color: #000000">.</span><span style="color: #001080">view</span><span style="color: #000000">)</span> <span style="color: #008000">// create viewport</span> <span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">viewport</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">Viewport</span><span style="color: #000000">({</span> <span style="color: #000000"> </span><span style="color: #001080">screenWidth:</span><span style="color: #000000"> </span><span style="color: #001080">app</span><span style="color: #000000">.</span><span style="color: #001080">view</span><span style="color: #000000">.</span><span style="color: #001080">offsetWidth</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">screenHeight:</span><span style="color: #000000"> </span><span style="color: #001080">app</span><span style="color: #000000">.</span><span style="color: #001080">view</span><span style="color: #000000">.</span><span style="color: #001080">offsetHeight</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">worldWidth:</span><span style="color: #000000"> </span><span style="color: #098658">10000</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">worldHeight:</span><span style="color: #000000"> </span><span style="color: #098658">10000</span><span style="color: #000000">,</span> <span style="color: #000000">})</span> <span style="color: #001080">app</span><span style="color: #000000">.</span><span style="color: #001080">stage</span><span style="color: #000000">.</span><span style="color: #795E26">addChild</span><span style="color: #000000">(</span><span style="color: #001080">viewport</span><span style="color: #000000">)</span> <span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #795E26">drag</span><span style="color: #000000">().</span><span style="color: #795E26">pinch</span><span style="color: #000000">().</span><span style="color: #795E26">wheel</span><span style="color: #000000">().</span><span style="color: #795E26">decelerate</span><span style="color: #000000">().</span><span style="color: #795E26">moveCenter</span><span style="color: #000000">(</span><span style="color: #098658">5000</span><span style="color: #000000">, </span><span style="color: #098658">5000</span><span style="color: #000000">)</span> <span style="color: #008000">// add red boxes</span> <span style="color: #AF00DB">for</span><span style="color: #000000"> (</span><span style="color: #0000FF">let</span><span style="color: #000000"> </span><span style="color: #001080">i</span><span style="color: #000000"> = </span><span style="color: #098658">0</span><span style="color: #000000">; </span><span style="color: #001080">i</span><span style="color: #000000"> &lt; </span><span style="color: #098658">500</span><span style="color: #000000">; </span><span style="color: #001080">i</span><span style="color: #000000">++) {</span> <span style="color: #000000"> </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">sprite</span><span style="color: #000000"> = </span><span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #795E26">addChild</span><span style="color: #000000">(</span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #0070C1">PIXI</span><span style="color: #000000">.</span><span style="color: #795E26">Sprite</span><span style="color: #000000">(</span><span style="color: #0070C1">PIXI</span><span style="color: #000000">.</span><span style="color: #001080">Texture</span><span style="color: #000000">.</span><span style="color: #0070C1">WHITE</span><span style="color: #000000">))</span> <span style="color: #000000"> </span><span style="color: #001080">sprite</span><span style="color: #000000">.</span><span style="color: #001080">tint</span><span style="color: #000000"> = </span><span style="color: #098658">0xff0000</span> <span style="color: #000000"> </span><span style="color: #001080">sprite</span><span style="color: #000000">.</span><span style="color: #001080">width</span><span style="color: #000000"> = </span><span style="color: #001080">sprite</span><span style="color: #000000">.</span><span style="color: #001080">height</span><span style="color: #000000"> = </span><span style="color: #098658">100</span> <span style="color: #000000"> </span><span style="color: #001080">sprite</span><span style="color: #000000">.</span><span style="color: #001080">position</span><span style="color: #000000">.</span><span style="color: #795E26">set</span><span style="color: #000000">(</span><span style="color: #267F99">Math</span><span style="color: #000000">.</span><span style="color: #795E26">random</span><span style="color: #000000">() * </span><span style="color: #098658">10000</span><span style="color: #000000">, </span><span style="color: #267F99">Math</span><span style="color: #000000">.</span><span style="color: #795E26">random</span><span style="color: #000000">() * </span><span style="color: #098658">10000</span><span style="color: #000000">)</span> <span style="color: #000000">}</span> <span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">cull</span><span style="color: #000000"> = </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">Simple</span><span style="color: #000000">() </span><span style="color: #008000">// new SpatialHash()</span> <span style="color: #001080">cull</span><span style="color: #000000">.</span><span style="color: #795E26">addList</span><span style="color: #000000">(</span><span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #001080">children</span><span style="color: #000000">)</span> <span style="color: #001080">cull</span><span style="color: #000000">.</span><span style="color: #795E26">cull</span><span style="color: #000000">(</span><span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #795E26">getVisibleBounds</span><span style="color: #000000">())</span> <span style="color: #008000">// cull whenever the viewport moves</span> <span style="color: #0070C1">PIXI</span><span style="color: #000000">.</span><span style="color: #001080">Ticker</span><span style="color: #000000">.</span><span style="color: #001080">shared</span><span style="color: #000000">.</span><span style="color: #795E26">add</span><span style="color: #000000">(() </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #AF00DB">if</span><span style="color: #000000"> (</span><span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #001080">dirty</span><span style="color: #000000">) {</span> <span style="color: #000000"> </span><span style="color: #001080">cull</span><span style="color: #000000">.</span><span style="color: #795E26">cull</span><span style="color: #000000">(</span><span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #795E26">getVisibleBounds</span><span style="color: #000000">())</span> <span style="color: #000000"> </span><span style="color: #001080">viewport</span><span style="color: #000000">.</span><span style="color: #001080">dirty</span><span style="color: #000000"> = </span><span style="color: #0000FF">false</span> <span style="color: #000000"> }</span> <span style="color: #000000">})</span> </code></pre> <a href="#live-example" id="live-example" style="color: inherit; text-decoration: none;"> <h2>Live Example</h2> </a> <p><a href="https://davidfig.github.io/pixi-cull/">https://davidfig.github.io/pixi-cull/</a></p> <a href="#api-documentation" id="api-documentation" style="color: inherit; text-decoration: none;"> <h2>API Documentation</h2> </a> <p><a href="https://davidfig.github.io/pixi-cull/jsdoc/">https://davidfig.github.io/pixi-cull/jsdoc/</a></p> <a href="#installation" id="installation" style="color: inherit; text-decoration: none;"> <h2>Installation</h2> </a> <pre><code><span style="color: #001080">npm</span><span style="color: #000000"> </span><span style="color: #001080">i</span><span style="color: #000000"> </span><span style="color: #001080">pixi</span><span style="color: #000000">-</span><span style="color: #001080">cull</span> </code></pre> <p>or <a href="https://github.com/davidfig/pixi-viewport/releases/">grab the latest release</a> and use it:</p> <pre><code class="language-html"><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">&quot;/directory-to-file/pixi.js&quot;</span><span style="color: #800000">&gt;&lt;/script&gt;</span> <span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">&quot;/directory-to-file/pixi-cull.min.js&quot;</span><span style="color: #800000">&gt;&lt;/script&gt;</span> <span style="color: #800000">&lt;script&gt;</span> <span style="color: #000000FF"> </span><span style="color: #0000FF">const</span><span style="color: #000000FF"> </span><span style="color: #0070C1">SimpleCull</span><span style="color: #000000FF"> </span><span style="color: #000000">=</span><span style="color: #000000FF"> </span><span style="color: #0000FF">new</span><span style="color: #000000FF"> </span><span style="color: #001080">Cull</span><span style="color: #000000FF">.</span><span style="color: #795E26">Simple</span><span style="color: #000000FF">()</span> <span style="color: #800000">&lt;/script&gt;</span> </code></pre> <a href="#license" id="license" style="color: inherit; text-decoration: none;"> <h2>license</h2> </a> <p>MIT License (c) 2021 <a href="https://yopeyopey.com/">YOPEY YOPEY LLC</a> by <a href="https://twitter.com/yopey_yopey/">David Figatner</a></p> </div> </div> <div class="col-4 col-menu menu-sticky-wrap menu-highlight"> <nav class="tsd-navigation primary"> <ul> <li class=" "> <a href="modules.html">Exports</a> </li> </ul> </nav> <nav class="tsd-navigation secondary menu-sticky"> <ul class="before-current"> <li class=" tsd-kind-class"> <a href="classes/simple.html" class="tsd-kind-icon">Simple</a> </li> <li class=" tsd-kind-class"> <a href="classes/spatialhash.html" class="tsd-kind-icon">Spatial<wbr>Hash</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/aabb.html" class="tsd-kind-icon">AABB</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/containercullobject.html" class="tsd-kind-icon">Container<wbr>Cull<wbr>Object</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/containerwithculling.html" class="tsd-kind-icon">Container<wbr>With<wbr>Culling</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/displayobjectwithculling.html" class="tsd-kind-icon">Display<wbr>Object<wbr>With<wbr>Culling</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/simpleoptions.html" class="tsd-kind-icon">Simple<wbr>Options</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/simplestats.html" class="tsd-kind-icon">Simple<wbr>Stats</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/spatialhashoptions.html" class="tsd-kind-icon">Spatial<wbr>Hash<wbr>Options</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/spatialhashstats.html" class="tsd-kind-icon">Spatial<wbr>Hash<wbr>Stats</a> </li> </ul> </nav> </div> </div> </div> <footer class="with-border-bottom"> <div class="container"> <h2>Legend</h2> <div class="tsd-legend-group"> <ul class="tsd-legend"> <li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li> <li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li> <li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li> </ul> <ul class="tsd-legend"> <li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li> </ul> </div> </div> </footer> <div class="container tsd-generator"> <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p> </div> <div class="overlay"></div> <script src="assets/js/main.js"></script> </body> </html>