pixi-cull
Version:
a library to visibly cull objects designed to work with pixi.js
218 lines (212 loc) • 18.8 kB
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'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">"pixi.js"</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">"pixi-viewport"</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">"pixi-cull"</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"> < </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">=></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"><script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">"/directory-to-file/pixi.js"</span><span style="color: #800000">></script></span>
<span style="color: #800000"><script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">"/directory-to-file/pixi-cull.min.js"</span><span style="color: #800000">></script></span>
<span style="color: #800000"><script></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"></script></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>