7 Commits

Author SHA1 Message Date
38d29a9303 piping the texture attachments 2021-03-23 22:01:33 -07:00
afc20a0efa tweaks 2021-03-18 23:26:53 -07:00
5d4e6f8bed tweaks 2021-03-16 21:28:15 -07:00
8cc76b7052 target views 2021-03-10 00:19:06 -08:00
bd2e2557b8 compiling state 2021-03-09 23:07:07 -08:00
7fb89e7d6e thinking about shaders 2021-02-24 18:30:45 -08:00
813d2f6f2f exploring other rendering styles 2021-02-23 21:18:11 -08:00
42 changed files with 578 additions and 3398 deletions

2
.gitignore vendored
View File

@@ -1,3 +1 @@
/target
Cargo.lock
.idea/*

8
.idea/.gitignore generated vendored
View File

@@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@@ -31,9 +31,9 @@ crossbeam = "0.8.0"
toml = "0.5.8"
cgmath = "0.18.0"
rapier3d = { version = "0.11.1", features = ["simd-nightly", "parallel"] }
nalgebra = "0.29.0"
legion = "0.3.1"
rapier3d = { version = "0.5.0", features = ["simd-nightly", "parallel"] }
nalgebra = "0.24.1"
legion = "0.4.0"
wgpu = "0.7.0"
imgui = "0.7.0"
imgui-wgpu = "0.14.0"

View File

@@ -1,6 +1,6 @@
[[entities]]
name = "terrain.1"
type = "StaticMesh"
type = "Terrain"
mesh = "test-textured.obj"
[[entities]]
@@ -26,20 +26,6 @@ mesh = "ball.obj"
y = 1.0
z = 1.0
[[entities]]
name = "tile.1"
type = "Sprite"
texture = "test.jpg"
[entities.position]
x = 15.0
y = 15.0
z = 0.0
[entities.position.rotation]
x = 0.0
y = 0.0
[[entities]]
name = "camera.1"
type = "Camera"

View File

@@ -1,213 +0,0 @@
<html>
<head>
<title>camera.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #33ccff; font-weight: bold;}
.s5 { color: #7ec3e6;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
camera.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">f32</span><span class="s1">::</span><span class="s2">consts</span><span class="s1">::{</span><span class="s2">FRAC_PI_2</span><span class="s3">, </span><span class="s2">PI</span><span class="s1">}</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">time</span><span class="s1">::{</span><span class="s2">Duration</span><span class="s3">, </span><span class="s2">Instant</span><span class="s1">}</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a>
<a name="l4"><span class="ln">4 </span></a><span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::{</span><span class="s2">Decomposed</span><span class="s3">, </span><span class="s2">InnerSpace</span><span class="s3">, </span><span class="s2">Matrix4</span><span class="s3">, </span><span class="s2">Point3</span><span class="s3">, </span><span class="s2">Rad</span><span class="s3">, </span><span class="s2">Vector3</span><span class="s1">}</span><span class="s3">;</span>
<a name="l5"><span class="ln">5 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">dpi</span><span class="s1">::{</span><span class="s2">LogicalPosition</span><span class="s3">, </span><span class="s2">PhysicalPosition</span><span class="s1">}</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::{</span><span class="s2">ElementState</span><span class="s3">, </span><span class="s2">MouseScrollDelta</span><span class="s3">, </span><span class="s2">VirtualKeyCode</span><span class="s1">}</span><span class="s3">;</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">render</span><span class="s1">::</span><span class="s2">OPENGL_TO_WGPU_MATRIX</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Condition</span><span class="s3">;</span>
<a name="l9"><span class="ln">9 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l10"><span class="ln">10 </span></a>
<a name="l11"><span class="ln">11 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Copy</span><span class="s3">, </span><span class="s2">Debug</span><span class="s3">, </span><span class="s2">PartialEq</span><span class="s1">)]</span>
<a name="l12"><span class="ln">12 </span></a><span class="s0">pub struct </span><span class="s2">Camera </span><span class="s1">{</span>
<a name="l13"><span class="ln">13 </span></a> <span class="s0">pub </span><span class="s2">position</span><span class="s1">: </span><span class="s2">Point3</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l14"><span class="ln">14 </span></a> <span class="s0">pub </span><span class="s2">yaw</span><span class="s1">: </span><span class="s2">Rad</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l15"><span class="ln">15 </span></a> <span class="s0">pub </span><span class="s2">pitch</span><span class="s1">: </span><span class="s2">Rad</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l16"><span class="ln">16 </span></a><span class="s1">}</span>
<a name="l17"><span class="ln">17 </span></a>
<a name="l18"><span class="ln">18 </span></a><span class="s0">impl </span><span class="s2">Camera </span><span class="s1">{</span>
<a name="l19"><span class="ln">19 </span></a> <span class="s0">pub fn </span><span class="s2">new</span><span class="s1">&lt;</span><span class="s2">V</span><span class="s1">: </span><span class="s2">Into</span><span class="s1">&lt;</span><span class="s2">Point3</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;&gt;</span><span class="s3">, </span><span class="s2">Y</span><span class="s1">: </span><span class="s2">Into</span><span class="s1">&lt;</span><span class="s2">Rad</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;&gt;</span><span class="s3">, </span><span class="s2">P</span><span class="s1">: </span><span class="s2">Into</span><span class="s1">&lt;</span><span class="s2">Rad</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;&gt;&gt;(</span>
<a name="l20"><span class="ln">20 </span></a> <span class="s2">position</span><span class="s1">: </span><span class="s2">V</span><span class="s3">,</span>
<a name="l21"><span class="ln">21 </span></a> <span class="s2">yaw</span><span class="s1">: </span><span class="s2">Y</span><span class="s3">,</span>
<a name="l22"><span class="ln">22 </span></a> <span class="s2">pitch</span><span class="s1">: </span><span class="s2">P</span><span class="s3">,</span>
<a name="l23"><span class="ln">23 </span></a> <span class="s1">) -&gt; </span><span class="s0">Self </span><span class="s1">{</span>
<a name="l24"><span class="ln">24 </span></a> <span class="s0">Self </span><span class="s1">{</span>
<a name="l25"><span class="ln">25 </span></a> <span class="s2">position</span><span class="s1">: </span><span class="s2">position</span><span class="s1">.</span><span class="s2">into</span><span class="s1">()</span><span class="s3">,</span>
<a name="l26"><span class="ln">26 </span></a> <span class="s2">yaw</span><span class="s1">: </span><span class="s2">yaw</span><span class="s1">.</span><span class="s2">into</span><span class="s1">()</span><span class="s3">,</span>
<a name="l27"><span class="ln">27 </span></a> <span class="s2">pitch</span><span class="s1">: </span><span class="s2">pitch</span><span class="s1">.</span><span class="s2">into</span><span class="s1">()</span><span class="s3">,</span>
<a name="l28"><span class="ln">28 </span></a> <span class="s1">}</span>
<a name="l29"><span class="ln">29 </span></a> <span class="s1">}</span>
<a name="l30"><span class="ln">30 </span></a>
<a name="l31"><span class="ln">31 </span></a> <span class="s0">pub fn </span><span class="s2">calc_matrix</span><span class="s1">(&amp;</span><span class="s0">self</span><span class="s3">, </span><span class="s2">projection</span><span class="s1">: </span><span class="s2">cgmath</span><span class="s1">::</span><span class="s2">Matrix4</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;) -&gt; </span><span class="s2">Matrix4</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt; {</span>
<a name="l32"><span class="ln">32 </span></a>
<a name="l33"><span class="ln">33 </span></a> <span class="s0">let </span><span class="s2">view_vector </span><span class="s1">= </span><span class="s2">Point3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span>
<a name="l34"><span class="ln">34 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s0">self</span><span class="s1">.</span><span class="s2">pitch</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">() * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">yaw</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">())</span><span class="s3">,</span>
<a name="l35"><span class="ln">35 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s0">self</span><span class="s1">.</span><span class="s2">pitch</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">cos</span><span class="s1">())</span><span class="s3">,</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s0">self</span><span class="s1">.</span><span class="s2">pitch</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">() * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">yaw</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">cos</span><span class="s1">())</span><span class="s3">,</span>
<a name="l37"><span class="ln">37 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l38"><span class="ln">38 </span></a>
<a name="l39"><span class="ln">39 </span></a> <span class="s0">let </span><span class="s2">mx_view </span><span class="s1">= </span><span class="s2">Matrix4</span><span class="s1">::</span><span class="s2">look_at</span><span class="s1">(</span>
<a name="l40"><span class="ln">40 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">position</span><span class="s3">,</span>
<a name="l41"><span class="ln">41 </span></a> <span class="s2">Point3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span>
<a name="l42"><span class="ln">42 </span></a> <span class="s2">view_vector</span><span class="s1">.</span><span class="s2">x </span><span class="s1">+ </span><span class="s0">self</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">x</span><span class="s3">,</span>
<a name="l43"><span class="ln">43 </span></a> <span class="s2">view_vector</span><span class="s1">.</span><span class="s2">y </span><span class="s1">+ </span><span class="s0">self</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">y</span><span class="s3">,</span>
<a name="l44"><span class="ln">44 </span></a> <span class="s2">view_vector</span><span class="s1">.</span><span class="s2">z </span><span class="s1">+ </span><span class="s0">self</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">z</span><span class="s3">,</span>
<a name="l45"><span class="ln">45 </span></a> <span class="s1">)</span><span class="s3">,</span>
<a name="l46"><span class="ln">46 </span></a> <span class="s2">Vector3</span><span class="s1">::</span><span class="s2">unit_y</span><span class="s1">()</span><span class="s3">,</span>
<a name="l47"><span class="ln">47 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l48"><span class="ln">48 </span></a> <span class="s5">// I don't know how this works, but it limits pitching to like</span>
<a name="l49"><span class="ln">49 </span></a> <span class="s5">// 70 degrees. Lame</span>
<a name="l50"><span class="ln">50 </span></a> <span class="s5">// let mx_view = Matrix4::look_at_dir(</span>
<a name="l51"><span class="ln">51 </span></a> <span class="s5">// self.position,</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s5">// Vector3::new(</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s5">// self.yaw.0.cos(),</span>
<a name="l54"><span class="ln">54 </span></a> <span class="s5">// self.pitch.0.sin(),</span>
<a name="l55"><span class="ln">55 </span></a> <span class="s5">// self.yaw.0.sin(),</span>
<a name="l56"><span class="ln">56 </span></a> <span class="s5">// ).normalize(),</span>
<a name="l57"><span class="ln">57 </span></a> <span class="s5">// Vector3::unit_y(),</span>
<a name="l58"><span class="ln">58 </span></a> <span class="s5">// );</span>
<a name="l59"><span class="ln">59 </span></a> <span class="s0">let </span><span class="s2">mx_correction </span><span class="s1">= </span><span class="s2">OPENGL_TO_WGPU_MATRIX</span><span class="s3">;</span>
<a name="l60"><span class="ln">60 </span></a> <span class="s2">mx_correction </span><span class="s1">* </span><span class="s2">projection </span><span class="s1">* </span><span class="s2">mx_view</span>
<a name="l61"><span class="ln">61 </span></a> <span class="s1">}</span>
<a name="l62"><span class="ln">62 </span></a><span class="s1">}</span>
<a name="l63"><span class="ln">63 </span></a>
<a name="l64"><span class="ln">64 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l65"><span class="ln">65 </span></a><span class="s0">pub struct </span><span class="s2">CameraController </span><span class="s1">{</span>
<a name="l66"><span class="ln">66 </span></a> <span class="s2">amount_left</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l67"><span class="ln">67 </span></a> <span class="s2">amount_right</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l68"><span class="ln">68 </span></a> <span class="s2">amount_forward</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l69"><span class="ln">69 </span></a> <span class="s2">amount_backward</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l70"><span class="ln">70 </span></a> <span class="s2">amount_up</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l71"><span class="ln">71 </span></a> <span class="s2">amount_down</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l72"><span class="ln">72 </span></a> <span class="s2">rotate_horizontal</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l73"><span class="ln">73 </span></a> <span class="s2">rotate_vertical</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l74"><span class="ln">74 </span></a> <span class="s2">scroll</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l75"><span class="ln">75 </span></a> <span class="s2">speed</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l76"><span class="ln">76 </span></a> <span class="s2">sensitivity</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l77"><span class="ln">77 </span></a> <span class="s2">active</span><span class="s1">: </span><span class="s2">bool</span><span class="s3">,</span>
<a name="l78"><span class="ln">78 </span></a><span class="s1">}</span>
<a name="l79"><span class="ln">79 </span></a>
<a name="l80"><span class="ln">80 </span></a><span class="s0">impl </span><span class="s2">CameraController </span><span class="s1">{</span>
<a name="l81"><span class="ln">81 </span></a> <span class="s0">pub fn </span><span class="s2">new</span><span class="s1">(</span><span class="s2">speed</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">, </span><span class="s2">sensitivity</span><span class="s1">: </span><span class="s2">f32</span><span class="s1">) -&gt; </span><span class="s0">Self </span><span class="s1">{</span>
<a name="l82"><span class="ln">82 </span></a> <span class="s0">Self </span><span class="s1">{</span>
<a name="l83"><span class="ln">83 </span></a> <span class="s2">amount_left</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l84"><span class="ln">84 </span></a> <span class="s2">amount_right</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l85"><span class="ln">85 </span></a> <span class="s2">amount_forward</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l86"><span class="ln">86 </span></a> <span class="s2">amount_backward</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l87"><span class="ln">87 </span></a> <span class="s2">amount_up</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l88"><span class="ln">88 </span></a> <span class="s2">amount_down</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l89"><span class="ln">89 </span></a> <span class="s2">rotate_horizontal</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l90"><span class="ln">90 </span></a> <span class="s2">rotate_vertical</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l91"><span class="ln">91 </span></a> <span class="s2">scroll</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l92"><span class="ln">92 </span></a> <span class="s2">speed</span><span class="s3">,</span>
<a name="l93"><span class="ln">93 </span></a> <span class="s2">sensitivity</span><span class="s3">,</span>
<a name="l94"><span class="ln">94 </span></a> <span class="s2">active</span><span class="s1">: </span><span class="s0">true</span>
<a name="l95"><span class="ln">95 </span></a> <span class="s1">}</span>
<a name="l96"><span class="ln">96 </span></a> <span class="s1">}</span>
<a name="l97"><span class="ln">97 </span></a>
<a name="l98"><span class="ln">98 </span></a> <span class="s0">pub fn </span><span class="s2">process_keyboard</span><span class="s1">(&amp;</span><span class="s0">mut self</span><span class="s3">, </span><span class="s2">key</span><span class="s1">: </span><span class="s2">VirtualKeyCode</span><span class="s3">, </span><span class="s2">state</span><span class="s1">: </span><span class="s2">ElementState</span><span class="s1">) -&gt; </span><span class="s2">bool </span><span class="s1">{</span>
<a name="l99"><span class="ln">99 </span></a> <span class="s0">let </span><span class="s2">amount </span><span class="s1">= </span><span class="s0">if </span><span class="s2">state </span><span class="s1">== </span><span class="s2">ElementState</span><span class="s1">::</span><span class="s2">Pressed </span><span class="s1">{</span>
<a name="l100"><span class="ln">100 </span></a> <span class="s4">1</span><span class="s1">.</span><span class="s4">0</span>
<a name="l101"><span class="ln">101 </span></a> <span class="s1">} </span><span class="s0">else </span><span class="s1">{</span>
<a name="l102"><span class="ln">102 </span></a> <span class="s4">0</span><span class="s1">.</span><span class="s4">0</span>
<a name="l103"><span class="ln">103 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l104"><span class="ln">104 </span></a> <span class="s0">let </span><span class="s2">active </span><span class="s1">= </span><span class="s0">match </span><span class="s2">key </span><span class="s1">{</span>
<a name="l105"><span class="ln">105 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">P </span><span class="s1">=&gt; {</span>
<a name="l106"><span class="ln">106 </span></a> <span class="s0">if </span><span class="s2">state </span><span class="s1">== </span><span class="s2">ElementState</span><span class="s1">::</span><span class="s2">Pressed </span><span class="s1">{</span>
<a name="l107"><span class="ln">107 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">active </span><span class="s1">= !</span><span class="s0">self</span><span class="s1">.</span><span class="s2">active</span><span class="s3">;</span>
<a name="l108"><span class="ln">108 </span></a> <span class="s1">}</span>
<a name="l109"><span class="ln">109 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">active</span>
<a name="l110"><span class="ln">110 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l111"><span class="ln">111 </span></a> <span class="s2">_ </span><span class="s1">=&gt; {</span><span class="s0">self</span><span class="s1">.</span><span class="s2">active</span><span class="s1">}</span>
<a name="l112"><span class="ln">112 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l113"><span class="ln">113 </span></a> <span class="s0">if </span><span class="s2">active </span><span class="s1">{</span>
<a name="l114"><span class="ln">114 </span></a> <span class="s0">match </span><span class="s2">key </span><span class="s1">{</span>
<a name="l115"><span class="ln">115 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">W </span><span class="s1">| </span><span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Up </span><span class="s1">=&gt; {</span>
<a name="l116"><span class="ln">116 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">amount_forward </span><span class="s1">= </span><span class="s2">amount</span><span class="s3">;</span>
<a name="l117"><span class="ln">117 </span></a> <span class="s0">true</span>
<a name="l118"><span class="ln">118 </span></a> <span class="s1">}</span>
<a name="l119"><span class="ln">119 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">S </span><span class="s1">| </span><span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Down </span><span class="s1">=&gt; {</span>
<a name="l120"><span class="ln">120 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">amount_backward </span><span class="s1">= </span><span class="s2">amount</span><span class="s3">;</span>
<a name="l121"><span class="ln">121 </span></a> <span class="s0">true</span>
<a name="l122"><span class="ln">122 </span></a> <span class="s1">}</span>
<a name="l123"><span class="ln">123 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">A </span><span class="s1">| </span><span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Left </span><span class="s1">=&gt; {</span>
<a name="l124"><span class="ln">124 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">amount_left </span><span class="s1">= </span><span class="s2">amount</span><span class="s3">;</span>
<a name="l125"><span class="ln">125 </span></a> <span class="s0">true</span>
<a name="l126"><span class="ln">126 </span></a> <span class="s1">}</span>
<a name="l127"><span class="ln">127 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">D </span><span class="s1">| </span><span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Right </span><span class="s1">=&gt; {</span>
<a name="l128"><span class="ln">128 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">amount_right </span><span class="s1">= </span><span class="s2">amount</span><span class="s3">;</span>
<a name="l129"><span class="ln">129 </span></a> <span class="s0">true</span>
<a name="l130"><span class="ln">130 </span></a> <span class="s1">}</span>
<a name="l131"><span class="ln">131 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Space </span><span class="s1">=&gt; {</span>
<a name="l132"><span class="ln">132 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">amount_up </span><span class="s1">= </span><span class="s2">amount</span><span class="s3">;</span>
<a name="l133"><span class="ln">133 </span></a> <span class="s0">true</span>
<a name="l134"><span class="ln">134 </span></a> <span class="s1">}</span>
<a name="l135"><span class="ln">135 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">LShift </span><span class="s1">=&gt; {</span>
<a name="l136"><span class="ln">136 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">amount_down </span><span class="s1">= </span><span class="s2">amount</span><span class="s3">;</span>
<a name="l137"><span class="ln">137 </span></a> <span class="s0">true</span>
<a name="l138"><span class="ln">138 </span></a> <span class="s1">}</span>
<a name="l139"><span class="ln">139 </span></a> <span class="s2">_ </span><span class="s1">=&gt; </span><span class="s0">false</span><span class="s3">,</span>
<a name="l140"><span class="ln">140 </span></a> <span class="s1">}</span>
<a name="l141"><span class="ln">141 </span></a> <span class="s1">} </span><span class="s0">else </span><span class="s1">{</span>
<a name="l142"><span class="ln">142 </span></a> <span class="s0">false</span>
<a name="l143"><span class="ln">143 </span></a> <span class="s1">}</span>
<a name="l144"><span class="ln">144 </span></a> <span class="s1">}</span>
<a name="l145"><span class="ln">145 </span></a>
<a name="l146"><span class="ln">146 </span></a> <span class="s0">pub fn </span><span class="s2">process_mouse</span><span class="s1">(&amp;</span><span class="s0">mut self</span><span class="s3">, </span><span class="s2">mouse_dx</span><span class="s1">: </span><span class="s2">f64</span><span class="s3">, </span><span class="s2">mouse_dy</span><span class="s1">: </span><span class="s2">f64</span><span class="s1">) {</span>
<a name="l147"><span class="ln">147 </span></a> <span class="s0">if self</span><span class="s1">.</span><span class="s2">active </span><span class="s1">{</span>
<a name="l148"><span class="ln">148 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">rotate_horizontal </span><span class="s1">= -</span><span class="s2">mouse_dx </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">;</span>
<a name="l149"><span class="ln">149 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">rotate_vertical </span><span class="s1">= </span><span class="s2">mouse_dy </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">;</span>
<a name="l150"><span class="ln">150 </span></a> <span class="s1">}</span>
<a name="l151"><span class="ln">151 </span></a> <span class="s1">}</span>
<a name="l152"><span class="ln">152 </span></a>
<a name="l153"><span class="ln">153 </span></a> <span class="s0">pub fn </span><span class="s2">update_camera</span><span class="s1">(&amp;</span><span class="s0">mut self</span><span class="s3">, </span><span class="s2">camera</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">Camera</span><span class="s3">, </span><span class="s2">dt</span><span class="s1">: </span><span class="s2">f32</span><span class="s1">) {</span>
<a name="l154"><span class="ln">154 </span></a>
<a name="l155"><span class="ln">155 </span></a> <span class="s5">// Move forward/backward and left/right</span>
<a name="l156"><span class="ln">156 </span></a> <span class="s0">let </span><span class="s2">view_vector </span><span class="s1">= </span><span class="s2">Vector3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span>
<a name="l157"><span class="ln">157 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">() * </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">yaw</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">())</span><span class="s3">,</span>
<a name="l158"><span class="ln">158 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">cos</span><span class="s1">())</span><span class="s3">,</span>
<a name="l159"><span class="ln">159 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">() * </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">yaw</span><span class="s1">.</span><span class="s4">0</span><span class="s1">.</span><span class="s2">cos</span><span class="s1">())</span><span class="s3">,</span>
<a name="l160"><span class="ln">160 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l161"><span class="ln">161 </span></a>
<a name="l162"><span class="ln">162 </span></a> <span class="s5">// Offset the yaw 90 degrees and set the pitch to level for our</span>
<a name="l163"><span class="ln">163 </span></a> <span class="s5">// right / left hand translation vectors</span>
<a name="l164"><span class="ln">164 </span></a> <span class="s0">let </span><span class="s2">offset </span><span class="s1">= </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">yaw</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">+ </span><span class="s2">PI</span><span class="s1">/</span><span class="s4">2</span><span class="s1">.</span><span class="s4">0</span><span class="s3">;</span>
<a name="l165"><span class="ln">165 </span></a> <span class="s0">let </span><span class="s2">pitch </span><span class="s1">= </span><span class="s2">PI</span><span class="s1">/</span><span class="s4">2</span><span class="s1">.</span><span class="s4">0</span><span class="s3">;</span>
<a name="l166"><span class="ln">166 </span></a> <span class="s0">let </span><span class="s2">left_vector </span><span class="s1">= </span><span class="s2">Vector3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span>
<a name="l167"><span class="ln">167 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">pitch</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">() * </span><span class="s2">offset</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">())</span><span class="s3">,</span>
<a name="l168"><span class="ln">168 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">pitch</span><span class="s1">.</span><span class="s2">cos</span><span class="s1">())</span><span class="s3">,</span>
<a name="l169"><span class="ln">169 </span></a> <span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">pitch</span><span class="s1">.</span><span class="s2">sin</span><span class="s1">() * </span><span class="s2">offset</span><span class="s1">.</span><span class="s2">cos</span><span class="s1">())</span><span class="s3">,</span>
<a name="l170"><span class="ln">170 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l171"><span class="ln">171 </span></a>
<a name="l172"><span class="ln">172 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">position </span><span class="s1">+= </span><span class="s2">view_vector </span><span class="s1">* (</span><span class="s0">self</span><span class="s1">.</span><span class="s2">amount_forward </span><span class="s1">- </span><span class="s0">self</span><span class="s1">.</span><span class="s2">amount_backward</span><span class="s1">) * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">speed </span><span class="s1">* </span><span class="s2">dt</span><span class="s3">;</span>
<a name="l173"><span class="ln">173 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">position </span><span class="s1">+= </span><span class="s2">left_vector </span><span class="s1">* (</span><span class="s0">self</span><span class="s1">.</span><span class="s2">amount_left </span><span class="s1">- </span><span class="s0">self</span><span class="s1">.</span><span class="s2">amount_right</span><span class="s1">) * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">speed </span><span class="s1">* </span><span class="s2">dt</span><span class="s3">;</span>
<a name="l174"><span class="ln">174 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">y </span><span class="s1">+= (</span><span class="s0">self</span><span class="s1">.</span><span class="s2">amount_up </span><span class="s1">- </span><span class="s0">self</span><span class="s1">.</span><span class="s2">amount_down</span><span class="s1">) * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">speed </span><span class="s1">* </span><span class="s2">dt</span><span class="s3">;</span>
<a name="l175"><span class="ln">175 </span></a>
<a name="l176"><span class="ln">176 </span></a> <span class="s5">// Rotate</span>
<a name="l177"><span class="ln">177 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">yaw </span><span class="s1">+= </span><span class="s2">Rad</span><span class="s1">(</span><span class="s0">self</span><span class="s1">.</span><span class="s2">rotate_horizontal</span><span class="s1">) * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">sensitivity </span><span class="s1">* </span><span class="s2">dt</span><span class="s3">;</span>
<a name="l178"><span class="ln">178 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch </span><span class="s1">+= </span><span class="s2">Rad</span><span class="s1">(</span><span class="s0">self</span><span class="s1">.</span><span class="s2">rotate_vertical</span><span class="s1">) * </span><span class="s0">self</span><span class="s1">.</span><span class="s2">sensitivity </span><span class="s1">* </span><span class="s2">dt</span><span class="s3">;</span>
<a name="l179"><span class="ln">179 </span></a>
<a name="l180"><span class="ln">180 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">rotate_horizontal </span><span class="s1">= </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">;</span>
<a name="l181"><span class="ln">181 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">rotate_vertical </span><span class="s1">= </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">;</span>
<a name="l182"><span class="ln">182 </span></a>
<a name="l183"><span class="ln">183 </span></a> <span class="s5">// Keep the camera's angle from going too high/low.</span>
<a name="l184"><span class="ln">184 </span></a> <span class="s0">if </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch </span><span class="s1">&lt; -</span><span class="s2">Rad</span><span class="s1">(</span><span class="s4">0</span><span class="s1">.</span><span class="s4">001</span><span class="s1">) {</span>
<a name="l185"><span class="ln">185 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch </span><span class="s1">= -</span><span class="s2">Rad</span><span class="s1">(</span><span class="s4">0</span><span class="s1">.</span><span class="s4">001</span><span class="s1">)</span><span class="s3">;</span>
<a name="l186"><span class="ln">186 </span></a> <span class="s1">} </span><span class="s0">else if </span><span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch </span><span class="s1">&gt; </span><span class="s2">Rad</span><span class="s1">(</span><span class="s2">PI </span><span class="s1">- </span><span class="s4">0</span><span class="s1">.</span><span class="s4">001</span><span class="s1">) {</span>
<a name="l187"><span class="ln">187 </span></a> <span class="s2">camera</span><span class="s1">.</span><span class="s2">pitch </span><span class="s1">= </span><span class="s2">Rad</span><span class="s1">(</span><span class="s2">PI </span><span class="s1">- </span><span class="s4">0</span><span class="s1">.</span><span class="s4">001</span><span class="s1">)</span><span class="s3">;</span>
<a name="l188"><span class="ln">188 </span></a> <span class="s1">}</span>
<a name="l189"><span class="ln">189 </span></a> <span class="s1">}</span>
<a name="l190"><span class="ln">190 </span></a><span class="s1">}</span>
<a name="l191"><span class="ln">191 </span></a></pre>
</body>
</html>

View File

@@ -1,142 +0,0 @@
<html>
<head>
<title>components.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #7ec3e6;}
.s5 { color: #20999d; font-style: italic;}
.s6 { color: #33ccff; font-weight: bold;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
components.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">sync</span><span class="s1">::</span><span class="s2">Arc</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">time</span><span class="s1">::{</span><span class="s2">Duration</span><span class="s3">, </span><span class="s2">Instant</span><span class="s1">}</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a>
<a name="l4"><span class="ln">4 </span></a><span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::{</span><span class="s2">Deg</span><span class="s3">, </span><span class="s2">Euler</span><span class="s1">}</span><span class="s3">;</span>
<a name="l5"><span class="ln">5 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">dynamics</span><span class="s1">::{</span><span class="s2">RigidBody</span><span class="s3">, </span><span class="s2">RigidBodyHandle</span><span class="s1">}</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::</span><span class="s2">Collider </span><span class="s0">as </span><span class="s2">r3dCollider</span><span class="s3">;</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::</span><span class="s2">ColliderHandle</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a><span class="s0">use </span><span class="s2">wgpu</span><span class="s1">::{</span><span class="s2">BindGroup</span><span class="s3">, </span><span class="s2">Buffer</span><span class="s3">, </span><span class="s2">TextureView</span><span class="s1">}</span><span class="s3">;</span>
<a name="l9"><span class="ln">9 </span></a>
<a name="l10"><span class="ln">10 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">runtime</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::{</span><span class="s2">TomlPositionDescription</span><span class="s3">, </span><span class="s2">TomlRotationDescription</span><span class="s1">}</span><span class="s3">;</span>
<a name="l11"><span class="ln">11 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Ui</span><span class="s3">;</span>
<a name="l12"><span class="ln">12 </span></a>
<a name="l13"><span class="ln">13 </span></a><span class="s4">// a component is any type that is 'static, sized, send and sync</span>
<a name="l14"><span class="ln">14 </span></a>
<a name="l15"><span class="ln">15 </span></a><span class="s0">pub struct </span><span class="s2">ImguiWindow</span><span class="s1">&lt;</span><span class="s5">'a</span><span class="s3">, </span><span class="s2">T</span><span class="s1">&gt; {</span>
<a name="l16"><span class="ln">16 </span></a> <span class="s0">pub </span><span class="s2">window</span><span class="s1">: </span><span class="s0">fn</span><span class="s1">() -&gt; </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Window</span><span class="s1">&lt;</span><span class="s5">'a</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l17"><span class="ln">17 </span></a> <span class="s0">pub </span><span class="s2">func</span><span class="s1">: </span><span class="s0">fn</span><span class="s1">(&amp;</span><span class="s2">Ui</span><span class="s3">, </span><span class="s2">Vec</span><span class="s1">&lt;&amp;</span><span class="s2">T</span><span class="s1">&gt;)</span><span class="s3">,</span>
<a name="l18"><span class="ln">18 </span></a><span class="s1">}</span>
<a name="l19"><span class="ln">19 </span></a>
<a name="l20"><span class="ln">20 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Copy</span><span class="s3">, </span><span class="s2">Debug</span><span class="s3">, </span><span class="s2">PartialEq</span><span class="s1">)]</span>
<a name="l21"><span class="ln">21 </span></a><span class="s0">pub struct </span><span class="s2">LoopState </span><span class="s1">{</span>
<a name="l22"><span class="ln">22 </span></a> <span class="s0">pub </span><span class="s2">delta_time</span><span class="s1">: </span><span class="s2">Duration</span><span class="s3">,</span>
<a name="l23"><span class="ln">23 </span></a> <span class="s0">pub </span><span class="s2">start_time</span><span class="s1">: </span><span class="s2">Instant</span><span class="s3">,</span>
<a name="l24"><span class="ln">24 </span></a> <span class="s0">pub </span><span class="s2">step_size</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l25"><span class="ln">25 </span></a><span class="s1">}</span>
<a name="l26"><span class="ln">26 </span></a>
<a name="l27"><span class="ln">27 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Copy</span><span class="s3">, </span><span class="s2">Debug</span><span class="s3">, </span><span class="s2">PartialEq</span><span class="s1">)]</span>
<a name="l28"><span class="ln">28 </span></a><span class="s0">pub struct </span><span class="s2">Position </span><span class="s1">{</span>
<a name="l29"><span class="ln">29 </span></a> <span class="s0">pub </span><span class="s2">x</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l30"><span class="ln">30 </span></a> <span class="s0">pub </span><span class="s2">y</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l31"><span class="ln">31 </span></a> <span class="s0">pub </span><span class="s2">z</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l32"><span class="ln">32 </span></a> <span class="s0">pub </span><span class="s2">rot</span><span class="s1">: </span><span class="s2">cgmath</span><span class="s1">::</span><span class="s2">Euler</span><span class="s1">&lt;</span><span class="s2">Deg</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;&gt;</span><span class="s3">,</span>
<a name="l33"><span class="ln">33 </span></a><span class="s1">}</span>
<a name="l34"><span class="ln">34 </span></a>
<a name="l35"><span class="ln">35 </span></a><span class="s0">impl </span><span class="s2">Default </span><span class="s0">for </span><span class="s2">Position </span><span class="s1">{</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s0">fn </span><span class="s2">default</span><span class="s1">() -&gt; </span><span class="s0">Self </span><span class="s1">{</span>
<a name="l37"><span class="ln">37 </span></a> <span class="s2">Position </span><span class="s1">{</span>
<a name="l38"><span class="ln">38 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s3">,</span>
<a name="l39"><span class="ln">39 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s3">,</span>
<a name="l40"><span class="ln">40 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s3">,</span>
<a name="l41"><span class="ln">41 </span></a> <span class="s2">rot</span><span class="s1">: </span><span class="s2">Euler </span><span class="s1">{</span>
<a name="l42"><span class="ln">42 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l43"><span class="ln">43 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l44"><span class="ln">44 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l45"><span class="ln">45 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l46"><span class="ln">46 </span></a> <span class="s1">}</span>
<a name="l47"><span class="ln">47 </span></a> <span class="s1">}</span>
<a name="l48"><span class="ln">48 </span></a><span class="s1">}</span>
<a name="l49"><span class="ln">49 </span></a>
<a name="l50"><span class="ln">50 </span></a><span class="s0">impl </span><span class="s2">From</span><span class="s1">&lt;</span><span class="s2">TomlPositionDescription</span><span class="s1">&gt; </span><span class="s0">for </span><span class="s2">Position </span><span class="s1">{</span>
<a name="l51"><span class="ln">51 </span></a> <span class="s0">fn </span><span class="s2">from</span><span class="s1">(</span><span class="s2">pos</span><span class="s1">: </span><span class="s2">TomlPositionDescription</span><span class="s1">) -&gt; </span><span class="s0">Self </span><span class="s1">{</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s0">let </span><span class="s2">euler </span><span class="s1">= </span><span class="s0">match </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">rot </span><span class="s1">{</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s2">None </span><span class="s1">=&gt; </span><span class="s2">Euler </span><span class="s1">{</span>
<a name="l54"><span class="ln">54 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l55"><span class="ln">55 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l56"><span class="ln">56 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l57"><span class="ln">57 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l58"><span class="ln">58 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">v</span><span class="s1">) =&gt; </span><span class="s2">Euler </span><span class="s1">{</span>
<a name="l59"><span class="ln">59 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s2">v</span><span class="s1">.</span><span class="s2">x</span><span class="s1">)</span><span class="s3">,</span>
<a name="l60"><span class="ln">60 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s2">v</span><span class="s1">.</span><span class="s2">y</span><span class="s1">)</span><span class="s3">,</span>
<a name="l61"><span class="ln">61 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s2">v</span><span class="s1">.</span><span class="s2">z</span><span class="s1">)</span><span class="s3">,</span>
<a name="l62"><span class="ln">62 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l63"><span class="ln">63 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l64"><span class="ln">64 </span></a> <span class="s2">Position </span><span class="s1">{</span>
<a name="l65"><span class="ln">65 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">x</span><span class="s3">,</span>
<a name="l66"><span class="ln">66 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">y</span><span class="s3">,</span>
<a name="l67"><span class="ln">67 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">z</span><span class="s3">,</span>
<a name="l68"><span class="ln">68 </span></a> <span class="s2">rot</span><span class="s1">: </span><span class="s2">euler</span><span class="s3">,</span>
<a name="l69"><span class="ln">69 </span></a> <span class="s1">}</span>
<a name="l70"><span class="ln">70 </span></a> <span class="s1">}</span>
<a name="l71"><span class="ln">71 </span></a><span class="s1">}</span>
<a name="l72"><span class="ln">72 </span></a>
<a name="l73"><span class="ln">73 </span></a><span class="s0">impl </span><span class="s2">From</span><span class="s1">&lt;</span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlPositionDescription</span><span class="s1">&gt;&gt; </span><span class="s0">for </span><span class="s2">Position </span><span class="s1">{</span>
<a name="l74"><span class="ln">74 </span></a> <span class="s0">fn </span><span class="s2">from</span><span class="s1">(</span><span class="s2">pos</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlPositionDescription</span><span class="s1">&gt;) -&gt; </span><span class="s0">Self </span><span class="s1">{</span>
<a name="l75"><span class="ln">75 </span></a> <span class="s0">match </span><span class="s2">pos </span><span class="s1">{</span>
<a name="l76"><span class="ln">76 </span></a> <span class="s2">None </span><span class="s1">=&gt; </span><span class="s2">Position </span><span class="s1">{</span>
<a name="l77"><span class="ln">77 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s3">,</span>
<a name="l78"><span class="ln">78 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s3">,</span>
<a name="l79"><span class="ln">79 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s3">,</span>
<a name="l80"><span class="ln">80 </span></a> <span class="s2">rot</span><span class="s1">: </span><span class="s2">Euler </span><span class="s1">{</span>
<a name="l81"><span class="ln">81 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l82"><span class="ln">82 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l83"><span class="ln">83 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s6">0</span><span class="s1">.</span><span class="s6">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l84"><span class="ln">84 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l85"><span class="ln">85 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l86"><span class="ln">86 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">v</span><span class="s1">) =&gt; </span><span class="s2">Position</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">v</span><span class="s1">)</span><span class="s3">,</span>
<a name="l87"><span class="ln">87 </span></a> <span class="s1">}</span>
<a name="l88"><span class="ln">88 </span></a> <span class="s1">}</span>
<a name="l89"><span class="ln">89 </span></a><span class="s1">}</span>
<a name="l90"><span class="ln">90 </span></a>
<a name="l91"><span class="ln">91 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Default</span><span class="s3">, </span><span class="s2">PartialEq</span><span class="s3">, </span><span class="s2">Eq</span><span class="s3">, </span><span class="s2">Hash</span><span class="s3">, </span><span class="s2">Copy</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l92"><span class="ln">92 </span></a><span class="s0">pub struct </span><span class="s2">RangeCopy</span><span class="s1">&lt;</span><span class="s2">Idx</span><span class="s1">&gt; {</span>
<a name="l93"><span class="ln">93 </span></a> <span class="s0">pub </span><span class="s2">start</span><span class="s1">: </span><span class="s2">Idx</span><span class="s3">,</span>
<a name="l94"><span class="ln">94 </span></a> <span class="s0">pub </span><span class="s2">end</span><span class="s1">: </span><span class="s2">Idx</span><span class="s3">,</span>
<a name="l95"><span class="ln">95 </span></a><span class="s1">}</span>
<a name="l96"><span class="ln">96 </span></a>
<a name="l97"><span class="ln">97 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l98"><span class="ln">98 </span></a><span class="s0">pub struct </span><span class="s2">Mesh </span><span class="s1">{</span>
<a name="l99"><span class="ln">99 </span></a> <span class="s0">pub </span><span class="s2">index_buffer</span><span class="s1">: </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">Buffer</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l100"><span class="ln">100 </span></a> <span class="s0">pub </span><span class="s2">index_count</span><span class="s1">: </span><span class="s2">usize</span><span class="s3">,</span>
<a name="l101"><span class="ln">101 </span></a> <span class="s0">pub </span><span class="s2">index_format</span><span class="s1">: </span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">IndexFormat</span><span class="s3">,</span>
<a name="l102"><span class="ln">102 </span></a> <span class="s0">pub </span><span class="s2">vertex_buffer</span><span class="s1">: </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">Buffer</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l103"><span class="ln">103 </span></a> <span class="s0">pub </span><span class="s2">uniform_buffer</span><span class="s1">: </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">Buffer</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l104"><span class="ln">104 </span></a> <span class="s0">pub </span><span class="s2">bind_group</span><span class="s1">: </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">BindGroup</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l105"><span class="ln">105 </span></a> <span class="s0">pub </span><span class="s2">color</span><span class="s1">: </span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">Color</span><span class="s3">,</span>
<a name="l106"><span class="ln">106 </span></a><span class="s1">}</span>
<a name="l107"><span class="ln">107 </span></a>
<a name="l108"><span class="ln">108 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l109"><span class="ln">109 </span></a><span class="s0">pub struct </span><span class="s2">Physics </span><span class="s1">{</span>
<a name="l110"><span class="ln">110 </span></a> <span class="s0">pub </span><span class="s2">rigid_body</span><span class="s1">: </span><span class="s2">RigidBody</span><span class="s3">,</span>
<a name="l111"><span class="ln">111 </span></a> <span class="s0">pub </span><span class="s2">rigid_body_handle</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">RigidBodyHandle</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l112"><span class="ln">112 </span></a><span class="s1">}</span>
<a name="l113"><span class="ln">113 </span></a>
<a name="l114"><span class="ln">114 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l115"><span class="ln">115 </span></a><span class="s0">pub struct </span><span class="s2">Collider </span><span class="s1">{</span>
<a name="l116"><span class="ln">116 </span></a> <span class="s0">pub </span><span class="s2">collider</span><span class="s1">: </span><span class="s2">r3dCollider</span><span class="s3">,</span>
<a name="l117"><span class="ln">117 </span></a> <span class="s0">pub </span><span class="s2">collider_handle</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">ColliderHandle</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l118"><span class="ln">118 </span></a><span class="s1">}</span>
<a name="l119"><span class="ln">119 </span></a></pre>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,164 +0,0 @@
<html>
<head>
<title>geometry.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #33ccff; font-weight: bold;}
.s5 { color: #499936; font-style: italic;}
.s6 { color: #54b33e;}
.s7 { color: #7ec3e6;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
geometry.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">bytemuck</span><span class="s1">::{</span><span class="s2">Pod</span><span class="s3">, </span><span class="s2">Zeroable</span><span class="s1">}</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">use </span><span class="s2">nalgebra</span><span class="s1">::</span><span class="s2">Vector4</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">parry</span><span class="s1">::</span><span class="s2">math</span><span class="s1">::</span><span class="s2">Point</span><span class="s3">;</span>
<a name="l4"><span class="ln">4 </span></a><span class="s0">use </span><span class="s2">tobj</span><span class="s1">::{</span><span class="s2">LoadError</span><span class="s3">, </span><span class="s2">Model</span><span class="s3">, </span><span class="s2">Material</span><span class="s1">}</span><span class="s3">;</span>
<a name="l5"><span class="ln">5 </span></a>
<a name="l6"><span class="ln">6 </span></a>
<a name="l7"><span class="ln">7 </span></a><span class="s1">#[</span><span class="s2">repr</span><span class="s1">(</span><span class="s2">C</span><span class="s1">)]</span>
<a name="l8"><span class="ln">8 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Copy</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l9"><span class="ln">9 </span></a><span class="s0">pub struct </span><span class="s2">Vertex </span><span class="s1">{</span>
<a name="l10"><span class="ln">10 </span></a> <span class="s2">pos</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">,</span>
<a name="l11"><span class="ln">11 </span></a> <span class="s2">normal</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">,</span>
<a name="l12"><span class="ln">12 </span></a> <span class="s2">uv</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">2</span><span class="s1">]</span><span class="s3">,</span>
<a name="l13"><span class="ln">13 </span></a><span class="s1">}</span>
<a name="l14"><span class="ln">14 </span></a>
<a name="l15"><span class="ln">15 </span></a><span class="s0">impl </span><span class="s2">Vertex </span><span class="s1">{</span>
<a name="l16"><span class="ln">16 </span></a> <span class="s0">pub fn </span><span class="s2">position</span><span class="s1">(&amp;</span><span class="s0">self</span><span class="s1">) -&gt; </span><span class="s2">Point</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt; {</span>
<a name="l17"><span class="ln">17 </span></a> <span class="s2">Point</span><span class="s1">::&lt;</span><span class="s2">f32</span><span class="s1">&gt;::</span><span class="s2">new</span><span class="s1">(</span><span class="s0">self</span><span class="s1">.</span><span class="s2">pos</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s0">self</span><span class="s1">.</span><span class="s2">pos</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]</span><span class="s3">, </span><span class="s0">self</span><span class="s1">.</span><span class="s2">pos</span><span class="s1">[</span><span class="s4">2</span><span class="s1">])</span>
<a name="l18"><span class="ln">18 </span></a> <span class="s1">}</span>
<a name="l19"><span class="ln">19 </span></a> <span class="s0">pub fn </span><span class="s2">from</span><span class="s1">(</span><span class="s2">pos</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">3</span><span class="s1">]</span><span class="s3">, </span><span class="s2">nor</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">3</span><span class="s1">]</span><span class="s3">, </span><span class="s2">uv</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">2</span><span class="s1">]) -&gt; </span><span class="s2">Vertex </span><span class="s1">{</span>
<a name="l20"><span class="ln">20 </span></a> <span class="s2">Vertex </span><span class="s1">{</span>
<a name="l21"><span class="ln">21 </span></a> <span class="s2">pos</span><span class="s1">: [</span><span class="s2">pos</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">[</span><span class="s4">2</span><span class="s1">]</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">,</span>
<a name="l22"><span class="ln">22 </span></a> <span class="s2">normal</span><span class="s1">: [</span><span class="s2">nor</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">nor</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]</span><span class="s3">, </span><span class="s2">nor</span><span class="s1">[</span><span class="s4">2</span><span class="s1">]</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">,</span>
<a name="l23"><span class="ln">23 </span></a> <span class="s2">uv</span><span class="s1">: [</span><span class="s2">uv</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">uv</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]]</span><span class="s3">,</span>
<a name="l24"><span class="ln">24 </span></a> <span class="s1">}</span>
<a name="l25"><span class="ln">25 </span></a> <span class="s1">}</span>
<a name="l26"><span class="ln">26 </span></a><span class="s1">}</span>
<a name="l27"><span class="ln">27 </span></a>
<a name="l28"><span class="ln">28 </span></a><span class="s0">unsafe impl </span><span class="s2">Pod </span><span class="s0">for </span><span class="s2">Vertex </span><span class="s1">{}</span>
<a name="l29"><span class="ln">29 </span></a><span class="s0">unsafe impl </span><span class="s2">Zeroable </span><span class="s0">for </span><span class="s2">Vertex </span><span class="s1">{}</span>
<a name="l30"><span class="ln">30 </span></a>
<a name="l31"><span class="ln">31 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l32"><span class="ln">32 </span></a><span class="s0">pub struct </span><span class="s2">RawMesh </span><span class="s1">{</span>
<a name="l33"><span class="ln">33 </span></a> <span class="s0">pub </span><span class="s2">vertices</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">Vertex</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l34"><span class="ln">34 </span></a> <span class="s0">pub </span><span class="s2">indices</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;[</span><span class="s2">u32</span><span class="s3">; </span><span class="s4">3</span><span class="s1">]&gt;</span><span class="s3">,</span>
<a name="l35"><span class="ln">35 </span></a><span class="s1">}</span>
<a name="l36"><span class="ln">36 </span></a>
<a name="l37"><span class="ln">37 </span></a>
<a name="l38"><span class="ln">38 </span></a><span class="s5">/// We use meshes in a few different places. To keep things simple, we return</span>
<a name="l39"><span class="ln">39 </span></a><span class="s5">/// the most basic, direct-to-memory version. If something fancy needs to be done</span>
<a name="l40"><span class="ln">40 </span></a><span class="s5">/// with it, the fancy stays there</span>
<a name="l41"><span class="ln">41 </span></a><span class="s0">pub fn </span><span class="s2">load_obj</span><span class="s1">(</span><span class="s2">obj_path</span><span class="s1">: &amp;</span><span class="s2">str</span><span class="s1">) -&gt; </span><span class="s2">Result</span><span class="s1">&lt;</span><span class="s2">RawMesh</span><span class="s3">, </span><span class="s2">String</span><span class="s1">&gt; {</span>
<a name="l42"><span class="ln">42 </span></a>
<a name="l43"><span class="ln">43 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">info</span><span class="s1">!(</span><span class="s6">&quot;Loading object {}&quot;</span><span class="s3">, </span><span class="s2">obj_path</span><span class="s1">)</span><span class="s3">;</span>
<a name="l44"><span class="ln">44 </span></a>
<a name="l45"><span class="ln">45 </span></a> <span class="s7">// Is there no better way to translate error messages?</span>
<a name="l46"><span class="ln">46 </span></a> <span class="s0">let </span><span class="s1">(</span><span class="s2">models</span><span class="s3">, </span><span class="s2">materials</span><span class="s1">) = </span><span class="s0">match </span><span class="s2">tobj</span><span class="s1">::</span><span class="s2">load_obj</span><span class="s1">(</span><span class="s2">obj_path</span><span class="s3">, </span><span class="s0">true</span><span class="s1">) {</span>
<a name="l47"><span class="ln">47 </span></a> <span class="s2">Ok</span><span class="s1">((</span><span class="s2">a</span><span class="s3">, </span><span class="s2">b</span><span class="s1">)) =&gt; {</span><span class="s2">Ok</span><span class="s1">((</span><span class="s2">a</span><span class="s3">, </span><span class="s2">b</span><span class="s1">))}</span>
<a name="l48"><span class="ln">48 </span></a> <span class="s2">Err</span><span class="s1">(</span><span class="s2">load_error</span><span class="s1">) =&gt; {</span><span class="s2">Err</span><span class="s1">(</span><span class="s2">load_error</span><span class="s1">.</span><span class="s2">to_string</span><span class="s1">())}</span>
<a name="l49"><span class="ln">49 </span></a> <span class="s1">}?</span><span class="s3">;</span>
<a name="l50"><span class="ln">50 </span></a>
<a name="l51"><span class="ln">51 </span></a> <span class="s7">// println!(&quot;# of models: {}&quot;, models.len());</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s7">// println!(&quot;# of materials: {}&quot;, materials.len());</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s7">// println!(&quot;{:?}&quot;, materials);</span>
<a name="l54"><span class="ln">54 </span></a>
<a name="l55"><span class="ln">55 </span></a> <span class="s0">let mut </span><span class="s2">index_data</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;[</span><span class="s2">u32</span><span class="s3">; </span><span class="s4">3</span><span class="s1">]&gt; = </span><span class="s2">Vec</span><span class="s1">::</span><span class="s2">new</span><span class="s1">()</span><span class="s3">;</span>
<a name="l56"><span class="ln">56 </span></a> <span class="s0">let mut </span><span class="s2">vertex_data </span><span class="s1">= </span><span class="s2">Vec</span><span class="s1">::</span><span class="s2">new</span><span class="s1">()</span><span class="s3">;</span>
<a name="l57"><span class="ln">57 </span></a>
<a name="l58"><span class="ln">58 </span></a> <span class="s0">for </span><span class="s2">model </span><span class="s0">in </span><span class="s2">models </span><span class="s1">{</span>
<a name="l59"><span class="ln">59 </span></a> <span class="s0">let </span><span class="s2">mesh </span><span class="s1">= &amp;</span><span class="s2">model</span><span class="s1">.</span><span class="s2">mesh</span><span class="s3">;</span>
<a name="l60"><span class="ln">60 </span></a>
<a name="l61"><span class="ln">61 </span></a> <span class="s7">// Cycle through the faces and chunk out the indices</span>
<a name="l62"><span class="ln">62 </span></a> <span class="s0">let mut </span><span class="s2">next_face </span><span class="s1">= </span><span class="s4">0</span><span class="s3">;</span>
<a name="l63"><span class="ln">63 </span></a> <span class="s0">for </span><span class="s2">f </span><span class="s0">in </span><span class="s4">0</span><span class="s1">..</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">num_face_indices</span><span class="s1">.</span><span class="s2">len</span><span class="s1">() {</span>
<a name="l64"><span class="ln">64 </span></a> <span class="s7">// calculate the next chunk</span>
<a name="l65"><span class="ln">65 </span></a> <span class="s0">let </span><span class="s2">end </span><span class="s1">= </span><span class="s2">next_face </span><span class="s1">+ </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">num_face_indices</span><span class="s1">[</span><span class="s2">f</span><span class="s1">] </span><span class="s0">as </span><span class="s2">usize</span><span class="s3">;</span>
<a name="l66"><span class="ln">66 </span></a> <span class="s0">let </span><span class="s2">face_indices</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">_</span><span class="s1">&gt; = </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">indices</span><span class="s1">[</span><span class="s2">next_face</span><span class="s1">..</span><span class="s2">end</span><span class="s1">].</span><span class="s2">iter</span><span class="s1">().</span><span class="s2">collect</span><span class="s1">()</span><span class="s3">;</span>
<a name="l67"><span class="ln">67 </span></a>
<a name="l68"><span class="ln">68 </span></a> <span class="s0">if </span><span class="s2">face_indices</span><span class="s1">.</span><span class="s2">len</span><span class="s1">() != </span><span class="s4">3 </span><span class="s1">{</span>
<a name="l69"><span class="ln">69 </span></a> <span class="s0">return </span><span class="s2">Err</span><span class="s1">(</span><span class="s6">&quot;we only handle triangulated faces&quot;</span><span class="s1">.</span><span class="s2">to_string</span><span class="s1">())</span><span class="s3">;</span>
<a name="l70"><span class="ln">70 </span></a> <span class="s1">}</span>
<a name="l71"><span class="ln">71 </span></a> <span class="s2">index_data</span><span class="s1">.</span><span class="s2">push</span><span class="s1">([*</span><span class="s2">face_indices</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s1">*</span><span class="s2">face_indices</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]</span><span class="s3">, </span><span class="s1">*</span><span class="s2">face_indices</span><span class="s1">[</span><span class="s4">2</span><span class="s1">]])</span><span class="s3">;</span>
<a name="l72"><span class="ln">72 </span></a> <span class="s2">next_face </span><span class="s1">= </span><span class="s2">end</span><span class="s3">;</span>
<a name="l73"><span class="ln">73 </span></a> <span class="s1">}</span>
<a name="l74"><span class="ln">74 </span></a>
<a name="l75"><span class="ln">75 </span></a> <span class="s0">if </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">.</span><span class="s2">len</span><span class="s1">() % </span><span class="s4">3 </span><span class="s1">!= </span><span class="s4">0 </span><span class="s1">{</span>
<a name="l76"><span class="ln">76 </span></a> <span class="s0">return </span><span class="s2">Err</span><span class="s1">(</span><span class="s2">format</span><span class="s1">!(</span><span class="s6">&quot;position array not % 3 : {}&quot;</span><span class="s3">, </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">.</span><span class="s2">len</span><span class="s1">()))</span>
<a name="l77"><span class="ln">77 </span></a> <span class="s1">}</span>
<a name="l78"><span class="ln">78 </span></a> <span class="s0">if </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">texcoords</span><span class="s1">.</span><span class="s2">len</span><span class="s1">() % </span><span class="s4">2 </span><span class="s1">!= </span><span class="s4">0 </span><span class="s1">{</span>
<a name="l79"><span class="ln">79 </span></a> <span class="s0">return </span><span class="s2">Err</span><span class="s1">(</span><span class="s2">format</span><span class="s1">!(</span><span class="s6">&quot;position array not % 3 : {}&quot;</span><span class="s3">, </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">.</span><span class="s2">len</span><span class="s1">()))</span>
<a name="l80"><span class="ln">80 </span></a> <span class="s1">}</span>
<a name="l81"><span class="ln">81 </span></a> <span class="s0">if </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">normals</span><span class="s1">.</span><span class="s2">is_empty</span><span class="s1">() {</span>
<a name="l82"><span class="ln">82 </span></a> <span class="s0">return </span><span class="s2">Err</span><span class="s1">(</span><span class="s2">format</span><span class="s1">!(</span><span class="s6">&quot;It would be best if this had normals&quot;</span><span class="s1">))</span>
<a name="l83"><span class="ln">83 </span></a> <span class="s1">}</span>
<a name="l84"><span class="ln">84 </span></a> <span class="s0">if </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">texcoords</span><span class="s1">.</span><span class="s2">is_empty</span><span class="s1">() {</span>
<a name="l85"><span class="ln">85 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">info</span><span class="s1">!(</span><span class="s6">&quot;</span><span class="s0">\t</span><span class="s6">Mesh texture coordinates empty&quot;</span><span class="s1">)</span>
<a name="l86"><span class="ln">86 </span></a> <span class="s1">}</span>
<a name="l87"><span class="ln">87 </span></a>
<a name="l88"><span class="ln">88 </span></a> <span class="s0">for </span><span class="s2">v </span><span class="s0">in </span><span class="s4">0</span><span class="s1">..</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">.</span><span class="s2">len</span><span class="s1">() / </span><span class="s4">3 </span><span class="s1">{</span>
<a name="l89"><span class="ln">89 </span></a> <span class="s0">let </span><span class="s2">texcoords </span><span class="s1">= </span><span class="s0">if </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">texcoords</span><span class="s1">.</span><span class="s2">len</span><span class="s1">() == </span><span class="s4">0 </span><span class="s1">{</span>
<a name="l90"><span class="ln">90 </span></a> <span class="s1">[</span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span>
<a name="l91"><span class="ln">91 </span></a> <span class="s1">} </span><span class="s0">else </span><span class="s1">{</span>
<a name="l92"><span class="ln">92 </span></a> <span class="s1">[</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">texcoords</span><span class="s1">[</span><span class="s4">2 </span><span class="s1">* </span><span class="s2">v</span><span class="s1">]</span><span class="s3">, </span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">texcoords</span><span class="s1">[</span><span class="s4">2 </span><span class="s1">* </span><span class="s2">v </span><span class="s1">+ </span><span class="s4">1</span><span class="s1">]]</span>
<a name="l93"><span class="ln">93 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l94"><span class="ln">94 </span></a>
<a name="l95"><span class="ln">95 </span></a> <span class="s2">vertex_data</span><span class="s1">.</span><span class="s2">push</span><span class="s1">(</span><span class="s2">Vertex</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span>
<a name="l96"><span class="ln">96 </span></a> <span class="s1">[</span>
<a name="l97"><span class="ln">97 </span></a> <span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">[</span><span class="s4">3 </span><span class="s1">* </span><span class="s2">v</span><span class="s1">]</span><span class="s3">,</span>
<a name="l98"><span class="ln">98 </span></a> <span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">[</span><span class="s4">3 </span><span class="s1">* </span><span class="s2">v </span><span class="s1">+ </span><span class="s4">1</span><span class="s1">]</span><span class="s3">,</span>
<a name="l99"><span class="ln">99 </span></a> <span class="s2">mesh</span><span class="s1">.</span><span class="s2">positions</span><span class="s1">[</span><span class="s4">3 </span><span class="s1">* </span><span class="s2">v </span><span class="s1">+ </span><span class="s4">2</span><span class="s1">]</span><span class="s3">,</span>
<a name="l100"><span class="ln">100 </span></a> <span class="s1">]</span><span class="s3">,</span>
<a name="l101"><span class="ln">101 </span></a> <span class="s1">[</span>
<a name="l102"><span class="ln">102 </span></a> <span class="s2">mesh</span><span class="s1">.</span><span class="s2">normals</span><span class="s1">[</span><span class="s4">3 </span><span class="s1">* </span><span class="s2">v</span><span class="s1">]</span><span class="s3">,</span>
<a name="l103"><span class="ln">103 </span></a> <span class="s2">mesh</span><span class="s1">.</span><span class="s2">normals</span><span class="s1">[</span><span class="s4">3 </span><span class="s1">* </span><span class="s2">v </span><span class="s1">+ </span><span class="s4">1</span><span class="s1">]</span><span class="s3">,</span>
<a name="l104"><span class="ln">104 </span></a> <span class="s2">mesh</span><span class="s1">.</span><span class="s2">normals</span><span class="s1">[</span><span class="s4">3 </span><span class="s1">* </span><span class="s2">v </span><span class="s1">+ </span><span class="s4">2</span><span class="s1">]</span><span class="s3">,</span>
<a name="l105"><span class="ln">105 </span></a> <span class="s1">]</span><span class="s3">,</span>
<a name="l106"><span class="ln">106 </span></a> <span class="s2">texcoords</span><span class="s3">,</span>
<a name="l107"><span class="ln">107 </span></a> <span class="s1">))</span><span class="s3">;</span>
<a name="l108"><span class="ln">108 </span></a> <span class="s1">}</span>
<a name="l109"><span class="ln">109 </span></a> <span class="s1">}</span>
<a name="l110"><span class="ln">110 </span></a> <span class="s2">Ok</span><span class="s1">(</span><span class="s2">RawMesh </span><span class="s1">{</span>
<a name="l111"><span class="ln">111 </span></a> <span class="s2">vertices</span><span class="s1">: </span><span class="s2">vertex_data</span><span class="s1">.</span><span class="s2">to_vec</span><span class="s1">()</span><span class="s3">,</span>
<a name="l112"><span class="ln">112 </span></a> <span class="s2">indices</span><span class="s1">: </span><span class="s2">index_data</span><span class="s1">.</span><span class="s2">to_vec</span><span class="s1">()</span><span class="s3">,</span>
<a name="l113"><span class="ln">113 </span></a> <span class="s1">})</span>
<a name="l114"><span class="ln">114 </span></a><span class="s1">}</span>
<a name="l115"><span class="ln">115 </span></a>
<a name="l116"><span class="ln">116 </span></a><span class="s7">// pub fn create_quad_mesh() -&gt; RawMesh {</span>
<a name="l117"><span class="ln">117 </span></a><span class="s7">//</span>
<a name="l118"><span class="ln">118 </span></a><span class="s7">// let mut index_data: Vec&lt;[u32; 3]&gt; = Vec::new();</span>
<a name="l119"><span class="ln">119 </span></a><span class="s7">// let mut vertex_data = Vec::new();</span>
<a name="l120"><span class="ln">120 </span></a><span class="s7">//</span>
<a name="l121"><span class="ln">121 </span></a><span class="s7">// vertex_data.push(Vertex::from(</span>
<a name="l122"><span class="ln">122 </span></a><span class="s7">// [</span>
<a name="l123"><span class="ln">123 </span></a><span class="s7">// mesh.positions[3 * v],</span>
<a name="l124"><span class="ln">124 </span></a><span class="s7">// mesh.positions[3 * v + 1],</span>
<a name="l125"><span class="ln">125 </span></a><span class="s7">// mesh.positions[3 * v + 2],</span>
<a name="l126"><span class="ln">126 </span></a><span class="s7">// ],</span>
<a name="l127"><span class="ln">127 </span></a><span class="s7">// [</span>
<a name="l128"><span class="ln">128 </span></a><span class="s7">// mesh.normals[3 * v],</span>
<a name="l129"><span class="ln">129 </span></a><span class="s7">// mesh.normals[3 * v + 1],</span>
<a name="l130"><span class="ln">130 </span></a><span class="s7">// mesh.normals[3 * v + 2],</span>
<a name="l131"><span class="ln">131 </span></a><span class="s7">// ],</span>
<a name="l132"><span class="ln">132 </span></a><span class="s7">// [mesh.texcoords[2 * v], mesh.texcoords[2 * v + 1]],</span>
<a name="l133"><span class="ln">133 </span></a><span class="s7">// ));</span>
<a name="l134"><span class="ln">134 </span></a><span class="s7">//</span>
<a name="l135"><span class="ln">135 </span></a><span class="s7">// RawMesh {</span>
<a name="l136"><span class="ln">136 </span></a><span class="s7">// vertices: vertex_data.to_vec(),</span>
<a name="l137"><span class="ln">137 </span></a><span class="s7">// indices: index_data.to_vec(),</span>
<a name="l138"><span class="ln">138 </span></a><span class="s7">// }</span>
<a name="l139"><span class="ln">139 </span></a><span class="s7">// }</span>
<a name="l140"><span class="ln">140 </span></a></pre>
</body>
</html>

View File

@@ -1,32 +0,0 @@
<html>
<head>
<title>imgui_support.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
imgui_support.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">imgui_supp</span><span class="s1">::</span><span class="s2">extended_winit_imgui_support</span><span class="s1">::</span><span class="s2">WinitPlatform</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a>
<a name="l3"><span class="ln">3 </span></a>
<a name="l4"><span class="ln">4 </span></a><span class="s0">pub struct </span><span class="s2">ImguiContext </span><span class="s1">{</span>
<a name="l5"><span class="ln">5 </span></a> <span class="s0">pub </span><span class="s2">context</span><span class="s1">: </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Context</span><span class="s3">,</span>
<a name="l6"><span class="ln">6 </span></a><span class="s1">}</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">unsafe impl </span><span class="s2">Send </span><span class="s0">for </span><span class="s2">ImguiContext </span><span class="s1">{}</span>
<a name="l8"><span class="ln">8 </span></a>
<a name="l9"><span class="ln">9 </span></a><span class="s0">pub struct </span><span class="s2">ImguiPlatform </span><span class="s1">{</span>
<a name="l10"><span class="ln">10 </span></a> <span class="s0">pub </span><span class="s2">platform</span><span class="s1">: </span><span class="s2">WinitPlatform</span><span class="s3">,</span>
<a name="l11"><span class="ln">11 </span></a><span class="s1">}</span>
<a name="l12"><span class="ln">12 </span></a><span class="s0">unsafe impl </span><span class="s2">Send </span><span class="s0">for </span><span class="s2">ImguiPlatform </span><span class="s1">{}</span></pre>
</body>
</html>

View File

@@ -1 +0,0 @@
<html><head><title>~/source/3d-min-viable-eng/src/imgui_supp</title></head><body><a href="mod.rs.html">mod.rs</a><br /><a href="imgui_support.rs.html">imgui_support.rs</a><br /><a href="extended_winit_imgui_support.rs.html">extended_winit_imgui_support.rs</a><br /></body></html>

View File

@@ -1,79 +0,0 @@
<html>
<head>
<title>light.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #33ccff; font-weight: bold;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
light.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">bytemuck</span><span class="s1">::</span><span class="s2">__core</span><span class="s1">::</span><span class="s2">ops</span><span class="s1">::</span><span class="s2">Range</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">use </span><span class="s2">bytemuck</span><span class="s1">::{</span><span class="s2">Zeroable</span><span class="s3">, </span><span class="s2">Pod</span><span class="s1">}</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a><span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::</span><span class="s2">Point3</span><span class="s3">;</span>
<a name="l4"><span class="ln">4 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">sync</span><span class="s1">::</span><span class="s2">Arc</span><span class="s3">;</span>
<a name="l5"><span class="ln">5 </span></a><span class="s0">use </span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">TextureView</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">components</span><span class="s1">::{</span><span class="s2">RangeCopy</span><span class="s3">, </span><span class="s2">Position</span><span class="s1">}</span><span class="s3">;</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">render</span><span class="s1">::</span><span class="s2">OPENGL_TO_WGPU_MATRIX</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a>
<a name="l9"><span class="ln">9 </span></a>
<a name="l10"><span class="ln">10 </span></a><span class="s1">#[</span><span class="s2">repr</span><span class="s1">(</span><span class="s2">C</span><span class="s1">)]</span>
<a name="l11"><span class="ln">11 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Copy</span><span class="s1">)]</span>
<a name="l12"><span class="ln">12 </span></a><span class="s0">pub struct </span><span class="s2">LightRaw </span><span class="s1">{</span>
<a name="l13"><span class="ln">13 </span></a> <span class="s2">proj</span><span class="s1">: [[</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">,</span>
<a name="l14"><span class="ln">14 </span></a> <span class="s2">pos</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">,</span>
<a name="l15"><span class="ln">15 </span></a> <span class="s2">color</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">,</span>
<a name="l16"><span class="ln">16 </span></a><span class="s1">}</span>
<a name="l17"><span class="ln">17 </span></a>
<a name="l18"><span class="ln">18 </span></a><span class="s0">unsafe impl </span><span class="s2">Pod </span><span class="s0">for </span><span class="s2">LightRaw </span><span class="s1">{}</span>
<a name="l19"><span class="ln">19 </span></a>
<a name="l20"><span class="ln">20 </span></a><span class="s0">unsafe impl </span><span class="s2">Zeroable </span><span class="s0">for </span><span class="s2">LightRaw </span><span class="s1">{}</span>
<a name="l21"><span class="ln">21 </span></a>
<a name="l22"><span class="ln">22 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l23"><span class="ln">23 </span></a><span class="s0">pub struct </span><span class="s2">DirectionalLight </span><span class="s1">{</span>
<a name="l24"><span class="ln">24 </span></a> <span class="s0">pub </span><span class="s2">color</span><span class="s1">: </span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">Color</span><span class="s3">,</span>
<a name="l25"><span class="ln">25 </span></a> <span class="s0">pub </span><span class="s2">fov</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l26"><span class="ln">26 </span></a> <span class="s0">pub </span><span class="s2">depth</span><span class="s1">: </span><span class="s2">RangeCopy</span><span class="s1">&lt;</span><span class="s2">f32</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l27"><span class="ln">27 </span></a> <span class="s0">pub </span><span class="s2">target_view</span><span class="s1">: </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">TextureView</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l28"><span class="ln">28 </span></a><span class="s1">}</span>
<a name="l29"><span class="ln">29 </span></a>
<a name="l30"><span class="ln">30 </span></a><span class="s0">impl </span><span class="s2">DirectionalLight </span><span class="s1">{</span>
<a name="l31"><span class="ln">31 </span></a> <span class="s0">pub fn </span><span class="s2">to_raw</span><span class="s1">(&amp;</span><span class="s0">self</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">: &amp;</span><span class="s2">Position</span><span class="s1">) -&gt; </span><span class="s2">LightRaw </span><span class="s1">{</span>
<a name="l32"><span class="ln">32 </span></a> <span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::{</span><span class="s2">Deg</span><span class="s3">, </span><span class="s2">EuclideanSpace</span><span class="s3">, </span><span class="s2">Matrix4</span><span class="s3">, </span><span class="s2">PerspectiveFov</span><span class="s3">, </span><span class="s2">Point3</span><span class="s3">, </span><span class="s2">Vector3</span><span class="s1">}</span><span class="s3">;</span>
<a name="l33"><span class="ln">33 </span></a>
<a name="l34"><span class="ln">34 </span></a> <span class="s0">let </span><span class="s2">point3d </span><span class="s1">= </span><span class="s2">Point3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">pos</span><span class="s1">.</span><span class="s2">x</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">y</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">z</span><span class="s1">)</span><span class="s3">;</span>
<a name="l35"><span class="ln">35 </span></a> <span class="s0">let </span><span class="s2">point3d_2 </span><span class="s1">= </span><span class="s2">Point3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">pos</span><span class="s1">.</span><span class="s2">x</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">y </span><span class="s1">- </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">z</span><span class="s1">)</span><span class="s3">;</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s0">let </span><span class="s2">mx_view </span><span class="s1">= </span><span class="s2">Matrix4</span><span class="s1">::</span><span class="s2">look_at</span><span class="s1">(</span><span class="s2">point3d</span><span class="s3">, </span><span class="s2">point3d_2</span><span class="s3">, </span><span class="s2">Vector3</span><span class="s1">::</span><span class="s2">unit_z</span><span class="s1">())</span><span class="s3">;</span>
<a name="l37"><span class="ln">37 </span></a>
<a name="l38"><span class="ln">38 </span></a> <span class="s0">let </span><span class="s2">projection </span><span class="s1">= </span><span class="s2">PerspectiveFov </span><span class="s1">{</span>
<a name="l39"><span class="ln">39 </span></a> <span class="s2">fovy</span><span class="s1">: </span><span class="s2">Deg</span><span class="s1">(</span><span class="s0">self</span><span class="s1">.</span><span class="s2">fov</span><span class="s1">).</span><span class="s2">into</span><span class="s1">()</span><span class="s3">,</span>
<a name="l40"><span class="ln">40 </span></a> <span class="s2">aspect</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l41"><span class="ln">41 </span></a> <span class="s2">near</span><span class="s1">: </span><span class="s0">self</span><span class="s1">.</span><span class="s2">depth</span><span class="s1">.</span><span class="s2">start</span><span class="s3">,</span>
<a name="l42"><span class="ln">42 </span></a> <span class="s2">far</span><span class="s1">: </span><span class="s0">self</span><span class="s1">.</span><span class="s2">depth</span><span class="s1">.</span><span class="s2">end</span><span class="s3">,</span>
<a name="l43"><span class="ln">43 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l44"><span class="ln">44 </span></a> <span class="s0">let </span><span class="s2">mx_correction </span><span class="s1">= </span><span class="s2">OPENGL_TO_WGPU_MATRIX</span><span class="s3">;</span>
<a name="l45"><span class="ln">45 </span></a> <span class="s0">let </span><span class="s2">mx_view_proj </span><span class="s1">=</span>
<a name="l46"><span class="ln">46 </span></a> <span class="s2">mx_correction </span><span class="s1">* </span><span class="s2">cgmath</span><span class="s1">::</span><span class="s2">Matrix4</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">projection</span><span class="s1">.</span><span class="s2">to_perspective</span><span class="s1">()) * </span><span class="s2">mx_view</span><span class="s3">;</span>
<a name="l47"><span class="ln">47 </span></a> <span class="s2">LightRaw </span><span class="s1">{</span>
<a name="l48"><span class="ln">48 </span></a> <span class="s2">proj</span><span class="s1">: *</span><span class="s2">mx_view_proj</span><span class="s1">.</span><span class="s2">as_ref</span><span class="s1">()</span><span class="s3">,</span>
<a name="l49"><span class="ln">49 </span></a> <span class="s2">pos</span><span class="s1">: [</span><span class="s2">pos</span><span class="s1">.</span><span class="s2">x</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">y</span><span class="s3">, </span><span class="s2">pos</span><span class="s1">.</span><span class="s2">z</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">,</span>
<a name="l50"><span class="ln">50 </span></a> <span class="s2">color</span><span class="s1">: [</span>
<a name="l51"><span class="ln">51 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">color</span><span class="s1">.</span><span class="s2">r </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">color</span><span class="s1">.</span><span class="s2">g </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">color</span><span class="s1">.</span><span class="s2">b </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l54"><span class="ln">54 </span></a> <span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l55"><span class="ln">55 </span></a> <span class="s1">]</span><span class="s3">,</span>
<a name="l56"><span class="ln">56 </span></a> <span class="s1">}</span>
<a name="l57"><span class="ln">57 </span></a> <span class="s1">}</span>
<a name="l58"><span class="ln">58 </span></a><span class="s1">}</span></pre>
</body>
</html>

View File

@@ -1,409 +0,0 @@
<html>
<head>
<title>main.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #54b33e;}
.s5 { color: #7ec3e6;}
.s6 { color: #20999d; font-style: italic;}
.s7 { color: #33ccff; font-weight: bold;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
main.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">extern crate </span><span class="s2">env_logger</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">extern crate </span><span class="s2">imgui</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a><span class="s0">extern crate </span><span class="s2">imgui_wgpu</span><span class="s3">;</span>
<a name="l4"><span class="ln">4 </span></a><span class="s1">#[</span><span class="s2">macro_use</span><span class="s1">]</span>
<a name="l5"><span class="ln">5 </span></a><span class="s0">extern crate </span><span class="s2">lazy_static</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a><span class="s1">#[</span><span class="s2">macro_use</span><span class="s1">]</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">extern crate </span><span class="s2">serde_derive</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a><span class="s0">extern crate </span><span class="s2">tobj</span><span class="s3">;</span>
<a name="l9"><span class="ln">9 </span></a><span class="s0">extern crate </span><span class="s2">toml</span><span class="s3">;</span>
<a name="l10"><span class="ln">10 </span></a><span class="s0">extern crate </span><span class="s2">winit_24</span><span class="s3">;</span>
<a name="l11"><span class="ln">11 </span></a>
<a name="l12"><span class="ln">12 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">collections</span><span class="s1">::</span><span class="s2">HashMap</span><span class="s3">;</span>
<a name="l13"><span class="ln">13 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">f32</span><span class="s1">::</span><span class="s2">consts</span><span class="s1">::</span><span class="s2">PI</span><span class="s3">;</span>
<a name="l14"><span class="ln">14 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">fs</span><span class="s3">;</span>
<a name="l15"><span class="ln">15 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">sync</span><span class="s1">::{</span><span class="s2">Arc</span><span class="s3">, </span><span class="s2">Mutex</span><span class="s1">}</span><span class="s3">;</span>
<a name="l16"><span class="ln">16 </span></a><span class="s1">#[</span><span class="s2">cfg</span><span class="s1">(</span><span class="s2">not</span><span class="s1">(</span><span class="s2">target_arch </span><span class="s1">= </span><span class="s4">&quot;wasm32&quot;</span><span class="s1">))]</span>
<a name="l17"><span class="ln">17 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">time</span><span class="s1">::{</span><span class="s2">Duration</span><span class="s3">, </span><span class="s2">Instant</span><span class="s1">}</span><span class="s3">;</span>
<a name="l18"><span class="ln">18 </span></a>
<a name="l19"><span class="ln">19 </span></a><span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::{</span>
<a name="l20"><span class="ln">20 </span></a> <span class="s2">Decomposed</span><span class="s3">, </span><span class="s2">Deg</span><span class="s3">, </span><span class="s2">Euler</span><span class="s3">, </span><span class="s2">InnerSpace</span><span class="s3">, </span><span class="s2">Point3</span><span class="s3">, </span><span class="s2">Quaternion</span><span class="s3">, </span><span class="s2">Rad</span><span class="s3">, </span><span class="s2">Rotation3</span><span class="s3">, </span><span class="s2">SquareMatrix</span><span class="s3">,</span>
<a name="l21"><span class="ln">21 </span></a><span class="s1">}</span><span class="s3">;</span>
<a name="l22"><span class="ln">22 </span></a><span class="s0">use </span><span class="s2">futures</span><span class="s1">::</span><span class="s2">executor</span><span class="s1">::</span><span class="s2">block_on</span><span class="s3">;</span>
<a name="l23"><span class="ln">23 </span></a><span class="s0">use </span><span class="s2">futures</span><span class="s1">::</span><span class="s2">task</span><span class="s1">::</span><span class="s2">LocalSpawn</span><span class="s3">;</span>
<a name="l24"><span class="ln">24 </span></a><span class="s0">use </span><span class="s2">futures</span><span class="s1">::</span><span class="s2">FutureExt</span><span class="s3">;</span>
<a name="l25"><span class="ln">25 </span></a><span class="s0">use </span><span class="s2">gilrs</span><span class="s1">::</span><span class="s2">Event </span><span class="s0">as </span><span class="s2">GilEvent</span><span class="s3">;</span>
<a name="l26"><span class="ln">26 </span></a><span class="s0">use </span><span class="s2">gilrs</span><span class="s1">::{</span><span class="s2">Gamepad</span><span class="s3">, </span><span class="s2">Gilrs</span><span class="s1">}</span><span class="s3">;</span>
<a name="l27"><span class="ln">27 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">FontSource</span><span class="s3">;</span>
<a name="l28"><span class="ln">28 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">__core</span><span class="s1">::</span><span class="s2">convert</span><span class="s1">::</span><span class="s2">TryInto</span><span class="s3">;</span>
<a name="l29"><span class="ln">29 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l30"><span class="ln">30 </span></a><span class="s0">use </span><span class="s2">imgui_wgpu</span><span class="s1">::{</span><span class="s2">Renderer </span><span class="s0">as </span><span class="s2">ImguiRenderer</span><span class="s3">, </span><span class="s2">RendererConfig </span><span class="s0">as </span><span class="s2">ImguiRendererConfig</span><span class="s1">}</span><span class="s3">;</span>
<a name="l31"><span class="ln">31 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">systems</span><span class="s1">::{</span><span class="s2">SyncResources</span><span class="s3">, </span><span class="s2">UnsafeResources</span><span class="s1">}</span><span class="s3">;</span>
<a name="l32"><span class="ln">32 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l33"><span class="ln">33 </span></a><span class="s0">use </span><span class="s2">log</span><span class="s1">::</span><span class="s2">LevelFilter</span><span class="s3">;</span>
<a name="l34"><span class="ln">34 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">counters</span><span class="s1">::</span><span class="s2">Timer</span><span class="s3">;</span>
<a name="l35"><span class="ln">35 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">dynamics</span><span class="s1">::{</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s2">IntegrationParameters</span><span class="s3">, </span><span class="s2">JointSet</span><span class="s3">, </span><span class="s2">RigidBody</span><span class="s3">, </span><span class="s2">RigidBodyBuilder</span><span class="s3">, </span><span class="s2">RigidBodyHandle</span><span class="s3">, </span><span class="s2">RigidBodySet</span><span class="s3">,</span>
<a name="l37"><span class="ln">37 </span></a><span class="s1">}</span><span class="s3">;</span>
<a name="l38"><span class="ln">38 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::{</span><span class="s2">BroadPhase</span><span class="s3">, </span><span class="s2">ColliderBuilder</span><span class="s3">, </span><span class="s2">ColliderHandle</span><span class="s3">, </span><span class="s2">ColliderSet</span><span class="s3">, </span><span class="s2">NarrowPhase</span><span class="s1">}</span><span class="s3">;</span>
<a name="l39"><span class="ln">39 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">math</span><span class="s3">;</span>
<a name="l40"><span class="ln">40 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">math</span><span class="s1">::</span><span class="s2">Point</span><span class="s3">;</span>
<a name="l41"><span class="ln">41 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">na</span><span class="s1">::{</span><span class="s2">Isometry</span><span class="s3">, </span><span class="s2">Isometry3</span><span class="s3">, </span><span class="s2">Vector</span><span class="s3">, </span><span class="s2">Vector3</span><span class="s1">}</span><span class="s3">;</span>
<a name="l42"><span class="ln">42 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">pipeline</span><span class="s1">::</span><span class="s2">PhysicsPipeline</span><span class="s3">;</span>
<a name="l43"><span class="ln">43 </span></a><span class="s0">use </span><span class="s2">wgpu</span><span class="s1">::{</span><span class="s2">BindGroup</span><span class="s3">, </span><span class="s2">Buffer</span><span class="s3">, </span><span class="s2">TextureView</span><span class="s1">}</span><span class="s3">;</span>
<a name="l44"><span class="ln">44 </span></a><span class="s0">use </span><span class="s2">wgpu_subscriber</span><span class="s3">;</span>
<a name="l45"><span class="ln">45 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">DeviceEvent</span><span class="s1">::</span><span class="s2">MouseMotion</span><span class="s3">;</span>
<a name="l46"><span class="ln">46 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::{</span><span class="s2">ElementState</span><span class="s3">, </span><span class="s2">VirtualKeyCode</span><span class="s1">}</span><span class="s3">;</span>
<a name="l47"><span class="ln">47 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event_loop</span><span class="s1">::</span><span class="s2">EventLoopProxy</span><span class="s3">;</span>
<a name="l48"><span class="ln">48 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">platform</span><span class="s1">::</span><span class="s2">unix</span><span class="s1">::</span><span class="s2">x11</span><span class="s1">::</span><span class="s2">ffi</span><span class="s1">::</span><span class="s2">Time</span><span class="s3">;</span>
<a name="l49"><span class="ln">49 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">window</span><span class="s1">::</span><span class="s2">Window</span><span class="s3">;</span>
<a name="l50"><span class="ln">50 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::{</span>
<a name="l51"><span class="ln">51 </span></a> <span class="s2">event</span><span class="s1">::{</span><span class="s0">self</span><span class="s3">, </span><span class="s2">WindowEvent</span><span class="s1">}</span><span class="s3">,</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s2">event_loop</span><span class="s1">::{</span><span class="s2">ControlFlow</span><span class="s3">, </span><span class="s2">EventLoop</span><span class="s1">}</span><span class="s3">,</span>
<a name="l53"><span class="ln">53 </span></a><span class="s1">}</span><span class="s3">;</span>
<a name="l54"><span class="ln">54 </span></a>
<a name="l55"><span class="ln">55 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">camera</span><span class="s1">::{</span><span class="s2">Camera</span><span class="s3">, </span><span class="s2">CameraController</span><span class="s1">}</span><span class="s3">;</span>
<a name="l56"><span class="ln">56 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">components</span><span class="s1">::{</span><span class="s2">Collider</span><span class="s3">, </span><span class="s2">ImguiWindow</span><span class="s3">, </span><span class="s2">LoopState</span><span class="s3">, </span><span class="s2">Physics</span><span class="s3">, </span><span class="s2">Position</span><span class="s1">}</span><span class="s3">;</span>
<a name="l57"><span class="ln">57 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::{</span><span class="s2">load_obj</span><span class="s3">, </span><span class="s2">RawMesh</span><span class="s1">}</span><span class="s3">;</span>
<a name="l58"><span class="ln">58 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">imgui_supp</span><span class="s1">::</span><span class="s2">extended_winit_imgui_support</span><span class="s3">;</span>
<a name="l59"><span class="ln">59 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">imgui_supp</span><span class="s1">::</span><span class="s2">imgui_support</span><span class="s1">::{</span><span class="s2">ImguiContext</span><span class="s3">, </span><span class="s2">ImguiPlatform</span><span class="s1">}</span><span class="s3">;</span>
<a name="l60"><span class="ln">60 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">owned_event</span><span class="s1">::{</span><span class="s2">OwnedEvent</span><span class="s3">, </span><span class="s2">OwnedEventExtension</span><span class="s1">}</span><span class="s3">;</span>
<a name="l61"><span class="ln">61 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">physics</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">PhysicsState</span><span class="s3">;</span>
<a name="l62"><span class="ln">62 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">render</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">ImguiPerformanceProfilerLine</span><span class="s3">;</span>
<a name="l63"><span class="ln">63 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">runtime</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">RuntimeState</span><span class="s3">;</span>
<a name="l64"><span class="ln">64 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">dpi</span><span class="s1">::</span><span class="s2">PhysicalSize</span><span class="s3">;</span>
<a name="l65"><span class="ln">65 </span></a>
<a name="l66"><span class="ln">66 </span></a><span class="s0">mod </span><span class="s2">camera</span><span class="s3">;</span>
<a name="l67"><span class="ln">67 </span></a><span class="s0">mod </span><span class="s2">components</span><span class="s3">;</span>
<a name="l68"><span class="ln">68 </span></a><span class="s0">mod </span><span class="s2">geometry</span><span class="s3">;</span>
<a name="l69"><span class="ln">69 </span></a><span class="s0">mod </span><span class="s2">imgui_supp</span><span class="s3">;</span>
<a name="l70"><span class="ln">70 </span></a><span class="s0">mod </span><span class="s2">light</span><span class="s3">;</span>
<a name="l71"><span class="ln">71 </span></a><span class="s0">mod </span><span class="s2">owned_event</span><span class="s3">;</span>
<a name="l72"><span class="ln">72 </span></a><span class="s0">mod </span><span class="s2">physics</span><span class="s3">;</span>
<a name="l73"><span class="ln">73 </span></a><span class="s0">mod </span><span class="s2">render</span><span class="s3">;</span>
<a name="l74"><span class="ln">74 </span></a><span class="s0">mod </span><span class="s2">runtime</span><span class="s3">;</span>
<a name="l75"><span class="ln">75 </span></a>
<a name="l76"><span class="ln">76 </span></a><span class="s5">/*
<a name="l77"><span class="ln">77 </span></a>
<a name="l78"><span class="ln">78 </span></a>Collision detection
<a name="l79"><span class="ln">79 </span></a>https://nphysics.org/rigid_body_simulations_with_contacts/
<a name="l80"><span class="ln">80 </span></a>
<a name="l81"><span class="ln">81 </span></a>Obj file format
<a name="l82"><span class="ln">82 </span></a>http://paulbourke.net/dataformats/obj/
<a name="l83"><span class="ln">83 </span></a>
<a name="l84"><span class="ln">84 </span></a>tobj obj loader
<a name="l85"><span class="ln">85 </span></a>https://docs.rs/tobj/2.0.3/tobj/index.html
<a name="l86"><span class="ln">86 </span></a>
<a name="l87"><span class="ln">87 </span></a>mesh generator lib, might be useful
<a name="l88"><span class="ln">88 </span></a>https://docs.rs/genmesh/0.6.2/genmesh/
<a name="l89"><span class="ln">89 </span></a>
<a name="l90"><span class="ln">90 </span></a>legion ECS
<a name="l91"><span class="ln">91 </span></a>https://github.com/amethyst/legion
<a name="l92"><span class="ln">92 </span></a>
<a name="l93"><span class="ln">93 </span></a>
<a name="l94"><span class="ln">94 </span></a>ECS
<a name="l95"><span class="ln">95 </span></a> animation
<a name="l96"><span class="ln">96 </span></a> config / save loading (sorta!)
<a name="l97"><span class="ln">97 </span></a> render 3d (good!)
<a name="l98"><span class="ln">98 </span></a> input/io (yep!)
<a name="l99"><span class="ln">99 </span></a> collision / physics (yep!)
<a name="l100"><span class="ln">100 </span></a> entities &amp; behaviours (got the entities!)
<a name="l101"><span class="ln">101 </span></a> scripting!
<a name="l102"><span class="ln">102 </span></a>
<a name="l103"><span class="ln">103 </span></a>
<a name="l104"><span class="ln">104 </span></a>Todo:
<a name="l105"><span class="ln">105 </span></a> Load scene imgui interface w/ toml files
<a name="l106"><span class="ln">106 </span></a> FPS graph port from voxel raycaster
<a name="l107"><span class="ln">107 </span></a> better imgui interface with components &amp; systems
<a name="l108"><span class="ln">108 </span></a> Figure out eventing, GameInput, passing all events, etc.
<a name="l109"><span class="ln">109 </span></a> + texturing
<a name="l110"><span class="ln">110 </span></a>
<a name="l111"><span class="ln">111 </span></a>I need to figure out the way that I want to do 2d graphics in a 3d engine...
<a name="l112"><span class="ln">112 </span></a>I suppose I will need sprites. And those are just 2 polygons which are textured
<a name="l113"><span class="ln">113 </span></a>
<a name="l114"><span class="ln">114 </span></a>
<a name="l115"><span class="ln">115 </span></a>
<a name="l116"><span class="ln">116 </span></a> */</span>
<a name="l117"><span class="ln">117 </span></a>
<a name="l118"><span class="ln">118 </span></a><span class="s5">//log::info!(&quot;&quot;);</span>
<a name="l119"><span class="ln">119 </span></a>
<a name="l120"><span class="ln">120 </span></a><span class="s5">// ImGUI works on more or less an unsafe global state. which is MegaLame</span>
<a name="l121"><span class="ln">121 </span></a><span class="s0">static mut </span><span class="s2">CURRENT_UI</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Ui</span><span class="s1">&lt;</span><span class="s6">'static</span><span class="s1">&gt;&gt; = </span><span class="s2">None</span><span class="s3">;</span>
<a name="l122"><span class="ln">122 </span></a><span class="s0">pub unsafe fn </span><span class="s2">current_ui</span><span class="s1">&lt;</span><span class="s6">'a</span><span class="s1">&gt;() -&gt; </span><span class="s2">Option</span><span class="s1">&lt;&amp;</span><span class="s6">'a </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Ui</span><span class="s1">&lt;</span><span class="s6">'a</span><span class="s1">&gt;&gt; {</span>
<a name="l123"><span class="ln">123 </span></a> <span class="s2">CURRENT_UI</span><span class="s1">.</span><span class="s2">as_ref</span><span class="s1">()</span>
<a name="l124"><span class="ln">124 </span></a><span class="s1">}</span>
<a name="l125"><span class="ln">125 </span></a>
<a name="l126"><span class="ln">126 </span></a>
<a name="l127"><span class="ln">127 </span></a>
<a name="l128"><span class="ln">128 </span></a><span class="s0">fn </span><span class="s2">main</span><span class="s1">() {</span>
<a name="l129"><span class="ln">129 </span></a> <span class="s0">let </span><span class="s2">logger </span><span class="s1">= </span><span class="s2">env_logger</span><span class="s1">::</span><span class="s2">builder</span><span class="s1">()</span>
<a name="l130"><span class="ln">130 </span></a> <span class="s1">.</span><span class="s2">filter</span><span class="s1">(</span><span class="s2">Some</span><span class="s1">(</span><span class="s4">&quot;minimal_viable_game_engine&quot;</span><span class="s1">)</span><span class="s3">, </span><span class="s2">LevelFilter</span><span class="s1">::</span><span class="s2">Info</span><span class="s1">)</span>
<a name="l131"><span class="ln">131 </span></a> <span class="s1">.</span><span class="s2">init</span><span class="s1">()</span><span class="s3">;</span>
<a name="l132"><span class="ln">132 </span></a>
<a name="l133"><span class="ln">133 </span></a> <span class="s0">let mut </span><span class="s2">world </span><span class="s1">= </span><span class="s2">World</span><span class="s1">::</span><span class="s2">default</span><span class="s1">()</span><span class="s3">;</span>
<a name="l134"><span class="ln">134 </span></a>
<a name="l135"><span class="ln">135 </span></a> <span class="s0">let mut </span><span class="s2">imgui_prepare_schedule </span><span class="s1">= </span><span class="s2">Schedule</span><span class="s1">::</span><span class="s2">builder</span><span class="s1">()</span>
<a name="l136"><span class="ln">136 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">render</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">imgui_prepare_system</span><span class="s1">())</span>
<a name="l137"><span class="ln">137 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l138"><span class="ln">138 </span></a>
<a name="l139"><span class="ln">139 </span></a> <span class="s0">let mut </span><span class="s2">load_schedule </span><span class="s1">= </span><span class="s2">Schedule</span><span class="s1">::</span><span class="s2">builder</span><span class="s1">()</span>
<a name="l140"><span class="ln">140 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">runtime</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">runtime_load_system</span><span class="s1">())</span>
<a name="l141"><span class="ln">141 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">runtime</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">runtime_spawn_system</span><span class="s1">())</span>
<a name="l142"><span class="ln">142 </span></a> <span class="s1">.</span><span class="s2">flush</span><span class="s1">()</span>
<a name="l143"><span class="ln">143 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l144"><span class="ln">144 </span></a>
<a name="l145"><span class="ln">145 </span></a> <span class="s0">let mut </span><span class="s2">render_schedule </span><span class="s1">= </span><span class="s2">Schedule</span><span class="s1">::</span><span class="s2">builder</span><span class="s1">()</span>
<a name="l146"><span class="ln">146 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">render</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">render_imgui_system</span><span class="s1">())</span>
<a name="l147"><span class="ln">147 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">render</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">render_test_system</span><span class="s1">())</span>
<a name="l148"><span class="ln">148 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">render</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">render_performance_flag_system</span><span class="s1">())</span>
<a name="l149"><span class="ln">149 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l150"><span class="ln">150 </span></a>
<a name="l151"><span class="ln">151 </span></a> <span class="s0">let mut </span><span class="s2">update_schedule </span><span class="s1">= </span><span class="s2">Schedule</span><span class="s1">::</span><span class="s2">builder</span><span class="s1">()</span>
<a name="l152"><span class="ln">152 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">physics</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">update_camera_system</span><span class="s1">())</span>
<a name="l153"><span class="ln">153 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">physics</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">run_physics_system</span><span class="s1">())</span>
<a name="l154"><span class="ln">154 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">physics</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::</span><span class="s2">update_models_system</span><span class="s1">())</span>
<a name="l155"><span class="ln">155 </span></a> <span class="s5">// next system here, gamelogic update system?</span>
<a name="l156"><span class="ln">156 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l157"><span class="ln">157 </span></a>
<a name="l158"><span class="ln">158 </span></a> <span class="s0">let mut </span><span class="s2">event_schedule </span><span class="s1">= </span><span class="s2">Schedule</span><span class="s1">::</span><span class="s2">builder</span><span class="s1">()</span>
<a name="l159"><span class="ln">159 </span></a> <span class="s1">.</span><span class="s2">add_system</span><span class="s1">(</span><span class="s2">owned_event</span><span class="s1">::</span><span class="s2">event_dispatch_system</span><span class="s1">())</span>
<a name="l160"><span class="ln">160 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l161"><span class="ln">161 </span></a>
<a name="l162"><span class="ln">162 </span></a> <span class="s0">let </span><span class="s2">event_loop </span><span class="s1">= </span><span class="s2">EventLoop</span><span class="s1">::&lt;</span><span class="s2">OwnedEventExtension</span><span class="s1">&gt;::</span><span class="s2">with_user_event</span><span class="s1">()</span><span class="s3">;</span>
<a name="l163"><span class="ln">163 </span></a> <span class="s0">let mut </span><span class="s2">builder </span><span class="s1">= </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">window</span><span class="s1">::</span><span class="s2">WindowBuilder</span><span class="s1">::</span><span class="s2">new</span><span class="s1">()</span><span class="s3">;</span>
<a name="l164"><span class="ln">164 </span></a> <span class="s2">builder </span><span class="s1">= </span><span class="s2">builder</span><span class="s1">.</span><span class="s2">with_title</span><span class="s1">(</span><span class="s4">&quot;MVGE&quot;</span><span class="s1">)</span><span class="s3">;</span>
<a name="l165"><span class="ln">165 </span></a> <span class="s2">builder </span><span class="s1">= </span><span class="s2">builder</span><span class="s1">.</span><span class="s2">with_inner_size</span><span class="s1">(</span><span class="s2">PhysicalSize</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s7">1200</span><span class="s3">,</span><span class="s7">900</span><span class="s1">))</span><span class="s3">;</span>
<a name="l166"><span class="ln">166 </span></a>
<a name="l167"><span class="ln">167 </span></a> <span class="s0">let </span><span class="s2">window </span><span class="s1">= </span><span class="s2">builder</span><span class="s1">.</span><span class="s2">build</span><span class="s1">(&amp;</span><span class="s2">event_loop</span><span class="s1">).</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l168"><span class="ln">168 </span></a>
<a name="l169"><span class="ln">169 </span></a> <span class="s0">let mut </span><span class="s2">resources </span><span class="s1">= </span><span class="s2">Resources</span><span class="s1">::</span><span class="s2">default</span><span class="s1">()</span><span class="s3">;</span>
<a name="l170"><span class="ln">170 </span></a>
<a name="l171"><span class="ln">171 </span></a>
<a name="l172"><span class="ln">172 </span></a>
<a name="l173"><span class="ln">173 </span></a> <span class="s5">// Load up all the resources</span>
<a name="l174"><span class="ln">174 </span></a> <span class="s1">{</span>
<a name="l175"><span class="ln">175 </span></a> <span class="s0">let mut </span><span class="s2">imgui_context </span><span class="s1">= </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Context</span><span class="s1">::</span><span class="s2">create</span><span class="s1">()</span><span class="s3">;</span>
<a name="l176"><span class="ln">176 </span></a> <span class="s0">let mut </span><span class="s2">platform </span><span class="s1">= </span><span class="s2">extended_winit_imgui_support</span><span class="s1">::</span><span class="s2">WinitPlatform</span><span class="s1">::</span><span class="s2">init</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">imgui_context</span><span class="s1">)</span><span class="s3">;</span>
<a name="l177"><span class="ln">177 </span></a> <span class="s2">platform</span><span class="s1">.</span><span class="s2">attach_window</span><span class="s1">(</span>
<a name="l178"><span class="ln">178 </span></a> <span class="s2">imgui_context</span><span class="s1">.</span><span class="s2">io_mut</span><span class="s1">()</span><span class="s3">,</span>
<a name="l179"><span class="ln">179 </span></a> <span class="s1">&amp;</span><span class="s2">window</span><span class="s3">,</span>
<a name="l180"><span class="ln">180 </span></a> <span class="s2">extended_winit_imgui_support</span><span class="s1">::</span><span class="s2">HiDpiMode</span><span class="s1">::</span><span class="s2">Default</span><span class="s3">,</span>
<a name="l181"><span class="ln">181 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l182"><span class="ln">182 </span></a>
<a name="l183"><span class="ln">183 </span></a> <span class="s5">// imgui_supp rendering context</span>
<a name="l184"><span class="ln">184 </span></a> <span class="s0">let mut </span><span class="s2">imgui_context </span><span class="s1">= </span><span class="s2">ImguiContext </span><span class="s1">{</span>
<a name="l185"><span class="ln">185 </span></a> <span class="s2">context</span><span class="s1">: </span><span class="s2">imgui_context</span><span class="s3">,</span>
<a name="l186"><span class="ln">186 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l187"><span class="ln">187 </span></a> <span class="s0">let mut </span><span class="s2">imgui_platform </span><span class="s1">= </span><span class="s2">ImguiPlatform </span><span class="s1">{ </span><span class="s2">platform</span><span class="s1">: </span><span class="s2">platform </span><span class="s1">}</span><span class="s3">;</span>
<a name="l188"><span class="ln">188 </span></a> <span class="s0">let </span><span class="s2">font_size </span><span class="s1">= </span><span class="s7">20</span><span class="s1">.</span><span class="s7">0 </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">;</span>
<a name="l189"><span class="ln">189 </span></a> <span class="s2">imgui_context</span><span class="s1">.</span><span class="s2">context</span><span class="s1">.</span><span class="s2">io_mut</span><span class="s1">().</span><span class="s2">font_global_scale </span><span class="s1">= </span><span class="s7">1</span><span class="s1">.</span><span class="s7">0 </span><span class="s0">as </span><span class="s2">f32</span><span class="s3">;</span>
<a name="l190"><span class="ln">190 </span></a> <span class="s2">imgui_context</span>
<a name="l191"><span class="ln">191 </span></a> <span class="s1">.</span><span class="s2">context</span>
<a name="l192"><span class="ln">192 </span></a> <span class="s1">.</span><span class="s2">fonts</span><span class="s1">()</span>
<a name="l193"><span class="ln">193 </span></a> <span class="s1">.</span><span class="s2">add_font</span><span class="s1">(&amp;[</span><span class="s2">FontSource</span><span class="s1">::</span><span class="s2">DefaultFontData </span><span class="s1">{</span>
<a name="l194"><span class="ln">194 </span></a> <span class="s2">config</span><span class="s1">: </span><span class="s2">Some</span><span class="s1">(</span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">FontConfig </span><span class="s1">{</span>
<a name="l195"><span class="ln">195 </span></a> <span class="s2">oversample_h</span><span class="s1">: </span><span class="s7">1</span><span class="s3">,</span>
<a name="l196"><span class="ln">196 </span></a> <span class="s2">pixel_snap_h</span><span class="s1">: </span><span class="s0">true</span><span class="s3">,</span>
<a name="l197"><span class="ln">197 </span></a> <span class="s2">size_pixels</span><span class="s1">: </span><span class="s2">font_size</span><span class="s3">,</span>
<a name="l198"><span class="ln">198 </span></a> <span class="s1">..</span><span class="s2">Default</span><span class="s1">::</span><span class="s2">default</span><span class="s1">()</span>
<a name="l199"><span class="ln">199 </span></a> <span class="s1">})</span><span class="s3">,</span>
<a name="l200"><span class="ln">200 </span></a> <span class="s1">}])</span><span class="s3">;</span>
<a name="l201"><span class="ln">201 </span></a> <span class="s2">imgui_context</span><span class="s1">.</span><span class="s2">context</span><span class="s1">.</span><span class="s2">set_ini_filename</span><span class="s1">(</span><span class="s2">None</span><span class="s1">)</span><span class="s3">;</span>
<a name="l202"><span class="ln">202 </span></a>
<a name="l203"><span class="ln">203 </span></a> <span class="s5">// The renderer</span>
<a name="l204"><span class="ln">204 </span></a> <span class="s0">let mut </span><span class="s2">renderer </span><span class="s1">= </span><span class="s2">render</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">RenderState</span><span class="s1">::</span><span class="s2">init</span><span class="s1">(&amp;</span><span class="s2">window</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s0">mut </span><span class="s2">imgui_context</span><span class="s1">)</span><span class="s3">;</span>
<a name="l205"><span class="ln">205 </span></a>
<a name="l206"><span class="ln">206 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">renderer</span><span class="s1">)</span><span class="s3">;</span>
<a name="l207"><span class="ln">207 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">Arc</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">Mutex</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">imgui_context</span><span class="s1">)))</span><span class="s3">;</span>
<a name="l208"><span class="ln">208 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">Arc</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">Mutex</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">imgui_platform</span><span class="s1">)))</span><span class="s3">;</span>
<a name="l209"><span class="ln">209 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">window</span><span class="s1">)</span><span class="s3">;</span>
<a name="l210"><span class="ln">210 </span></a>
<a name="l211"><span class="ln">211 </span></a> <span class="s5">// Physics</span>
<a name="l212"><span class="ln">212 </span></a> <span class="s0">let </span><span class="s1">(</span><span class="s2">physics_state</span><span class="s3">, </span><span class="s2">physics_pipeline</span><span class="s1">) =</span>
<a name="l213"><span class="ln">213 </span></a> <span class="s2">PhysicsState</span><span class="s1">::</span><span class="s2">build</span><span class="s1">(</span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">math</span><span class="s1">::</span><span class="s2">Vector</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s7">0</span><span class="s1">.</span><span class="s7">0</span><span class="s3">, </span><span class="s1">-</span><span class="s7">9</span><span class="s1">.</span><span class="s7">81</span><span class="s3">, </span><span class="s7">0</span><span class="s1">.</span><span class="s7">0</span><span class="s1">))</span><span class="s3">;</span>
<a name="l214"><span class="ln">214 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">physics_state</span><span class="s1">)</span><span class="s3">;</span>
<a name="l215"><span class="ln">215 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">physics_pipeline</span><span class="s1">)</span><span class="s3">;</span>
<a name="l216"><span class="ln">216 </span></a>
<a name="l217"><span class="ln">217 </span></a> <span class="s5">// Loop data</span>
<a name="l218"><span class="ln">218 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">LoopState </span><span class="s1">{</span>
<a name="l219"><span class="ln">219 </span></a> <span class="s2">delta_time</span><span class="s1">: </span><span class="s2">Default</span><span class="s1">::</span><span class="s2">default</span><span class="s1">()</span><span class="s3">,</span>
<a name="l220"><span class="ln">220 </span></a> <span class="s2">start_time</span><span class="s1">: </span><span class="s2">Instant</span><span class="s1">::</span><span class="s2">now</span><span class="s1">()</span><span class="s3">,</span>
<a name="l221"><span class="ln">221 </span></a> <span class="s2">step_size</span><span class="s1">: </span><span class="s7">0</span><span class="s1">.</span><span class="s7">01666</span><span class="s3">, </span><span class="s5">// 60hz</span>
<a name="l222"><span class="ln">222 </span></a> <span class="s1">})</span><span class="s3">;</span>
<a name="l223"><span class="ln">223 </span></a>
<a name="l224"><span class="ln">224 </span></a> <span class="s5">// And our event stack</span>
<a name="l225"><span class="ln">225 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">Vec</span><span class="s1">::&lt;</span><span class="s2">OwnedEvent</span><span class="s1">&lt;</span><span class="s2">OwnedEventExtension</span><span class="s1">&gt;&gt;::</span><span class="s2">new</span><span class="s1">())</span><span class="s3">;</span>
<a name="l226"><span class="ln">226 </span></a>
<a name="l227"><span class="ln">227 </span></a> <span class="s5">// Our init and runtime data</span>
<a name="l228"><span class="ln">228 </span></a> <span class="s2">resources</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">RuntimeState</span><span class="s1">::</span><span class="s2">new</span><span class="s1">())</span>
<a name="l229"><span class="ln">229 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l230"><span class="ln">230 </span></a>
<a name="l231"><span class="ln">231 </span></a> <span class="s2">setup_gamepad</span><span class="s1">(&amp;</span><span class="s2">event_loop</span><span class="s1">)</span><span class="s3">;</span>
<a name="l232"><span class="ln">232 </span></a>
<a name="l233"><span class="ln">233 </span></a> <span class="s0">let mut </span><span class="s2">elapsed_time</span><span class="s1">: </span><span class="s2">f32 </span><span class="s1">= {</span>
<a name="l234"><span class="ln">234 </span></a> <span class="s5">// deltatime since last frame</span>
<a name="l235"><span class="ln">235 </span></a> <span class="s0">let </span><span class="s2">loop_state </span><span class="s1">= </span><span class="s2">resources</span><span class="s1">.</span><span class="s2">get</span><span class="s1">::&lt;</span><span class="s2">LoopState</span><span class="s1">&gt;().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l236"><span class="ln">236 </span></a> <span class="s2">loop_state</span><span class="s1">.</span><span class="s2">start_time</span><span class="s1">.</span><span class="s2">elapsed</span><span class="s1">()</span>
<a name="l237"><span class="ln">237 </span></a> <span class="s1">}</span>
<a name="l238"><span class="ln">238 </span></a> <span class="s1">.</span><span class="s2">as_secs_f32</span><span class="s1">()</span><span class="s3">;</span>
<a name="l239"><span class="ln">239 </span></a>
<a name="l240"><span class="ln">240 </span></a> <span class="s0">let mut </span><span class="s2">delta_time</span><span class="s1">: </span><span class="s2">f32 </span><span class="s1">= </span><span class="s7">0</span><span class="s1">.</span><span class="s7">0</span><span class="s3">;</span>
<a name="l241"><span class="ln">241 </span></a> <span class="s0">let mut </span><span class="s2">accumulator_time</span><span class="s1">: </span><span class="s2">f32 </span><span class="s1">= </span><span class="s7">0</span><span class="s1">.</span><span class="s7">0</span><span class="s3">;</span>
<a name="l242"><span class="ln">242 </span></a> <span class="s0">let mut </span><span class="s2">current_time</span><span class="s1">: </span><span class="s2">f32 </span><span class="s1">= </span><span class="s2">elapsed_time</span><span class="s3">;</span>
<a name="l243"><span class="ln">243 </span></a>
<a name="l244"><span class="ln">244 </span></a> <span class="s2">event_loop</span><span class="s1">.</span><span class="s2">run</span><span class="s1">(</span><span class="s0">move </span><span class="s1">|</span><span class="s2">event</span><span class="s3">, </span><span class="s2">_</span><span class="s3">, </span><span class="s2">control_flow</span><span class="s1">| {</span>
<a name="l245"><span class="ln">245 </span></a> <span class="s1">*</span><span class="s2">control_flow </span><span class="s1">= </span><span class="s2">ControlFlow</span><span class="s1">::</span><span class="s2">Poll</span><span class="s3">;</span>
<a name="l246"><span class="ln">246 </span></a> <span class="s0">match </span><span class="s2">event </span><span class="s1">{</span>
<a name="l247"><span class="ln">247 </span></a> <span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">NewEvents</span><span class="s1">(</span><span class="s2">cause</span><span class="s1">) =&gt; {</span>
<a name="l248"><span class="ln">248 </span></a> <span class="s0">if </span><span class="s2">cause </span><span class="s1">== </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">StartCause</span><span class="s1">::</span><span class="s2">Init </span><span class="s1">{</span>
<a name="l249"><span class="ln">249 </span></a> <span class="s2">load_schedule</span><span class="s1">.</span><span class="s2">execute</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">world</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s0">mut </span><span class="s2">resources</span><span class="s1">)</span><span class="s3">;</span>
<a name="l250"><span class="ln">250 </span></a> <span class="s1">}</span>
<a name="l251"><span class="ln">251 </span></a> <span class="s1">}</span>
<a name="l252"><span class="ln">252 </span></a>
<a name="l253"><span class="ln">253 </span></a> <span class="s5">// This is the big boy section of the event loop</span>
<a name="l254"><span class="ln">254 </span></a> <span class="s5">// We : dispatch events and clear the queue, query the loops</span>
<a name="l255"><span class="ln">255 </span></a> <span class="s5">// time data and prep the dt data. Loop the dt locked</span>
<a name="l256"><span class="ln">256 </span></a> <span class="s5">// conditionally, and run the fps locked renderer</span>
<a name="l257"><span class="ln">257 </span></a> <span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">MainEventsCleared </span><span class="s1">=&gt; {</span>
<a name="l258"><span class="ln">258 </span></a> <span class="s2">event_schedule</span><span class="s1">.</span><span class="s2">execute</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">world</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s0">mut </span><span class="s2">resources</span><span class="s1">)</span><span class="s3">;</span>
<a name="l259"><span class="ln">259 </span></a> <span class="s2">resources</span>
<a name="l260"><span class="ln">260 </span></a> <span class="s1">.</span><span class="s2">get_mut</span><span class="s1">::&lt;</span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">OwnedEvent</span><span class="s1">&lt;</span><span class="s2">OwnedEventExtension</span><span class="s1">&gt;&gt;&gt;()</span>
<a name="l261"><span class="ln">261 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span>
<a name="l262"><span class="ln">262 </span></a> <span class="s1">.</span><span class="s2">clear</span><span class="s1">()</span><span class="s3">;</span>
<a name="l263"><span class="ln">263 </span></a>
<a name="l264"><span class="ln">264 </span></a> <span class="s2">imgui_prepare_schedule</span><span class="s1">.</span><span class="s2">execute</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">world</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s0">mut </span><span class="s2">resources</span><span class="s1">)</span><span class="s3">;</span>
<a name="l265"><span class="ln">265 </span></a>
<a name="l266"><span class="ln">266 </span></a> <span class="s0">let </span><span class="s1">(</span><span class="s2">step_size</span><span class="s3">, </span><span class="s2">elapsed_time</span><span class="s1">) = {</span>
<a name="l267"><span class="ln">267 </span></a> <span class="s0">let mut </span><span class="s2">loop_state </span><span class="s1">= </span><span class="s2">resources</span><span class="s1">.</span><span class="s2">get_mut</span><span class="s1">::&lt;</span><span class="s2">LoopState</span><span class="s1">&gt;().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l268"><span class="ln">268 </span></a> <span class="s1">(</span>
<a name="l269"><span class="ln">269 </span></a> <span class="s2">loop_state</span><span class="s1">.</span><span class="s2">step_size</span><span class="s3">,</span>
<a name="l270"><span class="ln">270 </span></a> <span class="s2">loop_state</span><span class="s1">.</span><span class="s2">start_time</span><span class="s1">.</span><span class="s2">elapsed</span><span class="s1">().</span><span class="s2">as_secs_f32</span><span class="s1">()</span><span class="s3">,</span>
<a name="l271"><span class="ln">271 </span></a> <span class="s1">)</span>
<a name="l272"><span class="ln">272 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l273"><span class="ln">273 </span></a> <span class="s2">delta_time </span><span class="s1">= </span><span class="s2">elapsed_time </span><span class="s1">- </span><span class="s2">current_time</span><span class="s3">;</span>
<a name="l274"><span class="ln">274 </span></a>
<a name="l275"><span class="ln">275 </span></a> <span class="s1">{</span>
<a name="l276"><span class="ln">276 </span></a> <span class="s0">let mut </span><span class="s2">loop_state </span><span class="s1">= </span><span class="s2">resources</span><span class="s1">.</span><span class="s2">get_mut</span><span class="s1">::&lt;</span><span class="s2">LoopState</span><span class="s1">&gt;().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l277"><span class="ln">277 </span></a> <span class="s2">loop_state</span><span class="s1">.</span><span class="s2">delta_time </span><span class="s1">= </span><span class="s2">Duration</span><span class="s1">::</span><span class="s2">from_secs_f32</span><span class="s1">(</span><span class="s2">delta_time</span><span class="s1">)</span><span class="s3">;</span>
<a name="l278"><span class="ln">278 </span></a> <span class="s1">}</span>
<a name="l279"><span class="ln">279 </span></a> <span class="s2">current_time </span><span class="s1">= </span><span class="s2">elapsed_time</span><span class="s3">;</span>
<a name="l280"><span class="ln">280 </span></a> <span class="s0">if </span><span class="s2">delta_time </span><span class="s1">&gt; </span><span class="s7">0</span><span class="s1">.</span><span class="s7">02 </span><span class="s1">{</span>
<a name="l281"><span class="ln">281 </span></a> <span class="s2">delta_time </span><span class="s1">= </span><span class="s7">0</span><span class="s1">.</span><span class="s7">02</span><span class="s3">;</span>
<a name="l282"><span class="ln">282 </span></a> <span class="s1">}</span>
<a name="l283"><span class="ln">283 </span></a> <span class="s2">accumulator_time </span><span class="s1">+= </span><span class="s2">delta_time</span><span class="s3">;</span>
<a name="l284"><span class="ln">284 </span></a>
<a name="l285"><span class="ln">285 </span></a> <span class="s0">while </span><span class="s2">accumulator_time </span><span class="s1">- </span><span class="s2">step_size </span><span class="s1">&gt;= </span><span class="s2">step_size </span><span class="s1">{</span>
<a name="l286"><span class="ln">286 </span></a> <span class="s2">accumulator_time </span><span class="s1">-= </span><span class="s2">step_size</span><span class="s3">;</span>
<a name="l287"><span class="ln">287 </span></a>
<a name="l288"><span class="ln">288 </span></a> <span class="s5">// ==== DELTA TIME LOCKED ====</span>
<a name="l289"><span class="ln">289 </span></a> <span class="s2">update_schedule</span><span class="s1">.</span><span class="s2">execute</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">world</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s0">mut </span><span class="s2">resources</span><span class="s1">)</span><span class="s3">;</span>
<a name="l290"><span class="ln">290 </span></a> <span class="s1">}</span>
<a name="l291"><span class="ln">291 </span></a> <span class="s5">// ==== FPS LOCKED ====</span>
<a name="l292"><span class="ln">292 </span></a> <span class="s2">render_schedule</span><span class="s1">.</span><span class="s2">execute</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">world</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s0">mut </span><span class="s2">resources</span><span class="s1">)</span><span class="s3">;</span>
<a name="l293"><span class="ln">293 </span></a> <span class="s1">}</span>
<a name="l294"><span class="ln">294 </span></a> <span class="s5">// Resizing will queue a request_redraw</span>
<a name="l295"><span class="ln">295 </span></a> <span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">WindowEvent </span><span class="s1">{</span>
<a name="l296"><span class="ln">296 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">Resized</span><span class="s1">(</span><span class="s2">size</span><span class="s1">)</span><span class="s3">,</span>
<a name="l297"><span class="ln">297 </span></a> <span class="s1">..</span>
<a name="l298"><span class="ln">298 </span></a> <span class="s1">} =&gt; {</span>
<a name="l299"><span class="ln">299 </span></a> <span class="s0">let </span><span class="s2">width </span><span class="s1">= </span><span class="s2">size</span><span class="s1">.</span><span class="s2">width</span><span class="s3">;</span>
<a name="l300"><span class="ln">300 </span></a> <span class="s0">let </span><span class="s2">height </span><span class="s1">= </span><span class="s2">size</span><span class="s1">.</span><span class="s2">height</span><span class="s3">;</span>
<a name="l301"><span class="ln">301 </span></a>
<a name="l302"><span class="ln">302 </span></a> <span class="s2">resources</span>
<a name="l303"><span class="ln">303 </span></a> <span class="s1">.</span><span class="s2">get_mut</span><span class="s1">::&lt;</span><span class="s2">render</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">RenderState</span><span class="s1">&gt;()</span>
<a name="l304"><span class="ln">304 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span>
<a name="l305"><span class="ln">305 </span></a> <span class="s1">.</span><span class="s2">resize</span><span class="s1">(</span><span class="s2">width</span><span class="s3">, </span><span class="s2">height</span><span class="s1">)</span><span class="s3">;</span>
<a name="l306"><span class="ln">306 </span></a> <span class="s1">}</span>
<a name="l307"><span class="ln">307 </span></a> <span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">DeviceEvent </span><span class="s1">{</span>
<a name="l308"><span class="ln">308 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">DeviceEvent</span><span class="s1">::</span><span class="s2">Key</span><span class="s1">(</span><span class="s2">keyboard_input</span><span class="s1">)</span><span class="s3">,</span>
<a name="l309"><span class="ln">309 </span></a> <span class="s1">..</span>
<a name="l310"><span class="ln">310 </span></a> <span class="s1">} =&gt; {</span>
<a name="l311"><span class="ln">311 </span></a> <span class="s0">if </span><span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">virtual_keycode</span><span class="s1">.</span><span class="s2">is_some</span><span class="s1">() {</span>
<a name="l312"><span class="ln">312 </span></a> <span class="s0">match </span><span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">virtual_keycode</span><span class="s1">.</span><span class="s2">unwrap</span><span class="s1">() {</span>
<a name="l313"><span class="ln">313 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Escape </span><span class="s1">=&gt; {</span>
<a name="l314"><span class="ln">314 </span></a> <span class="s0">if </span><span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">state </span><span class="s1">== </span><span class="s2">ElementState</span><span class="s1">::</span><span class="s2">Pressed </span><span class="s1">{</span>
<a name="l315"><span class="ln">315 </span></a> <span class="s1">*</span><span class="s2">control_flow </span><span class="s1">= </span><span class="s2">ControlFlow</span><span class="s1">::</span><span class="s2">Exit</span><span class="s3">;</span>
<a name="l316"><span class="ln">316 </span></a> <span class="s1">} </span><span class="s0">else </span><span class="s1">{</span>
<a name="l317"><span class="ln">317 </span></a> <span class="s5">//d</span>
<a name="l318"><span class="ln">318 </span></a> <span class="s1">}</span>
<a name="l319"><span class="ln">319 </span></a> <span class="s1">}</span>
<a name="l320"><span class="ln">320 </span></a> <span class="s2">_ </span><span class="s1">=&gt; ()</span><span class="s3">,</span>
<a name="l321"><span class="ln">321 </span></a> <span class="s1">}</span>
<a name="l322"><span class="ln">322 </span></a> <span class="s1">}</span>
<a name="l323"><span class="ln">323 </span></a> <span class="s1">}</span>
<a name="l324"><span class="ln">324 </span></a> <span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">WindowEvent </span><span class="s1">{</span>
<a name="l325"><span class="ln">325 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">CloseRequested</span><span class="s3">,</span>
<a name="l326"><span class="ln">326 </span></a> <span class="s1">..</span>
<a name="l327"><span class="ln">327 </span></a> <span class="s1">} =&gt; *</span><span class="s2">control_flow </span><span class="s1">= </span><span class="s2">ControlFlow</span><span class="s1">::</span><span class="s2">Exit</span><span class="s3">,</span>
<a name="l328"><span class="ln">328 </span></a> <span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">RedrawRequested</span><span class="s1">(</span><span class="s2">_</span><span class="s1">) =&gt; {</span>
<a name="l329"><span class="ln">329 </span></a> <span class="s5">// Call the render system</span>
<a name="l330"><span class="ln">330 </span></a> <span class="s5">// imgui_prepare_schedule.execute(&amp;mut world, &amp;mut resources);</span>
<a name="l331"><span class="ln">331 </span></a> <span class="s5">// render_schedule.execute(&amp;mut world, &amp;mut resources);</span>
<a name="l332"><span class="ln">332 </span></a> <span class="s1">}</span>
<a name="l333"><span class="ln">333 </span></a> <span class="s2">_ </span><span class="s1">=&gt; {}</span>
<a name="l334"><span class="ln">334 </span></a> <span class="s1">}</span>
<a name="l335"><span class="ln">335 </span></a>
<a name="l336"><span class="ln">336 </span></a> <span class="s2">resources</span>
<a name="l337"><span class="ln">337 </span></a> <span class="s1">.</span><span class="s2">get_mut</span><span class="s1">::&lt;</span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">OwnedEvent</span><span class="s1">&lt;</span><span class="s2">OwnedEventExtension</span><span class="s1">&gt;&gt;&gt;()</span>
<a name="l338"><span class="ln">338 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span>
<a name="l339"><span class="ln">339 </span></a> <span class="s1">.</span><span class="s2">push</span><span class="s1">(</span><span class="s2">event</span><span class="s1">.</span><span class="s2">into</span><span class="s1">())</span><span class="s3">;</span>
<a name="l340"><span class="ln">340 </span></a> <span class="s1">})</span><span class="s3">;</span>
<a name="l341"><span class="ln">341 </span></a><span class="s1">}</span>
<a name="l342"><span class="ln">342 </span></a>
<a name="l343"><span class="ln">343 </span></a><span class="s0">pub fn </span><span class="s2">setup_gamepad</span><span class="s1">(</span><span class="s2">event_loop</span><span class="s1">: &amp;</span><span class="s2">EventLoop</span><span class="s1">&lt;</span><span class="s2">OwnedEventExtension</span><span class="s1">&gt;) {</span>
<a name="l344"><span class="ln">344 </span></a> <span class="s0">let </span><span class="s2">event_loop_proxy </span><span class="s1">= </span><span class="s2">event_loop</span><span class="s1">.</span><span class="s2">create_proxy</span><span class="s1">()</span><span class="s3">;</span>
<a name="l345"><span class="ln">345 </span></a>
<a name="l346"><span class="ln">346 </span></a> <span class="s2">std</span><span class="s1">::</span><span class="s2">thread</span><span class="s1">::</span><span class="s2">spawn</span><span class="s1">(</span><span class="s0">move </span><span class="s1">|| {</span>
<a name="l347"><span class="ln">347 </span></a> <span class="s0">let mut </span><span class="s2">gilrs </span><span class="s1">= </span><span class="s2">Gilrs</span><span class="s1">::</span><span class="s2">new</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l348"><span class="ln">348 </span></a> <span class="s5">// Iterate over all connected gamepads</span>
<a name="l349"><span class="ln">349 </span></a> <span class="s0">let mut </span><span class="s2">gamepad</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">Gamepad</span><span class="s1">&gt; = </span><span class="s2">None</span><span class="s3">;</span>
<a name="l350"><span class="ln">350 </span></a> <span class="s0">for </span><span class="s1">(</span><span class="s2">_id</span><span class="s3">, </span><span class="s2">gamepad_</span><span class="s1">) </span><span class="s0">in </span><span class="s2">gilrs</span><span class="s1">.</span><span class="s2">gamepads</span><span class="s1">() {</span>
<a name="l351"><span class="ln">351 </span></a> <span class="s0">if </span><span class="s2">gamepad_</span><span class="s1">.</span><span class="s2">name</span><span class="s1">() == </span><span class="s4">&quot;PS4&quot; </span><span class="s1">{</span>
<a name="l352"><span class="ln">352 </span></a> <span class="s2">gamepad </span><span class="s1">= </span><span class="s2">Some</span><span class="s1">(</span><span class="s2">gamepad_</span><span class="s1">)</span><span class="s3">;</span>
<a name="l353"><span class="ln">353 </span></a> <span class="s1">}</span>
<a name="l354"><span class="ln">354 </span></a> <span class="s5">// println!(</span>
<a name="l355"><span class="ln">355 </span></a> <span class="s5">// &quot;{} is {:?} {:?}&quot;,</span>
<a name="l356"><span class="ln">356 </span></a> <span class="s5">// gamepad_.name(),</span>
<a name="l357"><span class="ln">357 </span></a> <span class="s5">// gamepad_.power_info(),</span>
<a name="l358"><span class="ln">358 </span></a> <span class="s5">// gamepad_.id()</span>
<a name="l359"><span class="ln">359 </span></a> <span class="s5">// );</span>
<a name="l360"><span class="ln">360 </span></a> <span class="s1">}</span>
<a name="l361"><span class="ln">361 </span></a> <span class="s0">let mut </span><span class="s2">active_gamepad </span><span class="s1">= </span><span class="s2">None</span><span class="s3">;</span>
<a name="l362"><span class="ln">362 </span></a>
<a name="l363"><span class="ln">363 </span></a> <span class="s0">loop </span><span class="s1">{</span>
<a name="l364"><span class="ln">364 </span></a> <span class="s0">while let </span><span class="s2">Some</span><span class="s1">(</span><span class="s2">GilEvent </span><span class="s1">{ </span><span class="s2">id</span><span class="s3">, </span><span class="s2">event</span><span class="s3">, </span><span class="s2">time </span><span class="s1">}) = </span><span class="s2">gilrs</span><span class="s1">.</span><span class="s2">next_event</span><span class="s1">() {</span>
<a name="l365"><span class="ln">365 </span></a> <span class="s5">//println!(&quot;{:?} New event from {}: {:?}&quot;, time, id, event);</span>
<a name="l366"><span class="ln">366 </span></a> <span class="s2">active_gamepad </span><span class="s1">= </span><span class="s2">Some</span><span class="s1">(</span><span class="s2">id</span><span class="s1">)</span><span class="s3">;</span>
<a name="l367"><span class="ln">367 </span></a> <span class="s2">event_loop_proxy</span>
<a name="l368"><span class="ln">368 </span></a> <span class="s1">.</span><span class="s2">send_event</span><span class="s1">(</span><span class="s2">OwnedEventExtension</span><span class="s1">::</span><span class="s2">GamepadEvent </span><span class="s1">{</span>
<a name="l369"><span class="ln">369 </span></a> <span class="s2">gil_event</span><span class="s1">: </span><span class="s2">GilEvent </span><span class="s1">{ </span><span class="s2">id</span><span class="s3">, </span><span class="s2">event</span><span class="s3">, </span><span class="s2">time </span><span class="s1">}</span><span class="s3">,</span>
<a name="l370"><span class="ln">370 </span></a> <span class="s1">})</span>
<a name="l371"><span class="ln">371 </span></a> <span class="s1">.</span><span class="s2">ok</span><span class="s1">()</span><span class="s3">;</span>
<a name="l372"><span class="ln">372 </span></a> <span class="s1">}</span>
<a name="l373"><span class="ln">373 </span></a>
<a name="l374"><span class="ln">374 </span></a> <span class="s5">// // You can also use cached gamepad state</span>
<a name="l375"><span class="ln">375 </span></a> <span class="s5">// if let Some(gamepad) = active_gamepad.map(|id| gilrs.gamepad(id)) {</span>
<a name="l376"><span class="ln">376 </span></a> <span class="s5">// if gamepad.is_pressed(Button::South) {</span>
<a name="l377"><span class="ln">377 </span></a> <span class="s5">// println!(&quot;Button South is pressed (XBox - A, PS - X)&quot;);</span>
<a name="l378"><span class="ln">378 </span></a> <span class="s5">// }</span>
<a name="l379"><span class="ln">379 </span></a> <span class="s5">// }</span>
<a name="l380"><span class="ln">380 </span></a>
<a name="l381"><span class="ln">381 </span></a> <span class="s2">std</span><span class="s1">::</span><span class="s2">thread</span><span class="s1">::</span><span class="s2">sleep</span><span class="s1">(</span><span class="s2">std</span><span class="s1">::</span><span class="s2">time</span><span class="s1">::</span><span class="s2">Duration</span><span class="s1">::</span><span class="s2">from_millis</span><span class="s1">(</span><span class="s7">50</span><span class="s1">))</span><span class="s3">;</span>
<a name="l382"><span class="ln">382 </span></a> <span class="s1">}</span>
<a name="l383"><span class="ln">383 </span></a> <span class="s1">})</span><span class="s3">;</span>
<a name="l384"><span class="ln">384 </span></a><span class="s1">}</span>
<a name="l385"><span class="ln">385 </span></a></pre>
</body>
</html>

View File

@@ -1,22 +0,0 @@
<html>
<head>
<title>mod.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
mod.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">pub mod </span><span class="s2">extended_winit_imgui_support</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">pub mod </span><span class="s2">imgui_support</span><span class="s3">;</span></pre>
</body>
</html>

View File

@@ -1,330 +0,0 @@
<html>
<head>
<title>owned_event.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #499936; font-style: italic;}
.s5 { color: #20999d; font-style: italic;}
.s6 { color: #54b33e;}
.s7 { color: #33ccff; font-weight: bold;}
.s8 { color: #7ec3e6;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
owned_event.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">path</span><span class="s1">::</span><span class="s2">PathBuf</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a>
<a name="l3"><span class="ln">3 </span></a><span class="s0">use </span><span class="s2">gilrs</span><span class="s1">::</span><span class="s2">Event </span><span class="s0">as </span><span class="s2">GilEvent</span><span class="s3">;</span>
<a name="l4"><span class="ln">4 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">world</span><span class="s1">::</span><span class="s2">SubWorld</span><span class="s3">;</span>
<a name="l5"><span class="ln">5 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">dpi</span><span class="s1">::{</span><span class="s2">PhysicalPosition</span><span class="s3">, </span><span class="s2">PhysicalSize</span><span class="s3">, </span><span class="s2">LogicalPosition</span><span class="s1">}</span><span class="s3">;</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">DeviceEvent</span><span class="s1">::</span><span class="s2">MouseMotion</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::{</span><span class="s2">AxisId</span><span class="s3">, </span><span class="s2">DeviceEvent</span><span class="s3">, </span><span class="s2">DeviceId</span><span class="s3">, </span><span class="s2">ElementState</span><span class="s3">, </span><span class="s2">Event</span><span class="s3">, </span><span class="s2">KeyboardInput</span><span class="s3">, </span><span class="s2">ModifiersState</span><span class="s3">, </span><span class="s2">MouseButton</span><span class="s3">, </span><span class="s2">MouseScrollDelta</span><span class="s3">, </span><span class="s2">StartCause</span><span class="s3">, </span><span class="s2">Touch</span><span class="s3">, </span><span class="s2">TouchPhase</span><span class="s3">, </span><span class="s2">WindowEvent</span><span class="s3">, </span><span class="s2">VirtualKeyCode</span><span class="s1">}</span><span class="s3">;</span>
<a name="l9"><span class="ln">9 </span></a><span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">window</span><span class="s1">::{</span><span class="s2">Theme</span><span class="s3">, </span><span class="s2">WindowId</span><span class="s3">, </span><span class="s2">Window</span><span class="s1">}</span><span class="s3">;</span>
<a name="l10"><span class="ln">10 </span></a>
<a name="l11"><span class="ln">11 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">camera</span><span class="s1">::{</span><span class="s2">Camera</span><span class="s3">, </span><span class="s2">CameraController</span><span class="s1">}</span><span class="s3">;</span>
<a name="l12"><span class="ln">12 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">owned_event</span><span class="s1">::</span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">MouseWheel</span><span class="s3">;</span>
<a name="l13"><span class="ln">13 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">sync</span><span class="s1">::{</span><span class="s2">Mutex</span><span class="s3">, </span><span class="s2">Arc</span><span class="s1">}</span><span class="s3">;</span>
<a name="l14"><span class="ln">14 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">cmp</span><span class="s1">::</span><span class="s2">Ordering</span><span class="s3">;</span>
<a name="l15"><span class="ln">15 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::</span><span class="s2">Io</span><span class="s3">;</span>
<a name="l16"><span class="ln">16 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">imgui_supp</span><span class="s1">::</span><span class="s2">imgui_support</span><span class="s1">::{</span><span class="s2">ImguiContext</span><span class="s3">, </span><span class="s2">ImguiPlatform</span><span class="s1">}</span><span class="s3">;</span>
<a name="l17"><span class="ln">17 </span></a>
<a name="l18"><span class="ln">18 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l19"><span class="ln">19 </span></a><span class="s0">pub enum </span><span class="s2">OwnedUIEvent</span><span class="s1">&lt;</span><span class="s2">T</span><span class="s1">&gt; {</span>
<a name="l20"><span class="ln">20 </span></a> <span class="s2">UIEvent</span><span class="s1">(</span><span class="s2">T</span><span class="s1">)</span><span class="s3">,</span>
<a name="l21"><span class="ln">21 </span></a><span class="s1">}</span>
<a name="l22"><span class="ln">22 </span></a>
<a name="l23"><span class="ln">23 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l24"><span class="ln">24 </span></a><span class="s0">pub enum </span><span class="s2">OwnedEventExtension </span><span class="s1">{</span>
<a name="l25"><span class="ln">25 </span></a> <span class="s4">/// Custom events here</span>
<a name="l26"><span class="ln">26 </span></a> <span class="s2">MouseHeldEvent </span><span class="s1">{}</span><span class="s3">,</span>
<a name="l27"><span class="ln">27 </span></a> <span class="s2">KeyHeldEvent </span><span class="s1">{}</span><span class="s3">,</span>
<a name="l28"><span class="ln">28 </span></a> <span class="s2">GamepadEvent </span><span class="s1">{</span>
<a name="l29"><span class="ln">29 </span></a> <span class="s2">gil_event</span><span class="s1">: </span><span class="s2">GilEvent</span><span class="s3">,</span>
<a name="l30"><span class="ln">30 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l31"><span class="ln">31 </span></a><span class="s1">}</span>
<a name="l32"><span class="ln">32 </span></a>
<a name="l33"><span class="ln">33 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Clone</span><span class="s3">, </span><span class="s2">Debug</span><span class="s1">)]</span>
<a name="l34"><span class="ln">34 </span></a><span class="s0">pub enum </span><span class="s2">OwnedEvent</span><span class="s1">&lt;</span><span class="s2">T</span><span class="s1">&gt; {</span>
<a name="l35"><span class="ln">35 </span></a> <span class="s4">/// Custom events here</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s2">MouseHeldEvent </span><span class="s1">{}</span><span class="s3">,</span>
<a name="l37"><span class="ln">37 </span></a> <span class="s2">KeyHeldEvent </span><span class="s1">{}</span><span class="s3">,</span>
<a name="l38"><span class="ln">38 </span></a> <span class="s2">GamepadEvent </span><span class="s1">{</span>
<a name="l39"><span class="ln">39 </span></a> <span class="s2">gil_event</span><span class="s1">: </span><span class="s2">GilEvent</span><span class="s3">,</span>
<a name="l40"><span class="ln">40 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l41"><span class="ln">41 </span></a>
<a name="l42"><span class="ln">42 </span></a> <span class="s4">/// Winit events here</span>
<a name="l43"><span class="ln">43 </span></a> <span class="s2">NewEvents</span><span class="s1">(</span><span class="s2">StartCause</span><span class="s1">)</span><span class="s3">,</span>
<a name="l44"><span class="ln">44 </span></a> <span class="s2">WindowEvent </span><span class="s1">{</span>
<a name="l45"><span class="ln">45 </span></a> <span class="s2">window_id</span><span class="s1">: </span><span class="s2">WindowId</span><span class="s3">,</span>
<a name="l46"><span class="ln">46 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">OwnedWindowEvent</span><span class="s3">,</span>
<a name="l47"><span class="ln">47 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l48"><span class="ln">48 </span></a> <span class="s2">DeviceEvent </span><span class="s1">{</span>
<a name="l49"><span class="ln">49 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l50"><span class="ln">50 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">DeviceEvent</span><span class="s3">,</span>
<a name="l51"><span class="ln">51 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s2">UserEvent</span><span class="s1">(</span><span class="s2">T</span><span class="s1">)</span><span class="s3">,</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s2">Suspended</span><span class="s3">,</span>
<a name="l54"><span class="ln">54 </span></a> <span class="s2">Resumed</span><span class="s3">,</span>
<a name="l55"><span class="ln">55 </span></a> <span class="s2">MainEventsCleared</span><span class="s3">,</span>
<a name="l56"><span class="ln">56 </span></a> <span class="s2">RedrawRequested</span><span class="s1">(</span><span class="s2">WindowId</span><span class="s1">)</span><span class="s3">,</span>
<a name="l57"><span class="ln">57 </span></a> <span class="s2">RedrawEventsCleared</span><span class="s3">,</span>
<a name="l58"><span class="ln">58 </span></a> <span class="s2">LoopDestroyed</span><span class="s3">,</span>
<a name="l59"><span class="ln">59 </span></a><span class="s1">}</span>
<a name="l60"><span class="ln">60 </span></a>
<a name="l61"><span class="ln">61 </span></a><span class="s0">impl</span><span class="s1">&lt;</span><span class="s2">T</span><span class="s1">&gt; </span><span class="s2">From</span><span class="s1">&lt;</span><span class="s2">Event</span><span class="s1">&lt;</span><span class="s5">'_</span><span class="s3">, </span><span class="s2">T</span><span class="s1">&gt;&gt; </span><span class="s0">for </span><span class="s2">OwnedEvent</span><span class="s1">&lt;</span><span class="s2">T</span><span class="s1">&gt; {</span>
<a name="l62"><span class="ln">62 </span></a> <span class="s0">fn </span><span class="s2">from</span><span class="s1">(</span><span class="s2">event</span><span class="s1">: </span><span class="s2">Event</span><span class="s1">&lt;</span><span class="s2">T</span><span class="s1">&gt;) -&gt; </span><span class="s0">Self </span><span class="s1">{</span>
<a name="l63"><span class="ln">63 </span></a> <span class="s0">match </span><span class="s2">event </span><span class="s1">{</span>
<a name="l64"><span class="ln">64 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">NewEvents</span><span class="s1">(</span><span class="s2">cause</span><span class="s1">) =&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">NewEvents</span><span class="s1">(</span><span class="s2">cause</span><span class="s1">)</span><span class="s3">,</span>
<a name="l65"><span class="ln">65 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">WindowEvent </span><span class="s1">{</span>
<a name="l66"><span class="ln">66 </span></a> <span class="s2">window_id</span><span class="s1">: </span><span class="s2">window_id</span><span class="s3">,</span>
<a name="l67"><span class="ln">67 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">event</span><span class="s3">,</span>
<a name="l68"><span class="ln">68 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">WindowEvent </span><span class="s1">{</span>
<a name="l69"><span class="ln">69 </span></a> <span class="s2">window_id</span><span class="s1">: </span><span class="s2">window_id</span><span class="s3">,</span>
<a name="l70"><span class="ln">70 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s0">match </span><span class="s2">event </span><span class="s1">{</span>
<a name="l71"><span class="ln">71 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">AxisMotion </span><span class="s1">{</span>
<a name="l72"><span class="ln">72 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l73"><span class="ln">73 </span></a> <span class="s2">axis</span><span class="s3">,</span>
<a name="l74"><span class="ln">74 </span></a> <span class="s2">value</span><span class="s3">,</span>
<a name="l75"><span class="ln">75 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">AxisMotion </span><span class="s1">{</span>
<a name="l76"><span class="ln">76 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l77"><span class="ln">77 </span></a> <span class="s2">axis</span><span class="s3">,</span>
<a name="l78"><span class="ln">78 </span></a> <span class="s2">value</span><span class="s3">,</span>
<a name="l79"><span class="ln">79 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l80"><span class="ln">80 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">Resized</span><span class="s1">(</span><span class="s2">physical_size</span><span class="s1">) =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">Resized</span><span class="s1">(</span><span class="s2">physical_size</span><span class="s1">)</span><span class="s3">,</span>
<a name="l81"><span class="ln">81 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">Moved</span><span class="s1">(</span><span class="s2">physical_position</span><span class="s1">) =&gt; {</span>
<a name="l82"><span class="ln">82 </span></a> <span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">Moved</span><span class="s1">(</span><span class="s2">physical_position</span><span class="s1">)</span>
<a name="l83"><span class="ln">83 </span></a> <span class="s1">}</span>
<a name="l84"><span class="ln">84 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">CloseRequested </span><span class="s1">=&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">CloseRequested</span><span class="s3">,</span>
<a name="l85"><span class="ln">85 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">Destroyed </span><span class="s1">=&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">Destroyed</span><span class="s3">,</span>
<a name="l86"><span class="ln">86 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">DroppedFile</span><span class="s1">(</span><span class="s2">path_buf</span><span class="s1">) =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">DroppedFile</span><span class="s1">(</span><span class="s2">path_buf</span><span class="s1">)</span><span class="s3">,</span>
<a name="l87"><span class="ln">87 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">HoveredFile</span><span class="s1">(</span><span class="s2">path_buf</span><span class="s1">) =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">HoveredFile</span><span class="s1">(</span><span class="s2">path_buf</span><span class="s1">)</span><span class="s3">,</span>
<a name="l88"><span class="ln">88 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">HoveredFileCancelled </span><span class="s1">=&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">HoveredFileCancelled</span><span class="s3">,</span>
<a name="l89"><span class="ln">89 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">ReceivedCharacter</span><span class="s1">(</span><span class="s2">char</span><span class="s1">) =&gt; {</span>
<a name="l90"><span class="ln">90 </span></a> <span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">ReceivedCharacter</span><span class="s1">(</span><span class="s2">char</span><span class="s1">)</span>
<a name="l91"><span class="ln">91 </span></a> <span class="s1">}</span>
<a name="l92"><span class="ln">92 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">Focused</span><span class="s1">(</span><span class="s2">bool</span><span class="s1">) =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">Focused</span><span class="s1">(</span><span class="s2">bool</span><span class="s1">)</span><span class="s3">,</span>
<a name="l93"><span class="ln">93 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">KeyboardInput </span><span class="s1">{</span>
<a name="l94"><span class="ln">94 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l95"><span class="ln">95 </span></a> <span class="s2">input</span><span class="s1">: </span><span class="s2">input</span><span class="s3">,</span>
<a name="l96"><span class="ln">96 </span></a> <span class="s2">is_synthetic</span><span class="s1">: </span><span class="s2">is_synthetic</span><span class="s3">,</span>
<a name="l97"><span class="ln">97 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">KeyboardInput </span><span class="s1">{</span>
<a name="l98"><span class="ln">98 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l99"><span class="ln">99 </span></a> <span class="s2">input</span><span class="s3">,</span>
<a name="l100"><span class="ln">100 </span></a> <span class="s2">is_synthetic</span><span class="s3">,</span>
<a name="l101"><span class="ln">101 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l102"><span class="ln">102 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">ModifiersChanged</span><span class="s1">(</span><span class="s2">modifiers_state</span><span class="s1">) =&gt; {</span>
<a name="l103"><span class="ln">103 </span></a> <span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">ModifiersChanged</span><span class="s1">(</span><span class="s2">modifiers_state</span><span class="s1">)</span>
<a name="l104"><span class="ln">104 </span></a> <span class="s1">}</span>
<a name="l105"><span class="ln">105 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">CursorMoved </span><span class="s1">{</span>
<a name="l106"><span class="ln">106 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l107"><span class="ln">107 </span></a> <span class="s2">position</span><span class="s1">: </span><span class="s2">position</span><span class="s3">,</span>
<a name="l108"><span class="ln">108 </span></a> <span class="s2">modifiers</span><span class="s1">: </span><span class="s2">modifiers</span><span class="s3">,</span>
<a name="l109"><span class="ln">109 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">CursorMoved </span><span class="s1">{</span>
<a name="l110"><span class="ln">110 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l111"><span class="ln">111 </span></a> <span class="s2">position</span><span class="s3">,</span>
<a name="l112"><span class="ln">112 </span></a> <span class="s2">modifiers</span><span class="s3">,</span>
<a name="l113"><span class="ln">113 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l114"><span class="ln">114 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">CursorEntered </span><span class="s1">{</span>
<a name="l115"><span class="ln">115 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l116"><span class="ln">116 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">CursorEntered </span><span class="s1">{ </span><span class="s2">device_id </span><span class="s1">}</span><span class="s3">,</span>
<a name="l117"><span class="ln">117 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">CursorLeft </span><span class="s1">{</span>
<a name="l118"><span class="ln">118 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l119"><span class="ln">119 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">CursorLeft </span><span class="s1">{ </span><span class="s2">device_id </span><span class="s1">}</span><span class="s3">,</span>
<a name="l120"><span class="ln">120 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">MouseWheel </span><span class="s1">{</span>
<a name="l121"><span class="ln">121 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l122"><span class="ln">122 </span></a> <span class="s2">delta</span><span class="s1">: </span><span class="s2">delta</span><span class="s3">,</span>
<a name="l123"><span class="ln">123 </span></a> <span class="s2">phase</span><span class="s1">: </span><span class="s2">phase</span><span class="s3">,</span>
<a name="l124"><span class="ln">124 </span></a> <span class="s2">modifiers</span><span class="s1">: </span><span class="s2">modifiers</span><span class="s3">,</span>
<a name="l125"><span class="ln">125 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">MouseWheel </span><span class="s1">{</span>
<a name="l126"><span class="ln">126 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l127"><span class="ln">127 </span></a> <span class="s2">delta</span><span class="s3">,</span>
<a name="l128"><span class="ln">128 </span></a> <span class="s2">phase</span><span class="s3">,</span>
<a name="l129"><span class="ln">129 </span></a> <span class="s2">modifiers</span><span class="s3">,</span>
<a name="l130"><span class="ln">130 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l131"><span class="ln">131 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">MouseInput </span><span class="s1">{</span>
<a name="l132"><span class="ln">132 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l133"><span class="ln">133 </span></a> <span class="s2">state</span><span class="s1">: </span><span class="s2">state</span><span class="s3">,</span>
<a name="l134"><span class="ln">134 </span></a> <span class="s2">button</span><span class="s1">: </span><span class="s2">button</span><span class="s3">,</span>
<a name="l135"><span class="ln">135 </span></a> <span class="s2">modifiers</span><span class="s1">: </span><span class="s2">modifiers</span><span class="s3">,</span>
<a name="l136"><span class="ln">136 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">MouseInput </span><span class="s1">{</span>
<a name="l137"><span class="ln">137 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l138"><span class="ln">138 </span></a> <span class="s2">state</span><span class="s3">,</span>
<a name="l139"><span class="ln">139 </span></a> <span class="s2">button</span><span class="s3">,</span>
<a name="l140"><span class="ln">140 </span></a> <span class="s2">modifiers</span><span class="s3">,</span>
<a name="l141"><span class="ln">141 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l142"><span class="ln">142 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">TouchpadPressure </span><span class="s1">{</span>
<a name="l143"><span class="ln">143 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l144"><span class="ln">144 </span></a> <span class="s2">pressure</span><span class="s1">: </span><span class="s2">pressure</span><span class="s3">,</span>
<a name="l145"><span class="ln">145 </span></a> <span class="s2">stage</span><span class="s1">: </span><span class="s2">stage</span><span class="s3">,</span>
<a name="l146"><span class="ln">146 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">TouchpadPressure </span><span class="s1">{</span>
<a name="l147"><span class="ln">147 </span></a> <span class="s2">device_id</span><span class="s3">,</span>
<a name="l148"><span class="ln">148 </span></a> <span class="s2">pressure</span><span class="s3">,</span>
<a name="l149"><span class="ln">149 </span></a> <span class="s2">stage</span><span class="s3">,</span>
<a name="l150"><span class="ln">150 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l151"><span class="ln">151 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">Touch</span><span class="s1">(</span><span class="s2">touch</span><span class="s1">) =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">Touch</span><span class="s1">(</span><span class="s2">touch</span><span class="s1">)</span><span class="s3">,</span>
<a name="l152"><span class="ln">152 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">ScaleFactorChanged </span><span class="s1">{</span>
<a name="l153"><span class="ln">153 </span></a> <span class="s2">scale_factor</span><span class="s1">: </span><span class="s2">scale_factor</span><span class="s3">,</span>
<a name="l154"><span class="ln">154 </span></a> <span class="s2">new_inner_size</span><span class="s1">: </span><span class="s2">new_inner_size</span><span class="s3">,</span>
<a name="l155"><span class="ln">155 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">ScaleFactorChanged </span><span class="s1">{</span>
<a name="l156"><span class="ln">156 </span></a> <span class="s2">scale_factor</span><span class="s3">,</span>
<a name="l157"><span class="ln">157 </span></a> <span class="s2">new_inner_size</span><span class="s1">: </span><span class="s2">PhysicalSize </span><span class="s1">{</span>
<a name="l158"><span class="ln">158 </span></a> <span class="s2">width</span><span class="s1">: </span><span class="s2">new_inner_size</span><span class="s1">.</span><span class="s2">width</span><span class="s3">,</span>
<a name="l159"><span class="ln">159 </span></a> <span class="s2">height</span><span class="s1">: </span><span class="s2">new_inner_size</span><span class="s1">.</span><span class="s2">height</span><span class="s3">,</span>
<a name="l160"><span class="ln">160 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l161"><span class="ln">161 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l162"><span class="ln">162 </span></a> <span class="s2">WindowEvent</span><span class="s1">::</span><span class="s2">ThemeChanged</span><span class="s1">(</span><span class="s2">theme</span><span class="s1">) =&gt; </span><span class="s2">OwnedWindowEvent</span><span class="s1">::</span><span class="s2">ThemeChanged</span><span class="s1">(</span><span class="s2">theme</span><span class="s1">)</span><span class="s3">,</span>
<a name="l163"><span class="ln">163 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l164"><span class="ln">164 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l165"><span class="ln">165 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">DeviceEvent </span><span class="s1">{</span>
<a name="l166"><span class="ln">166 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">device_id</span><span class="s3">,</span>
<a name="l167"><span class="ln">167 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">event</span><span class="s3">,</span>
<a name="l168"><span class="ln">168 </span></a> <span class="s1">} =&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">DeviceEvent </span><span class="s1">{ </span><span class="s2">device_id</span><span class="s3">, </span><span class="s2">event </span><span class="s1">}</span><span class="s3">,</span>
<a name="l169"><span class="ln">169 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">UserEvent</span><span class="s1">(</span><span class="s2">user_event</span><span class="s1">) =&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">UserEvent</span><span class="s1">(</span><span class="s2">user_event</span><span class="s1">)</span><span class="s3">,</span>
<a name="l170"><span class="ln">170 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">Suspended </span><span class="s1">=&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">Suspended</span><span class="s3">,</span>
<a name="l171"><span class="ln">171 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">Resumed </span><span class="s1">=&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">Resumed</span><span class="s3">,</span>
<a name="l172"><span class="ln">172 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">MainEventsCleared </span><span class="s1">=&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">MainEventsCleared</span><span class="s3">,</span>
<a name="l173"><span class="ln">173 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">RedrawRequested</span><span class="s1">(</span><span class="s2">window_id</span><span class="s1">) =&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">RedrawRequested</span><span class="s1">(</span><span class="s2">window_id</span><span class="s1">)</span><span class="s3">,</span>
<a name="l174"><span class="ln">174 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">RedrawEventsCleared </span><span class="s1">=&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">RedrawEventsCleared</span><span class="s3">,</span>
<a name="l175"><span class="ln">175 </span></a> <span class="s2">Event</span><span class="s1">::</span><span class="s2">LoopDestroyed </span><span class="s1">=&gt; </span><span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">LoopDestroyed</span><span class="s3">,</span>
<a name="l176"><span class="ln">176 </span></a> <span class="s1">}</span>
<a name="l177"><span class="ln">177 </span></a> <span class="s1">}</span>
<a name="l178"><span class="ln">178 </span></a><span class="s1">}</span>
<a name="l179"><span class="ln">179 </span></a>
<a name="l180"><span class="ln">180 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Debug</span><span class="s3">, </span><span class="s2">PartialEq</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l181"><span class="ln">181 </span></a><span class="s0">pub enum </span><span class="s2">OwnedWindowEvent </span><span class="s1">{</span>
<a name="l182"><span class="ln">182 </span></a> <span class="s2">Resized</span><span class="s1">(</span><span class="s2">PhysicalSize</span><span class="s1">&lt;</span><span class="s2">u32</span><span class="s1">&gt;)</span><span class="s3">,</span>
<a name="l183"><span class="ln">183 </span></a> <span class="s2">Moved</span><span class="s1">(</span><span class="s2">PhysicalPosition</span><span class="s1">&lt;</span><span class="s2">i32</span><span class="s1">&gt;)</span><span class="s3">,</span>
<a name="l184"><span class="ln">184 </span></a> <span class="s2">CloseRequested</span><span class="s3">,</span>
<a name="l185"><span class="ln">185 </span></a> <span class="s2">Destroyed</span><span class="s3">,</span>
<a name="l186"><span class="ln">186 </span></a> <span class="s2">DroppedFile</span><span class="s1">(</span><span class="s2">PathBuf</span><span class="s1">)</span><span class="s3">,</span>
<a name="l187"><span class="ln">187 </span></a> <span class="s2">HoveredFile</span><span class="s1">(</span><span class="s2">PathBuf</span><span class="s1">)</span><span class="s3">,</span>
<a name="l188"><span class="ln">188 </span></a> <span class="s2">HoveredFileCancelled</span><span class="s3">,</span>
<a name="l189"><span class="ln">189 </span></a> <span class="s2">ReceivedCharacter</span><span class="s1">(</span><span class="s2">char</span><span class="s1">)</span><span class="s3">,</span>
<a name="l190"><span class="ln">190 </span></a> <span class="s2">Focused</span><span class="s1">(</span><span class="s2">bool</span><span class="s1">)</span><span class="s3">,</span>
<a name="l191"><span class="ln">191 </span></a> <span class="s2">KeyboardInput </span><span class="s1">{</span>
<a name="l192"><span class="ln">192 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l193"><span class="ln">193 </span></a> <span class="s2">input</span><span class="s1">: </span><span class="s2">KeyboardInput</span><span class="s3">,</span>
<a name="l194"><span class="ln">194 </span></a> <span class="s2">is_synthetic</span><span class="s1">: </span><span class="s2">bool</span><span class="s3">,</span>
<a name="l195"><span class="ln">195 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l196"><span class="ln">196 </span></a> <span class="s2">ModifiersChanged</span><span class="s1">(</span><span class="s2">ModifiersState</span><span class="s1">)</span><span class="s3">,</span>
<a name="l197"><span class="ln">197 </span></a> <span class="s2">CursorMoved </span><span class="s1">{</span>
<a name="l198"><span class="ln">198 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l199"><span class="ln">199 </span></a> <span class="s2">position</span><span class="s1">: </span><span class="s2">PhysicalPosition</span><span class="s1">&lt;</span><span class="s2">f64</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l200"><span class="ln">200 </span></a> <span class="s1">#[</span><span class="s2">deprecated </span><span class="s1">= </span><span class="s6">&quot;Deprecated in favor of WindowEvent::ModifiersChanged&quot;</span><span class="s1">]</span>
<a name="l201"><span class="ln">201 </span></a> <span class="s2">modifiers</span><span class="s1">: </span><span class="s2">ModifiersState</span><span class="s3">,</span>
<a name="l202"><span class="ln">202 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l203"><span class="ln">203 </span></a> <span class="s2">CursorEntered </span><span class="s1">{</span>
<a name="l204"><span class="ln">204 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l205"><span class="ln">205 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l206"><span class="ln">206 </span></a> <span class="s2">CursorLeft </span><span class="s1">{</span>
<a name="l207"><span class="ln">207 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l208"><span class="ln">208 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l209"><span class="ln">209 </span></a> <span class="s2">MouseWheel </span><span class="s1">{</span>
<a name="l210"><span class="ln">210 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l211"><span class="ln">211 </span></a> <span class="s2">delta</span><span class="s1">: </span><span class="s2">MouseScrollDelta</span><span class="s3">,</span>
<a name="l212"><span class="ln">212 </span></a> <span class="s2">phase</span><span class="s1">: </span><span class="s2">TouchPhase</span><span class="s3">,</span>
<a name="l213"><span class="ln">213 </span></a> <span class="s1">#[</span><span class="s2">deprecated </span><span class="s1">= </span><span class="s6">&quot;Deprecated in favor of WindowEvent::ModifiersChanged&quot;</span><span class="s1">]</span>
<a name="l214"><span class="ln">214 </span></a> <span class="s2">modifiers</span><span class="s1">: </span><span class="s2">ModifiersState</span><span class="s3">,</span>
<a name="l215"><span class="ln">215 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l216"><span class="ln">216 </span></a> <span class="s2">MouseInput </span><span class="s1">{</span>
<a name="l217"><span class="ln">217 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l218"><span class="ln">218 </span></a> <span class="s2">state</span><span class="s1">: </span><span class="s2">ElementState</span><span class="s3">,</span>
<a name="l219"><span class="ln">219 </span></a> <span class="s2">button</span><span class="s1">: </span><span class="s2">MouseButton</span><span class="s3">,</span>
<a name="l220"><span class="ln">220 </span></a> <span class="s1">#[</span><span class="s2">deprecated </span><span class="s1">= </span><span class="s6">&quot;Deprecated in favor of WindowEvent::ModifiersChanged&quot;</span><span class="s1">]</span>
<a name="l221"><span class="ln">221 </span></a> <span class="s2">modifiers</span><span class="s1">: </span><span class="s2">ModifiersState</span><span class="s3">,</span>
<a name="l222"><span class="ln">222 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l223"><span class="ln">223 </span></a> <span class="s2">TouchpadPressure </span><span class="s1">{</span>
<a name="l224"><span class="ln">224 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l225"><span class="ln">225 </span></a> <span class="s2">pressure</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l226"><span class="ln">226 </span></a> <span class="s2">stage</span><span class="s1">: </span><span class="s2">i64</span><span class="s3">,</span>
<a name="l227"><span class="ln">227 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l228"><span class="ln">228 </span></a> <span class="s2">AxisMotion </span><span class="s1">{</span>
<a name="l229"><span class="ln">229 </span></a> <span class="s2">device_id</span><span class="s1">: </span><span class="s2">DeviceId</span><span class="s3">,</span>
<a name="l230"><span class="ln">230 </span></a> <span class="s2">axis</span><span class="s1">: </span><span class="s2">AxisId</span><span class="s3">,</span>
<a name="l231"><span class="ln">231 </span></a> <span class="s2">value</span><span class="s1">: </span><span class="s2">f64</span><span class="s3">,</span>
<a name="l232"><span class="ln">232 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l233"><span class="ln">233 </span></a> <span class="s2">Touch</span><span class="s1">(</span><span class="s2">Touch</span><span class="s1">)</span><span class="s3">,</span>
<a name="l234"><span class="ln">234 </span></a> <span class="s2">ScaleFactorChanged </span><span class="s1">{</span>
<a name="l235"><span class="ln">235 </span></a> <span class="s2">scale_factor</span><span class="s1">: </span><span class="s2">f64</span><span class="s3">,</span>
<a name="l236"><span class="ln">236 </span></a> <span class="s2">new_inner_size</span><span class="s1">: </span><span class="s2">PhysicalSize</span><span class="s1">&lt;</span><span class="s2">u32</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l237"><span class="ln">237 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l238"><span class="ln">238 </span></a> <span class="s2">ThemeChanged</span><span class="s1">(</span><span class="s2">Theme</span><span class="s1">)</span><span class="s3">,</span>
<a name="l239"><span class="ln">239 </span></a><span class="s1">}</span>
<a name="l240"><span class="ln">240 </span></a>
<a name="l241"><span class="ln">241 </span></a>
<a name="l242"><span class="ln">242 </span></a><span class="s4">/// Because I am a glutton for punishment I am going to just do a mono-event-dispatch-magoooo</span>
<a name="l243"><span class="ln">243 </span></a><span class="s1">#[</span><span class="s2">system</span><span class="s1">]</span>
<a name="l244"><span class="ln">244 </span></a><span class="s1">#[</span><span class="s2">write_component</span><span class="s1">(</span><span class="s2">Camera</span><span class="s1">)]</span>
<a name="l245"><span class="ln">245 </span></a><span class="s1">#[</span><span class="s2">write_component</span><span class="s1">(</span><span class="s2">CameraController</span><span class="s1">)]</span>
<a name="l246"><span class="ln">246 </span></a><span class="s0">pub fn </span><span class="s2">event_dispatch</span><span class="s1">(</span>
<a name="l247"><span class="ln">247 </span></a> <span class="s2">world</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">SubWorld</span><span class="s3">,</span>
<a name="l248"><span class="ln">248 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">event_stack</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">OwnedEvent</span><span class="s1">&lt;</span><span class="s2">OwnedEventExtension</span><span class="s1">&gt;&gt;</span><span class="s3">,</span>
<a name="l249"><span class="ln">249 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">imgui_context</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">Mutex</span><span class="s1">&lt;</span><span class="s2">ImguiContext</span><span class="s1">&gt;&gt;</span><span class="s3">,</span>
<a name="l250"><span class="ln">250 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">imgui_platform</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">Arc</span><span class="s1">&lt;</span><span class="s2">Mutex</span><span class="s1">&lt;</span><span class="s2">ImguiPlatform</span><span class="s1">&gt;&gt;</span><span class="s3">,</span>
<a name="l251"><span class="ln">251 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">winit_window</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">Window</span><span class="s3">,</span>
<a name="l252"><span class="ln">252 </span></a><span class="s1">) {</span>
<a name="l253"><span class="ln">253 </span></a> <span class="s0">use </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">Event</span><span class="s1">::</span><span class="s2">DeviceEvent</span><span class="s3">;</span>
<a name="l254"><span class="ln">254 </span></a>
<a name="l255"><span class="ln">255 </span></a> <span class="s0">for </span><span class="s2">event </span><span class="s0">in </span><span class="s2">event_stack </span><span class="s1">{</span>
<a name="l256"><span class="ln">256 </span></a>
<a name="l257"><span class="ln">257 </span></a> <span class="s0">match </span><span class="s2">event </span><span class="s1">{</span>
<a name="l258"><span class="ln">258 </span></a> <span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">DeviceEvent </span><span class="s1">{</span>
<a name="l259"><span class="ln">259 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">DeviceEvent</span><span class="s1">::</span><span class="s2">MouseMotion </span><span class="s1">{ </span><span class="s2">delta </span><span class="s1">}</span><span class="s3">,</span>
<a name="l260"><span class="ln">260 </span></a> <span class="s1">..</span>
<a name="l261"><span class="ln">261 </span></a> <span class="s1">} =&gt; {</span>
<a name="l262"><span class="ln">262 </span></a> <span class="s0">let mut </span><span class="s2">query </span><span class="s1">= &lt;(&amp;</span><span class="s0">mut </span><span class="s2">CameraController</span><span class="s1">)&gt;::</span><span class="s2">query</span><span class="s1">()</span><span class="s3">;</span>
<a name="l263"><span class="ln">263 </span></a> <span class="s0">for </span><span class="s1">(</span><span class="s2">camera_controller</span><span class="s1">) </span><span class="s0">in </span><span class="s2">query</span><span class="s1">.</span><span class="s2">iter_mut</span><span class="s1">(</span><span class="s2">world</span><span class="s1">) {</span>
<a name="l264"><span class="ln">264 </span></a> <span class="s2">camera_controller</span><span class="s1">.</span><span class="s2">process_mouse</span><span class="s1">(</span><span class="s2">delta</span><span class="s1">.</span><span class="s7">0</span><span class="s3">, </span><span class="s2">delta</span><span class="s1">.</span><span class="s7">1</span><span class="s1">)</span><span class="s3">;</span>
<a name="l265"><span class="ln">265 </span></a> <span class="s1">}</span>
<a name="l266"><span class="ln">266 </span></a>
<a name="l267"><span class="ln">267 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l268"><span class="ln">268 </span></a> <span class="s2">OwnedEvent</span><span class="s1">::</span><span class="s2">DeviceEvent </span><span class="s1">{</span>
<a name="l269"><span class="ln">269 </span></a> <span class="s2">event</span><span class="s1">: </span><span class="s2">winit_24</span><span class="s1">::</span><span class="s2">event</span><span class="s1">::</span><span class="s2">DeviceEvent</span><span class="s1">::</span><span class="s2">Key</span><span class="s1">(</span><span class="s2">keyboard_input</span><span class="s1">)</span><span class="s3">,</span>
<a name="l270"><span class="ln">270 </span></a> <span class="s1">..</span>
<a name="l271"><span class="ln">271 </span></a> <span class="s1">} =&gt; {</span>
<a name="l272"><span class="ln">272 </span></a> <span class="s0">let mut </span><span class="s2">query </span><span class="s1">= &lt;(&amp;</span><span class="s0">mut </span><span class="s2">CameraController</span><span class="s1">)&gt;::</span><span class="s2">query</span><span class="s1">()</span><span class="s3">;</span>
<a name="l273"><span class="ln">273 </span></a> <span class="s0">for </span><span class="s1">(</span><span class="s2">camera_controller</span><span class="s1">) </span><span class="s0">in </span><span class="s2">query</span><span class="s1">.</span><span class="s2">iter_mut</span><span class="s1">(</span><span class="s2">world</span><span class="s1">) {</span>
<a name="l274"><span class="ln">274 </span></a> <span class="s2">camera_controller</span><span class="s1">.</span><span class="s2">process_keyboard</span><span class="s1">(</span>
<a name="l275"><span class="ln">275 </span></a> <span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">virtual_keycode</span><span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">,</span>
<a name="l276"><span class="ln">276 </span></a> <span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">state</span><span class="s3">,</span>
<a name="l277"><span class="ln">277 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l278"><span class="ln">278 </span></a> <span class="s1">}</span>
<a name="l279"><span class="ln">279 </span></a>
<a name="l280"><span class="ln">280 </span></a> <span class="s0">match </span><span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">virtual_keycode</span><span class="s1">.</span><span class="s2">unwrap</span><span class="s1">() {</span>
<a name="l281"><span class="ln">281 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">R </span><span class="s1">=&gt; {</span>
<a name="l282"><span class="ln">282 </span></a> <span class="s0">if </span><span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">state </span><span class="s1">== </span><span class="s2">ElementState</span><span class="s1">::</span><span class="s2">Pressed </span><span class="s1">{</span>
<a name="l283"><span class="ln">283 </span></a>
<a name="l284"><span class="ln">284 </span></a>
<a name="l285"><span class="ln">285 </span></a> <span class="s8">//winit_window.set_cursor_grab(true);</span>
<a name="l286"><span class="ln">286 </span></a> <span class="s1">}</span>
<a name="l287"><span class="ln">287 </span></a> <span class="s1">}</span>
<a name="l288"><span class="ln">288 </span></a> <span class="s2">VirtualKeyCode</span><span class="s1">::</span><span class="s2">Escape </span><span class="s1">=&gt; {</span>
<a name="l289"><span class="ln">289 </span></a> <span class="s0">if </span><span class="s2">keyboard_input</span><span class="s1">.</span><span class="s2">state </span><span class="s1">== </span><span class="s2">ElementState</span><span class="s1">::</span><span class="s2">Pressed </span><span class="s1">{</span>
<a name="l290"><span class="ln">290 </span></a> <span class="s8">//winit_window.set_cursor_grab(false);</span>
<a name="l291"><span class="ln">291 </span></a> <span class="s1">}</span>
<a name="l292"><span class="ln">292 </span></a> <span class="s1">}</span>
<a name="l293"><span class="ln">293 </span></a> <span class="s2">_ </span><span class="s1">=&gt; ()</span>
<a name="l294"><span class="ln">294 </span></a> <span class="s1">}</span>
<a name="l295"><span class="ln">295 </span></a> <span class="s1">}</span>
<a name="l296"><span class="ln">296 </span></a> <span class="s2">_ </span><span class="s1">=&gt; {}</span>
<a name="l297"><span class="ln">297 </span></a> <span class="s1">}</span>
<a name="l298"><span class="ln">298 </span></a>
<a name="l299"><span class="ln">299 </span></a> <span class="s0">let mut </span><span class="s2">imgui_context </span><span class="s1">= &amp;</span><span class="s0">mut </span><span class="s2">imgui_context</span><span class="s1">.</span><span class="s2">lock</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">().</span><span class="s2">context</span><span class="s3">;</span>
<a name="l300"><span class="ln">300 </span></a> <span class="s0">let mut </span><span class="s2">imgui_platform </span><span class="s1">= &amp;</span><span class="s0">mut </span><span class="s2">imgui_platform</span><span class="s1">.</span><span class="s2">lock</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">().</span><span class="s2">platform</span><span class="s3">;</span>
<a name="l301"><span class="ln">301 </span></a>
<a name="l302"><span class="ln">302 </span></a> <span class="s2">imgui_platform</span><span class="s1">.</span><span class="s2">handle_event</span><span class="s1">(</span><span class="s2">imgui_context</span><span class="s1">.</span><span class="s2">io_mut</span><span class="s1">()</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s2">winit_window</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s2">event</span><span class="s1">)</span><span class="s3">;</span>
<a name="l303"><span class="ln">303 </span></a> <span class="s1">}</span>
<a name="l304"><span class="ln">304 </span></a><span class="s1">}</span>
<a name="l305"><span class="ln">305 </span></a></pre>
</body>
</html>

View File

@@ -1,138 +0,0 @@
<html>
<head>
<title>state.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #54b33e;}
.s5 { color: #7ec3e6;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
state.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">collections</span><span class="s1">::</span><span class="s2">HashMap</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">fs</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">path</span><span class="s1">::</span><span class="s2">PathBuf</span><span class="s3">;</span>
<a name="l4"><span class="ln">4 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">time</span><span class="s1">::</span><span class="s2">Instant</span><span class="s3">;</span>
<a name="l5"><span class="ln">5 </span></a><span class="s0">use </span><span class="s2">serde_derive</span><span class="s1">::</span><span class="s2">Deserialize</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a>
<a name="l7"><span class="ln">7 </span></a><span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::{</span><span class="s2">Euler</span><span class="s3">, </span><span class="s2">Quaternion</span><span class="s3">, </span><span class="s2">Deg</span><span class="s1">}</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">world</span><span class="s1">::</span><span class="s2">SubWorld</span><span class="s3">;</span>
<a name="l9"><span class="ln">9 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">IntoQuery</span><span class="s3">;</span>
<a name="l10"><span class="ln">10 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l11"><span class="ln">11 </span></a><span class="s0">use </span><span class="s2">nalgebra</span><span class="s1">::</span><span class="s2">Quaternion </span><span class="s0">as </span><span class="s2">naQuaternion</span><span class="s3">;</span>
<a name="l12"><span class="ln">12 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">dynamics</span><span class="s1">::{</span><span class="s2">IntegrationParameters</span><span class="s3">, </span><span class="s2">JointSet</span><span class="s3">, </span><span class="s2">RigidBodySet</span><span class="s1">}</span><span class="s3">;</span>
<a name="l13"><span class="ln">13 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::{</span><span class="s2">BroadPhase</span><span class="s3">, </span><span class="s2">ColliderSet</span><span class="s3">, </span><span class="s2">NarrowPhase</span><span class="s1">}</span><span class="s3">;</span>
<a name="l14"><span class="ln">14 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">pipeline</span><span class="s1">::</span><span class="s2">PhysicsPipeline</span><span class="s3">;</span>
<a name="l15"><span class="ln">15 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">camera</span><span class="s1">::{</span><span class="s2">Camera</span><span class="s3">, </span><span class="s2">CameraController</span><span class="s1">}</span><span class="s3">;</span>
<a name="l16"><span class="ln">16 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">components</span><span class="s1">::{</span><span class="s2">Collider</span><span class="s3">, </span><span class="s2">LoopState</span><span class="s3">, </span><span class="s2">Mesh</span><span class="s3">, </span><span class="s2">Physics</span><span class="s3">, </span><span class="s2">Position</span><span class="s1">}</span><span class="s3">;</span>
<a name="l17"><span class="ln">17 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::{</span><span class="s2">load_obj</span><span class="s3">, </span><span class="s2">RawMesh</span><span class="s1">}</span><span class="s3">;</span>
<a name="l18"><span class="ln">18 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">io</span><span class="s1">::</span><span class="s2">Read</span><span class="s3">;</span>
<a name="l19"><span class="ln">19 </span></a>
<a name="l20"><span class="ln">20 </span></a>
<a name="l21"><span class="ln">21 </span></a>
<a name="l22"><span class="ln">22 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l23"><span class="ln">23 </span></a><span class="s0">pub struct </span><span class="s2">TomlBallPhysicsBodyDescription </span><span class="s1">{</span>
<a name="l24"><span class="ln">24 </span></a> <span class="s0">pub </span><span class="s2">radius</span><span class="s1">: </span><span class="s2">String</span>
<a name="l25"><span class="ln">25 </span></a><span class="s1">}</span>
<a name="l26"><span class="ln">26 </span></a>
<a name="l27"><span class="ln">27 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l28"><span class="ln">28 </span></a><span class="s0">pub struct </span><span class="s2">TomlCuboidPhysicsBodyDescription </span><span class="s1">{</span>
<a name="l29"><span class="ln">29 </span></a> <span class="s0">pub </span><span class="s2">x</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l30"><span class="ln">30 </span></a> <span class="s0">pub </span><span class="s2">y</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l31"><span class="ln">31 </span></a> <span class="s0">pub </span><span class="s2">z</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l32"><span class="ln">32 </span></a><span class="s1">}</span>
<a name="l33"><span class="ln">33 </span></a>
<a name="l34"><span class="ln">34 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l35"><span class="ln">35 </span></a><span class="s0">pub struct </span><span class="s2">TomlPhysicsDescription </span><span class="s1">{</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s0">pub </span><span class="s2">body_status</span><span class="s1">: </span><span class="s2">String</span><span class="s3">,</span>
<a name="l37"><span class="ln">37 </span></a> <span class="s0">pub </span><span class="s2">ball</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlBallPhysicsBodyDescription</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l38"><span class="ln">38 </span></a> <span class="s0">pub </span><span class="s2">cuboid</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlCuboidPhysicsBodyDescription</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l39"><span class="ln">39 </span></a><span class="s1">}</span>
<a name="l40"><span class="ln">40 </span></a>
<a name="l41"><span class="ln">41 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l42"><span class="ln">42 </span></a><span class="s0">pub struct </span><span class="s2">TomlRotationDescription </span><span class="s1">{</span>
<a name="l43"><span class="ln">43 </span></a> <span class="s0">pub </span><span class="s2">x</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l44"><span class="ln">44 </span></a> <span class="s0">pub </span><span class="s2">y</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l45"><span class="ln">45 </span></a> <span class="s0">pub </span><span class="s2">z</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l46"><span class="ln">46 </span></a><span class="s1">}</span>
<a name="l47"><span class="ln">47 </span></a>
<a name="l48"><span class="ln">48 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l49"><span class="ln">49 </span></a><span class="s0">pub struct </span><span class="s2">TomlPositionDescription </span><span class="s1">{</span>
<a name="l50"><span class="ln">50 </span></a> <span class="s0">pub </span><span class="s2">x</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l51"><span class="ln">51 </span></a> <span class="s0">pub </span><span class="s2">y</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l52"><span class="ln">52 </span></a> <span class="s0">pub </span><span class="s2">z</span><span class="s1">: </span><span class="s2">f32</span><span class="s3">,</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s0">pub </span><span class="s2">rot</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlRotationDescription</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l54"><span class="ln">54 </span></a><span class="s1">}</span>
<a name="l55"><span class="ln">55 </span></a>
<a name="l56"><span class="ln">56 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l57"><span class="ln">57 </span></a><span class="s0">pub struct </span><span class="s2">TomlEntityDescription </span><span class="s1">{</span>
<a name="l58"><span class="ln">58 </span></a> <span class="s0">pub </span><span class="s2">name</span><span class="s1">: </span><span class="s2">String</span><span class="s3">,</span>
<a name="l59"><span class="ln">59 </span></a> <span class="s1">#[</span><span class="s2">serde</span><span class="s1">(</span><span class="s2">rename </span><span class="s1">= </span><span class="s4">&quot;type&quot;</span><span class="s1">)]</span>
<a name="l60"><span class="ln">60 </span></a> <span class="s0">pub </span><span class="s2">type_name</span><span class="s1">: </span><span class="s2">String</span><span class="s3">,</span>
<a name="l61"><span class="ln">61 </span></a> <span class="s0">pub </span><span class="s2">mesh</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">String</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l62"><span class="ln">62 </span></a> <span class="s0">pub </span><span class="s2">position</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlPositionDescription</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l63"><span class="ln">63 </span></a> <span class="s0">pub </span><span class="s2">physics</span><span class="s1">: </span><span class="s2">Option</span><span class="s1">&lt;</span><span class="s2">TomlPhysicsDescription</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l64"><span class="ln">64 </span></a><span class="s1">}</span>
<a name="l65"><span class="ln">65 </span></a>
<a name="l66"><span class="ln">66 </span></a><span class="s1">#[</span><span class="s2">derive</span><span class="s1">(</span><span class="s2">Deserialize</span><span class="s3">, </span><span class="s2">Clone</span><span class="s1">)]</span>
<a name="l67"><span class="ln">67 </span></a><span class="s0">pub struct </span><span class="s2">TomlEntityContainer </span><span class="s1">{</span>
<a name="l68"><span class="ln">68 </span></a> <span class="s0">pub </span><span class="s2">entities</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">TomlEntityDescription</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l69"><span class="ln">69 </span></a><span class="s1">}</span>
<a name="l70"><span class="ln">70 </span></a>
<a name="l71"><span class="ln">71 </span></a><span class="s0">pub struct </span><span class="s2">RuntimeState </span><span class="s1">{</span>
<a name="l72"><span class="ln">72 </span></a> <span class="s2">config_db</span><span class="s1">: </span><span class="s2">TomlEntityContainer</span><span class="s3">,</span>
<a name="l73"><span class="ln">73 </span></a> <span class="s2">mesh_cache</span><span class="s1">: </span><span class="s2">HashMap</span><span class="s1">&lt;</span><span class="s2">String</span><span class="s3">, </span><span class="s2">RawMesh</span><span class="s1">&gt;</span><span class="s3">,</span>
<a name="l74"><span class="ln">74 </span></a><span class="s1">}</span>
<a name="l75"><span class="ln">75 </span></a>
<a name="l76"><span class="ln">76 </span></a><span class="s0">impl </span><span class="s2">RuntimeState </span><span class="s1">{</span>
<a name="l77"><span class="ln">77 </span></a> <span class="s0">pub fn </span><span class="s2">new</span><span class="s1">() -&gt; </span><span class="s2">RuntimeState </span><span class="s1">{</span>
<a name="l78"><span class="ln">78 </span></a> <span class="s5">// TODO: Hook this file to the gui</span>
<a name="l79"><span class="ln">79 </span></a> <span class="s0">let mut </span><span class="s2">file </span><span class="s1">= </span><span class="s2">fs</span><span class="s1">::</span><span class="s2">File</span><span class="s1">::</span><span class="s2">open</span><span class="s1">(</span><span class="s4">&quot;./conf/entity_spawns.toml&quot;</span><span class="s1">).</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l80"><span class="ln">80 </span></a> <span class="s0">let mut </span><span class="s2">content </span><span class="s1">= </span><span class="s2">String</span><span class="s1">::</span><span class="s2">new</span><span class="s1">()</span><span class="s3">;</span>
<a name="l81"><span class="ln">81 </span></a> <span class="s2">file</span><span class="s1">.</span><span class="s2">read_to_string</span><span class="s1">(&amp;</span><span class="s0">mut </span><span class="s2">content</span><span class="s1">).</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l82"><span class="ln">82 </span></a>
<a name="l83"><span class="ln">83 </span></a> <span class="s5">// TODO: gracefully fail</span>
<a name="l84"><span class="ln">84 </span></a> <span class="s0">let mut </span><span class="s2">settings </span><span class="s1">: </span><span class="s2">TomlEntityContainer </span><span class="s1">= </span><span class="s2">toml</span><span class="s1">::</span><span class="s2">from_str</span><span class="s1">(</span><span class="s2">content</span><span class="s1">.</span><span class="s2">as_str</span><span class="s1">()).</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l85"><span class="ln">85 </span></a>
<a name="l86"><span class="ln">86 </span></a> <span class="s2">RuntimeState </span><span class="s1">{</span>
<a name="l87"><span class="ln">87 </span></a> <span class="s2">config_db</span><span class="s1">: </span><span class="s2">settings</span><span class="s3">,</span>
<a name="l88"><span class="ln">88 </span></a> <span class="s2">mesh_cache</span><span class="s1">: </span><span class="s2">Default</span><span class="s1">::</span><span class="s2">default</span><span class="s1">()</span><span class="s3">,</span>
<a name="l89"><span class="ln">89 </span></a> <span class="s1">}</span>
<a name="l90"><span class="ln">90 </span></a> <span class="s1">}</span>
<a name="l91"><span class="ln">91 </span></a>
<a name="l92"><span class="ln">92 </span></a> <span class="s0">pub fn </span><span class="s2">get_mesh</span><span class="s1">(&amp;</span><span class="s0">mut self</span><span class="s3">, </span><span class="s2">mesh</span><span class="s1">: &amp;</span><span class="s2">str</span><span class="s1">) -&gt; </span><span class="s2">Option</span><span class="s1">&lt;&amp;</span><span class="s2">RawMesh</span><span class="s1">&gt; {</span>
<a name="l93"><span class="ln">93 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">mesh_cache</span><span class="s1">.</span><span class="s2">get</span><span class="s1">(</span><span class="s2">mesh</span><span class="s1">)</span>
<a name="l94"><span class="ln">94 </span></a> <span class="s1">}</span>
<a name="l95"><span class="ln">95 </span></a>
<a name="l96"><span class="ln">96 </span></a> <span class="s0">pub fn </span><span class="s2">get_entities</span><span class="s1">(&amp;</span><span class="s0">mut self</span><span class="s1">) -&gt; </span><span class="s2">Vec</span><span class="s1">&lt;</span><span class="s2">TomlEntityDescription</span><span class="s1">&gt; {</span>
<a name="l97"><span class="ln">97 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">config_db</span><span class="s1">.</span><span class="s2">entities</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">()</span>
<a name="l98"><span class="ln">98 </span></a> <span class="s1">}</span>
<a name="l99"><span class="ln">99 </span></a>
<a name="l100"><span class="ln">100 </span></a> <span class="s0">pub fn </span><span class="s2">preload_meshes</span><span class="s1">(&amp;</span><span class="s0">mut self</span><span class="s3">, </span><span class="s2">resources_path</span><span class="s1">: </span><span class="s2">PathBuf</span><span class="s1">) {</span>
<a name="l101"><span class="ln">101 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">info</span><span class="s1">!(</span><span class="s4">&quot;Preloading meshes...&quot;</span><span class="s1">)</span><span class="s3">;</span>
<a name="l102"><span class="ln">102 </span></a>
<a name="l103"><span class="ln">103 </span></a> <span class="s0">let </span><span class="s2">paths </span><span class="s1">= </span><span class="s2">fs</span><span class="s1">::</span><span class="s2">read_dir</span><span class="s1">(</span><span class="s2">resources_path</span><span class="s1">).</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l104"><span class="ln">104 </span></a> <span class="s0">for </span><span class="s2">file </span><span class="s0">in </span><span class="s2">paths </span><span class="s1">{</span>
<a name="l105"><span class="ln">105 </span></a> <span class="s0">let </span><span class="s2">file </span><span class="s1">= </span><span class="s2">file</span><span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l106"><span class="ln">106 </span></a> <span class="s0">let </span><span class="s2">filepath </span><span class="s1">= </span><span class="s2">file</span><span class="s1">.</span><span class="s2">path</span><span class="s1">().</span><span class="s2">clone</span><span class="s1">()</span><span class="s3">;</span>
<a name="l107"><span class="ln">107 </span></a> <span class="s0">let </span><span class="s2">filename </span><span class="s1">= </span><span class="s2">String</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">file</span><span class="s1">.</span><span class="s2">file_name</span><span class="s1">().</span><span class="s2">to_str</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">())</span><span class="s3">;</span>
<a name="l108"><span class="ln">108 </span></a>
<a name="l109"><span class="ln">109 </span></a> <span class="s0">if </span><span class="s2">filename</span><span class="s1">.</span><span class="s2">ends_with</span><span class="s1">(</span><span class="s4">&quot;.obj&quot;</span><span class="s1">) {</span>
<a name="l110"><span class="ln">110 </span></a> <span class="s0">let </span><span class="s2">mesh </span><span class="s1">= </span><span class="s2">load_obj</span><span class="s1">(</span><span class="s2">filepath</span><span class="s1">.</span><span class="s2">to_str</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">()).</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l111"><span class="ln">111 </span></a> <span class="s0">self</span><span class="s1">.</span><span class="s2">mesh_cache</span><span class="s1">.</span><span class="s2">insert</span><span class="s1">(</span><span class="s2">filename</span><span class="s3">, </span><span class="s2">mesh</span><span class="s1">)</span><span class="s3">;</span>
<a name="l112"><span class="ln">112 </span></a> <span class="s1">}</span>
<a name="l113"><span class="ln">113 </span></a> <span class="s1">}</span>
<a name="l114"><span class="ln">114 </span></a> <span class="s1">}</span>
<a name="l115"><span class="ln">115 </span></a><span class="s1">}</span>
<a name="l116"><span class="ln">116 </span></a></pre>
</body>
</html>

View File

@@ -1,356 +0,0 @@
<html>
<head>
<title>system.rs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.s0 { color: #ed864a;}
.s1 { color: #ebebeb;}
.s2 { color: #ffffff;}
.s3 { color: #ed864a; font-weight: bold;}
.s4 { color: #33ccff; font-weight: bold;}
.s5 { color: #54b33e;}
.s6 { color: #7ec3e6;}
.ln { color: #999999; font-weight: normal; font-style: normal; }
</style>
</head>
<body bgcolor="#131314">
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#606060" >
<tr><td><center>
<font face="Arial, Helvetica" color="#000000">
system.rs</font>
</center></td></tr></table>
<pre><a name="l1"><span class="ln">1 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">f32</span><span class="s1">::</span><span class="s2">consts</span><span class="s1">::</span><span class="s2">PI</span><span class="s3">;</span>
<a name="l2"><span class="ln">2 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">path</span><span class="s1">::</span><span class="s2">PathBuf</span><span class="s3">;</span>
<a name="l3"><span class="ln">3 </span></a><span class="s0">use </span><span class="s2">std</span><span class="s1">::</span><span class="s2">time</span><span class="s1">::</span><span class="s2">Instant</span><span class="s3">;</span>
<a name="l4"><span class="ln">4 </span></a>
<a name="l5"><span class="ln">5 </span></a><span class="s0">use </span><span class="s2">cgmath</span><span class="s1">::{</span><span class="s2">Deg</span><span class="s3">, </span><span class="s2">Euler</span><span class="s3">, </span><span class="s2">Point3</span><span class="s3">, </span><span class="s2">Quaternion</span><span class="s3">, </span><span class="s2">Rad</span><span class="s1">}</span><span class="s3">;</span>
<a name="l6"><span class="ln">6 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l7"><span class="ln">7 </span></a><span class="s0">use </span><span class="s2">imgui</span><span class="s1">::{</span><span class="s2">Condition</span><span class="s3">, </span><span class="s2">FontSource</span><span class="s3">, </span><span class="s2">Ui</span><span class="s1">}</span><span class="s3">;</span>
<a name="l8"><span class="ln">8 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">systems</span><span class="s1">::</span><span class="s2">CommandBuffer</span><span class="s3">;</span>
<a name="l9"><span class="ln">9 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">world</span><span class="s1">::</span><span class="s2">SubWorld</span><span class="s3">;</span>
<a name="l10"><span class="ln">10 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::</span><span class="s2">IntoQuery</span><span class="s3">;</span>
<a name="l11"><span class="ln">11 </span></a><span class="s0">use </span><span class="s2">legion</span><span class="s1">::*</span><span class="s3">;</span>
<a name="l12"><span class="ln">12 </span></a><span class="s0">use </span><span class="s2">nalgebra</span><span class="s1">::</span><span class="s2">Quaternion </span><span class="s0">as </span><span class="s2">naQuaternion</span><span class="s3">;</span>
<a name="l13"><span class="ln">13 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">dynamics</span><span class="s1">::{</span>
<a name="l14"><span class="ln">14 </span></a> <span class="s2">IntegrationParameters</span><span class="s3">, </span><span class="s2">JointSet</span><span class="s3">, </span><span class="s2">MassProperties</span><span class="s3">, </span><span class="s2">RigidBodyBuilder</span><span class="s3">, </span><span class="s2">RigidBodySet</span><span class="s3">,</span>
<a name="l15"><span class="ln">15 </span></a><span class="s1">}</span><span class="s3">;</span>
<a name="l16"><span class="ln">16 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::{</span><span class="s2">BroadPhase</span><span class="s3">, </span><span class="s2">ColliderBuilder</span><span class="s3">, </span><span class="s2">ColliderSet</span><span class="s3">, </span><span class="s2">NarrowPhase</span><span class="s1">}</span><span class="s3">;</span>
<a name="l17"><span class="ln">17 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">na</span><span class="s1">::{</span><span class="s2">Isometry3</span><span class="s3">, </span><span class="s2">Vector</span><span class="s3">, </span><span class="s2">Vector3</span><span class="s1">}</span><span class="s3">;</span>
<a name="l18"><span class="ln">18 </span></a><span class="s0">use </span><span class="s2">rapier3d</span><span class="s1">::</span><span class="s2">pipeline</span><span class="s1">::{</span><span class="s2">ChannelEventCollector</span><span class="s3">, </span><span class="s2">PhysicsPipeline</span><span class="s1">}</span><span class="s3">;</span>
<a name="l19"><span class="ln">19 </span></a>
<a name="l20"><span class="ln">20 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">camera</span><span class="s1">::{</span><span class="s2">Camera</span><span class="s3">, </span><span class="s2">CameraController</span><span class="s1">}</span><span class="s3">;</span>
<a name="l21"><span class="ln">21 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">components</span><span class="s1">::{</span><span class="s2">Collider</span><span class="s3">, </span><span class="s2">ImguiWindow</span><span class="s3">, </span><span class="s2">LoopState</span><span class="s3">, </span><span class="s2">Mesh</span><span class="s3">, </span><span class="s2">Physics</span><span class="s3">, </span><span class="s2">Position</span><span class="s1">}</span><span class="s3">;</span>
<a name="l22"><span class="ln">22 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">geometry</span><span class="s3">;</span>
<a name="l23"><span class="ln">23 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">physics</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">PhysicsState</span><span class="s3">;</span>
<a name="l24"><span class="ln">24 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">render</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">RenderState</span><span class="s3">;</span>
<a name="l25"><span class="ln">25 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">render</span><span class="s1">::</span><span class="s2">system</span><span class="s1">::{</span><span class="s2">ImguiGenericOutputLine</span><span class="s3">, </span><span class="s2">ImguiPerformanceProfilerLine</span><span class="s1">}</span><span class="s3">;</span>
<a name="l26"><span class="ln">26 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">runtime</span><span class="s1">::</span><span class="s2">state</span><span class="s1">::</span><span class="s2">RuntimeState</span><span class="s3">;</span>
<a name="l27"><span class="ln">27 </span></a><span class="s0">use crate</span><span class="s1">::</span><span class="s2">geometry</span><span class="s1">::</span><span class="s2">RawMesh</span><span class="s3">;</span>
<a name="l28"><span class="ln">28 </span></a>
<a name="l29"><span class="ln">29 </span></a><span class="s0">pub fn </span><span class="s2">quad_color</span><span class="s1">(</span><span class="s2">color</span><span class="s1">: [</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]) -&gt; [[</span><span class="s2">f32</span><span class="s3">; </span><span class="s4">4</span><span class="s1">]</span><span class="s3">; </span><span class="s4">4</span><span class="s1">] {</span>
<a name="l30"><span class="ln">30 </span></a> <span class="s1">[</span><span class="s2">color</span><span class="s3">, </span><span class="s2">color</span><span class="s3">, </span><span class="s2">color</span><span class="s3">, </span><span class="s2">color</span><span class="s1">]</span>
<a name="l31"><span class="ln">31 </span></a><span class="s1">}</span>
<a name="l32"><span class="ln">32 </span></a>
<a name="l33"><span class="ln">33 </span></a><span class="s1">#[</span><span class="s2">system</span><span class="s1">]</span>
<a name="l34"><span class="ln">34 </span></a><span class="s1">#[</span><span class="s2">write_component</span><span class="s1">(</span><span class="s2">Mesh</span><span class="s1">)]</span>
<a name="l35"><span class="ln">35 </span></a><span class="s0">pub fn </span><span class="s2">runtime_load</span><span class="s1">(</span>
<a name="l36"><span class="ln">36 </span></a> <span class="s2">cmd</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">CommandBuffer</span><span class="s3">,</span>
<a name="l37"><span class="ln">37 </span></a> <span class="s2">world</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">SubWorld</span><span class="s3">,</span>
<a name="l38"><span class="ln">38 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">runtime_state</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">RuntimeState</span><span class="s3">,</span>
<a name="l39"><span class="ln">39 </span></a><span class="s1">) {</span>
<a name="l40"><span class="ln">40 </span></a> <span class="s2">runtime_state</span><span class="s1">.</span><span class="s2">preload_meshes</span><span class="s1">(</span><span class="s2">PathBuf</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s5">&quot;./resources&quot;</span><span class="s1">))</span><span class="s3">;</span>
<a name="l41"><span class="ln">41 </span></a>
<a name="l42"><span class="ln">42 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span><span class="s2">ImguiWindow </span><span class="s1">{</span>
<a name="l43"><span class="ln">43 </span></a> <span class="s6">// a window that does everything for the performance profiler</span>
<a name="l44"><span class="ln">44 </span></a> <span class="s2">window</span><span class="s1">: || {</span>
<a name="l45"><span class="ln">45 </span></a> <span class="s2">imgui</span><span class="s1">::</span><span class="s2">Window</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">im_str</span><span class="s1">!(</span><span class="s5">&quot;Performance Profiler&quot;</span><span class="s1">))</span>
<a name="l46"><span class="ln">46 </span></a> <span class="s1">.</span><span class="s2">size</span><span class="s1">([</span><span class="s4">400</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">200</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">Condition</span><span class="s1">::</span><span class="s2">FirstUseEver</span><span class="s1">)</span>
<a name="l47"><span class="ln">47 </span></a> <span class="s1">.</span><span class="s2">position</span><span class="s1">([</span><span class="s4">10</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">10</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">Condition</span><span class="s1">::</span><span class="s2">FirstUseEver</span><span class="s1">)</span>
<a name="l48"><span class="ln">48 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l49"><span class="ln">49 </span></a> <span class="s2">func</span><span class="s1">: |</span><span class="s2">ui</span><span class="s1">: &amp;</span><span class="s2">Ui</span><span class="s3">, </span><span class="s2">a</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;&amp;</span><span class="s2">ImguiPerformanceProfilerLine</span><span class="s1">&gt;| {</span>
<a name="l50"><span class="ln">50 </span></a> <span class="s6">// ui.text(im_str!(&quot;Performance Graph&quot;));</span>
<a name="l51"><span class="ln">51 </span></a>
<a name="l52"><span class="ln">52 </span></a> <span class="s0">let </span><span class="s2">draw_list </span><span class="s1">= </span><span class="s2">ui</span><span class="s1">.</span><span class="s2">get_window_draw_list</span><span class="s1">()</span><span class="s3">;</span>
<a name="l53"><span class="ln">53 </span></a> <span class="s0">let </span><span class="s2">top_left </span><span class="s1">= </span><span class="s2">ui</span><span class="s1">.</span><span class="s2">cursor_screen_pos</span><span class="s1">()</span><span class="s3">;</span>
<a name="l54"><span class="ln">54 </span></a> <span class="s0">let </span><span class="s2">region_size </span><span class="s1">= </span><span class="s2">ui</span><span class="s1">.</span><span class="s2">content_region_avail</span><span class="s1">()</span><span class="s3">;</span>
<a name="l55"><span class="ln">55 </span></a>
<a name="l56"><span class="ln">56 </span></a> <span class="s0">let </span><span class="s2">region_size </span><span class="s1">= [</span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">0</span><span class="s1">] * </span><span class="s4">0</span><span class="s1">.</span><span class="s4">80</span><span class="s3">, </span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]]</span><span class="s3">;</span>
<a name="l57"><span class="ln">57 </span></a>
<a name="l58"><span class="ln">58 </span></a> <span class="s6">// Fill rect</span>
<a name="l59"><span class="ln">59 </span></a> <span class="s0">let </span><span class="s2">qcolor </span><span class="s1">= </span><span class="s2">quad_color</span><span class="s1">([</span><span class="s4">0</span><span class="s1">.</span><span class="s4">5</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">5</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">1</span><span class="s1">])</span><span class="s3">;</span>
<a name="l60"><span class="ln">60 </span></a> <span class="s2">draw_list</span><span class="s1">.</span><span class="s2">add_rect_filled_multicolor</span><span class="s1">(</span>
<a name="l61"><span class="ln">61 </span></a> <span class="s2">top_left</span><span class="s3">,</span>
<a name="l62"><span class="ln">62 </span></a> <span class="s1">[</span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">0</span><span class="s1">] + (</span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">0</span><span class="s1">])</span><span class="s3">, </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] + </span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]]</span><span class="s3">,</span>
<a name="l63"><span class="ln">63 </span></a> <span class="s2">qcolor</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">,</span>
<a name="l64"><span class="ln">64 </span></a> <span class="s2">qcolor</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]</span><span class="s3">,</span>
<a name="l65"><span class="ln">65 </span></a> <span class="s2">qcolor</span><span class="s1">[</span><span class="s4">2</span><span class="s1">]</span><span class="s3">,</span>
<a name="l66"><span class="ln">66 </span></a> <span class="s2">qcolor</span><span class="s1">[</span><span class="s4">3</span><span class="s1">]</span><span class="s3">,</span>
<a name="l67"><span class="ln">67 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l68"><span class="ln">68 </span></a>
<a name="l69"><span class="ln">69 </span></a> <span class="s0">for </span><span class="s2">profiler_line </span><span class="s0">in </span><span class="s2">a </span><span class="s1">{</span>
<a name="l70"><span class="ln">70 </span></a> <span class="s0">let </span><span class="s2">x_scale </span><span class="s1">= (</span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]) / </span><span class="s4">400</span><span class="s1">.</span><span class="s4">0</span><span class="s3">;</span>
<a name="l71"><span class="ln">71 </span></a> <span class="s0">let </span><span class="s2">y_scale </span><span class="s1">= </span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] / </span><span class="s2">profiler_line</span><span class="s1">.</span><span class="s2">scale_max</span><span class="s3">;</span>
<a name="l72"><span class="ln">72 </span></a> <span class="s2">profiler_line</span>
<a name="l73"><span class="ln">73 </span></a> <span class="s1">.</span><span class="s2">iter_data_from_head</span><span class="s1">()</span>
<a name="l74"><span class="ln">74 </span></a> <span class="s1">.</span><span class="s2">fold</span><span class="s1">((</span><span class="s4">0</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0f32</span><span class="s1">)</span><span class="s3">, </span><span class="s1">|</span><span class="s2">accum</span><span class="s3">, </span><span class="s1">&amp;</span><span class="s2">fps_val</span><span class="s1">| {</span>
<a name="l75"><span class="ln">75 </span></a> <span class="s0">let </span><span class="s2">x1 </span><span class="s1">= </span><span class="s2">accum</span><span class="s1">.</span><span class="s4">0 </span><span class="s0">as </span><span class="s2">f32 </span><span class="s1">* </span><span class="s2">x_scale </span><span class="s1">+ </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">;</span>
<a name="l76"><span class="ln">76 </span></a> <span class="s0">let </span><span class="s2">y1 </span><span class="s1">= </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] + </span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] - </span><span class="s2">accum</span><span class="s1">.</span><span class="s4">1 </span><span class="s1">* </span><span class="s2">y_scale</span><span class="s3">;</span>
<a name="l77"><span class="ln">77 </span></a> <span class="s0">let </span><span class="s2">x2 </span><span class="s1">= (</span><span class="s2">accum</span><span class="s1">.</span><span class="s4">0 </span><span class="s0">as </span><span class="s2">f32 </span><span class="s1">+ </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">) * </span><span class="s2">x_scale </span><span class="s1">+ </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">0</span><span class="s1">]</span><span class="s3">;</span>
<a name="l78"><span class="ln">78 </span></a> <span class="s0">let </span><span class="s2">y2 </span><span class="s1">= </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] + </span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] - </span><span class="s2">fps_val </span><span class="s1">* </span><span class="s2">y_scale</span><span class="s3">;</span>
<a name="l79"><span class="ln">79 </span></a> <span class="s0">let </span><span class="s2">p1 </span><span class="s1">= [</span><span class="s2">x1</span><span class="s3">, </span><span class="s2">y1</span><span class="s1">]</span><span class="s3">;</span>
<a name="l80"><span class="ln">80 </span></a> <span class="s0">let </span><span class="s2">p2 </span><span class="s1">= [</span><span class="s2">x2</span><span class="s3">, </span><span class="s2">y2</span><span class="s1">]</span><span class="s3">;</span>
<a name="l81"><span class="ln">81 </span></a> <span class="s2">draw_list</span>
<a name="l82"><span class="ln">82 </span></a> <span class="s1">.</span><span class="s2">add_line</span><span class="s1">(</span><span class="s2">p1</span><span class="s3">, </span><span class="s2">p2</span><span class="s3">, </span><span class="s1">[</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">8</span><span class="s1">])</span>
<a name="l83"><span class="ln">83 </span></a> <span class="s1">.</span><span class="s2">thickness</span><span class="s1">(</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">)</span>
<a name="l84"><span class="ln">84 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l85"><span class="ln">85 </span></a> <span class="s1">(</span><span class="s2">accum</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">+ </span><span class="s4">1</span><span class="s3">, </span><span class="s2">fps_val</span><span class="s1">)</span>
<a name="l86"><span class="ln">86 </span></a> <span class="s1">})</span><span class="s3">;</span>
<a name="l87"><span class="ln">87 </span></a>
<a name="l88"><span class="ln">88 </span></a> <span class="s0">let </span><span class="s2">text_x </span><span class="s1">= (</span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">0</span><span class="s1">] + </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">0</span><span class="s1">])</span><span class="s3">;</span>
<a name="l89"><span class="ln">89 </span></a> <span class="s0">let </span><span class="s2">text_y </span><span class="s1">= </span><span class="s2">top_left</span><span class="s1">[</span><span class="s4">1</span><span class="s1">] + </span><span class="s2">region_size</span><span class="s1">[</span><span class="s4">1</span><span class="s1">]</span>
<a name="l90"><span class="ln">90 </span></a> <span class="s1">- </span><span class="s2">profiler_line</span><span class="s1">.</span><span class="s2">current_average_label</span><span class="s1">().</span><span class="s4">0 </span><span class="s1">* </span><span class="s2">y_scale</span><span class="s3">;</span>
<a name="l91"><span class="ln">91 </span></a> <span class="s2">draw_list</span><span class="s1">.</span><span class="s2">add_text</span><span class="s1">(</span>
<a name="l92"><span class="ln">92 </span></a> <span class="s1">[</span><span class="s2">text_x</span><span class="s3">, </span><span class="s2">text_y</span><span class="s1">]</span><span class="s3">,</span>
<a name="l93"><span class="ln">93 </span></a> <span class="s1">[</span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">0</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">,</span>
<a name="l94"><span class="ln">94 </span></a> <span class="s2">format</span><span class="s1">!(</span>
<a name="l95"><span class="ln">95 </span></a> <span class="s5">&quot;{} {:.0}&quot;</span><span class="s3">,</span>
<a name="l96"><span class="ln">96 </span></a> <span class="s2">profiler_line</span><span class="s1">.</span><span class="s2">current_average_label</span><span class="s1">().</span><span class="s4">1</span><span class="s3">,</span>
<a name="l97"><span class="ln">97 </span></a> <span class="s4">1</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">/ </span><span class="s2">profiler_line</span><span class="s1">.</span><span class="s2">current_average_label</span><span class="s1">().</span><span class="s4">0</span>
<a name="l98"><span class="ln">98 </span></a> <span class="s1">)</span><span class="s3">,</span>
<a name="l99"><span class="ln">99 </span></a> <span class="s1">)</span><span class="s3">;</span>
<a name="l100"><span class="ln">100 </span></a> <span class="s1">}</span>
<a name="l101"><span class="ln">101 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l102"><span class="ln">102 </span></a> <span class="s1">}</span><span class="s3">,</span><span class="s1">))</span><span class="s3">;</span>
<a name="l103"><span class="ln">103 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span><span class="s2">ImguiPerformanceProfilerLine</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s5">&quot;RenderFPS&quot;</span><span class="s1">.</span><span class="s2">to_string</span><span class="s1">())</span><span class="s3">,</span><span class="s1">))</span><span class="s3">;</span>
<a name="l104"><span class="ln">104 </span></a>
<a name="l105"><span class="ln">105 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span><span class="s2">ImguiWindow </span><span class="s1">{</span>
<a name="l106"><span class="ln">106 </span></a> <span class="s6">// a window that does everything for the performance profiler</span>
<a name="l107"><span class="ln">107 </span></a> <span class="s2">window</span><span class="s1">: || {</span>
<a name="l108"><span class="ln">108 </span></a> <span class="s2">imgui</span><span class="s1">::</span><span class="s2">Window</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">im_str</span><span class="s1">!(</span><span class="s5">&quot;Generic Output&quot;</span><span class="s1">))</span>
<a name="l109"><span class="ln">109 </span></a> <span class="s1">.</span><span class="s2">size</span><span class="s1">([</span><span class="s4">400</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">500</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">Condition</span><span class="s1">::</span><span class="s2">FirstUseEver</span><span class="s1">)</span>
<a name="l110"><span class="ln">110 </span></a> <span class="s1">.</span><span class="s2">position</span><span class="s1">([</span><span class="s4">50</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">250</span><span class="s1">.</span><span class="s4">0</span><span class="s1">]</span><span class="s3">, </span><span class="s2">Condition</span><span class="s1">::</span><span class="s2">FirstUseEver</span><span class="s1">)</span>
<a name="l111"><span class="ln">111 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l112"><span class="ln">112 </span></a> <span class="s2">func</span><span class="s1">: |</span><span class="s2">ui</span><span class="s1">: &amp;</span><span class="s2">Ui</span><span class="s3">, </span><span class="s2">a</span><span class="s1">: </span><span class="s2">Vec</span><span class="s1">&lt;&amp;</span><span class="s2">ImguiGenericOutputLine</span><span class="s1">&gt;| {</span>
<a name="l113"><span class="ln">113 </span></a> <span class="s0">for </span><span class="s2">label </span><span class="s0">in </span><span class="s2">a </span><span class="s1">{</span>
<a name="l114"><span class="ln">114 </span></a> <span class="s2">ui</span><span class="s1">.</span><span class="s2">text</span><span class="s1">(</span><span class="s2">im_str</span><span class="s1">!(</span><span class="s5">&quot;{}&quot;</span><span class="s3">, </span><span class="s2">label</span><span class="s1">.</span><span class="s2">label</span><span class="s1">))</span><span class="s3">;</span>
<a name="l115"><span class="ln">115 </span></a> <span class="s1">}</span>
<a name="l116"><span class="ln">116 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l117"><span class="ln">117 </span></a> <span class="s1">}</span><span class="s3">,</span><span class="s1">))</span><span class="s3">;</span>
<a name="l118"><span class="ln">118 </span></a><span class="s1">}</span>
<a name="l119"><span class="ln">119 </span></a>
<a name="l120"><span class="ln">120 </span></a><span class="s1">#[</span><span class="s2">system</span><span class="s1">]</span>
<a name="l121"><span class="ln">121 </span></a><span class="s1">#[</span><span class="s2">write_component</span><span class="s1">(</span><span class="s2">Mesh</span><span class="s1">)]</span>
<a name="l122"><span class="ln">122 </span></a><span class="s0">pub fn </span><span class="s2">runtime_spawn</span><span class="s1">(</span>
<a name="l123"><span class="ln">123 </span></a> <span class="s2">cmd</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">CommandBuffer</span><span class="s3">,</span>
<a name="l124"><span class="ln">124 </span></a> <span class="s2">world</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">SubWorld</span><span class="s3">,</span>
<a name="l125"><span class="ln">125 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">runtime_state</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">RuntimeState</span><span class="s3">,</span>
<a name="l126"><span class="ln">126 </span></a> <span class="s1">#[</span><span class="s2">resource</span><span class="s1">] </span><span class="s2">renderer</span><span class="s1">: &amp;</span><span class="s0">mut </span><span class="s2">RenderState</span><span class="s3">,</span>
<a name="l127"><span class="ln">127 </span></a><span class="s1">) {</span>
<a name="l128"><span class="ln">128 </span></a> <span class="s0">for </span><span class="s2">entity </span><span class="s0">in </span><span class="s1">&amp;</span><span class="s2">runtime_state</span><span class="s1">.</span><span class="s2">get_entities</span><span class="s1">() {</span>
<a name="l129"><span class="ln">129 </span></a> <span class="s0">match </span><span class="s2">entity</span><span class="s1">.</span><span class="s2">type_name</span><span class="s1">.</span><span class="s2">as_ref</span><span class="s1">() {</span>
<a name="l130"><span class="ln">130 </span></a> <span class="s5">&quot;Sprite&quot; </span><span class="s1">=&gt; {</span>
<a name="l131"><span class="ln">131 </span></a>
<a name="l132"><span class="ln">132 </span></a>
<a name="l133"><span class="ln">133 </span></a>
<a name="l134"><span class="ln">134 </span></a> <span class="s0">let </span><span class="s2">mesh_name </span><span class="s1">= </span><span class="s2">entity</span><span class="s1">.</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l135"><span class="ln">135 </span></a> <span class="s0">let </span><span class="s2">raw_mesh </span><span class="s1">= </span><span class="s0">match </span><span class="s2">runtime_state</span><span class="s1">.</span><span class="s2">get_mesh</span><span class="s1">(</span><span class="s2">mesh_name</span><span class="s1">.</span><span class="s2">as_str</span><span class="s1">()) {</span>
<a name="l136"><span class="ln">136 </span></a> <span class="s2">None </span><span class="s1">=&gt; {</span>
<a name="l137"><span class="ln">137 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">warn</span><span class="s1">!(</span><span class="s5">&quot;Skipping entity with invalid mesh file {:?} &quot;</span><span class="s3">, </span><span class="s2">mesh_name</span><span class="s1">)</span><span class="s3">;</span>
<a name="l138"><span class="ln">138 </span></a> <span class="s0">continue</span><span class="s3">;</span>
<a name="l139"><span class="ln">139 </span></a> <span class="s1">}</span>
<a name="l140"><span class="ln">140 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">mesh</span><span class="s1">) =&gt; </span><span class="s2">mesh</span><span class="s3">,</span>
<a name="l141"><span class="ln">141 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l142"><span class="ln">142 </span></a>
<a name="l143"><span class="ln">143 </span></a> <span class="s0">let </span><span class="s2">position </span><span class="s1">= </span><span class="s2">Position</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">entity</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">())</span><span class="s3">;</span>
<a name="l144"><span class="ln">144 </span></a>
<a name="l145"><span class="ln">145 </span></a> <span class="s0">let mut </span><span class="s2">static_body </span><span class="s1">= </span><span class="s2">RigidBodyBuilder</span><span class="s1">::</span><span class="s2">new_static</span><span class="s1">()</span>
<a name="l146"><span class="ln">146 </span></a> <span class="s1">.</span><span class="s2">position</span><span class="s1">(</span><span class="s2">Isometry3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span>
<a name="l147"><span class="ln">147 </span></a> <span class="s2">Vector3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">position</span><span class="s1">.</span><span class="s2">x</span><span class="s3">, </span><span class="s2">position</span><span class="s1">.</span><span class="s2">y</span><span class="s3">, </span><span class="s2">position</span><span class="s1">.</span><span class="s2">z</span><span class="s1">)</span><span class="s3">,</span>
<a name="l148"><span class="ln">148 </span></a> <span class="s2">Vector</span><span class="s1">::</span><span class="s2">y</span><span class="s1">()</span><span class="s3">,</span>
<a name="l149"><span class="ln">149 </span></a> <span class="s1">))</span>
<a name="l150"><span class="ln">150 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l151"><span class="ln">151 </span></a>
<a name="l152"><span class="ln">152 </span></a> <span class="s0">let </span><span class="s2">mesh_collider </span><span class="s1">= </span><span class="s2">ColliderBuilder</span><span class="s1">::</span><span class="s2">trimesh</span><span class="s1">(</span>
<a name="l153"><span class="ln">153 </span></a> <span class="s2">raw_mesh</span><span class="s1">.</span><span class="s2">vertices</span><span class="s1">.</span><span class="s2">iter</span><span class="s1">().</span><span class="s2">map</span><span class="s1">(|</span><span class="s2">v</span><span class="s1">| </span><span class="s2">v</span><span class="s1">.</span><span class="s2">position</span><span class="s1">()).</span><span class="s2">collect</span><span class="s1">()</span><span class="s3">,</span>
<a name="l154"><span class="ln">154 </span></a> <span class="s2">raw_mesh</span><span class="s1">.</span><span class="s2">indices</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">()</span><span class="s3">,</span>
<a name="l155"><span class="ln">155 </span></a> <span class="s1">)</span>
<a name="l156"><span class="ln">156 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l157"><span class="ln">157 </span></a>
<a name="l158"><span class="ln">158 </span></a> <span class="s0">let </span><span class="s2">gpu_mesh_buffer </span><span class="s1">= </span><span class="s2">renderer</span>
<a name="l159"><span class="ln">159 </span></a> <span class="s1">.</span><span class="s2">upload_mesh_to_buffer</span><span class="s1">(</span>
<a name="l160"><span class="ln">160 </span></a> <span class="s2">raw_mesh</span><span class="s3">,</span>
<a name="l161"><span class="ln">161 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">Color </span><span class="s1">{</span>
<a name="l162"><span class="ln">162 </span></a> <span class="s2">r</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l163"><span class="ln">163 </span></a> <span class="s2">g</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">7</span><span class="s3">,</span>
<a name="l164"><span class="ln">164 </span></a> <span class="s2">b</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">3</span><span class="s3">,</span>
<a name="l165"><span class="ln">165 </span></a> <span class="s2">a</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l166"><span class="ln">166 </span></a> <span class="s1">})</span><span class="s3">,</span>
<a name="l167"><span class="ln">167 </span></a> <span class="s1">)</span>
<a name="l168"><span class="ln">168 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l169"><span class="ln">169 </span></a>
<a name="l170"><span class="ln">170 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span>
<a name="l171"><span class="ln">171 </span></a> <span class="s2">position</span><span class="s3">,</span>
<a name="l172"><span class="ln">172 </span></a> <span class="s2">gpu_mesh_buffer</span><span class="s3">,</span>
<a name="l173"><span class="ln">173 </span></a> <span class="s2">Physics </span><span class="s1">{</span>
<a name="l174"><span class="ln">174 </span></a> <span class="s2">rigid_body</span><span class="s1">: </span><span class="s2">static_body</span><span class="s3">,</span>
<a name="l175"><span class="ln">175 </span></a> <span class="s2">rigid_body_handle</span><span class="s1">: </span><span class="s2">None</span><span class="s3">,</span>
<a name="l176"><span class="ln">176 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l177"><span class="ln">177 </span></a> <span class="s2">Collider </span><span class="s1">{</span>
<a name="l178"><span class="ln">178 </span></a> <span class="s2">collider</span><span class="s1">: </span><span class="s2">mesh_collider</span><span class="s3">,</span>
<a name="l179"><span class="ln">179 </span></a> <span class="s2">collider_handle</span><span class="s1">: </span><span class="s2">None</span><span class="s3">,</span>
<a name="l180"><span class="ln">180 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l181"><span class="ln">181 </span></a> <span class="s1">))</span><span class="s3">;</span>
<a name="l182"><span class="ln">182 </span></a> <span class="s1">}</span>
<a name="l183"><span class="ln">183 </span></a> <span class="s5">&quot;PhysicsEntity&quot; </span><span class="s1">=&gt; {</span>
<a name="l184"><span class="ln">184 </span></a> <span class="s0">let </span><span class="s2">mesh_name </span><span class="s1">= </span><span class="s2">entity</span><span class="s1">.</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">as_ref</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l185"><span class="ln">185 </span></a> <span class="s0">let </span><span class="s2">raw_mesh </span><span class="s1">= </span><span class="s0">match </span><span class="s2">runtime_state</span><span class="s1">.</span><span class="s2">get_mesh</span><span class="s1">(</span><span class="s2">mesh_name</span><span class="s1">.</span><span class="s2">as_str</span><span class="s1">()) {</span>
<a name="l186"><span class="ln">186 </span></a> <span class="s2">None </span><span class="s1">=&gt; {</span>
<a name="l187"><span class="ln">187 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">warn</span><span class="s1">!(</span><span class="s5">&quot;Skipping entity with invalid mesh file {:?} &quot;</span><span class="s3">, </span><span class="s2">mesh_name</span><span class="s1">)</span><span class="s3">;</span>
<a name="l188"><span class="ln">188 </span></a> <span class="s0">continue</span><span class="s3">;</span>
<a name="l189"><span class="ln">189 </span></a> <span class="s1">}</span>
<a name="l190"><span class="ln">190 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">mesh</span><span class="s1">) =&gt; </span><span class="s2">mesh</span><span class="s3">,</span>
<a name="l191"><span class="ln">191 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l192"><span class="ln">192 </span></a>
<a name="l193"><span class="ln">193 </span></a> <span class="s0">let </span><span class="s2">collider </span><span class="s1">= </span><span class="s2">ColliderBuilder</span><span class="s1">::</span><span class="s2">trimesh</span><span class="s1">(</span>
<a name="l194"><span class="ln">194 </span></a> <span class="s2">raw_mesh</span><span class="s1">.</span><span class="s2">vertices</span><span class="s1">.</span><span class="s2">iter</span><span class="s1">().</span><span class="s2">map</span><span class="s1">(|</span><span class="s2">v</span><span class="s1">| </span><span class="s2">v</span><span class="s1">.</span><span class="s2">position</span><span class="s1">()).</span><span class="s2">collect</span><span class="s1">()</span><span class="s3">,</span>
<a name="l195"><span class="ln">195 </span></a> <span class="s2">raw_mesh</span><span class="s1">.</span><span class="s2">indices</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">()</span><span class="s3">,</span>
<a name="l196"><span class="ln">196 </span></a> <span class="s1">)</span>
<a name="l197"><span class="ln">197 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l198"><span class="ln">198 </span></a>
<a name="l199"><span class="ln">199 </span></a> <span class="s0">let </span><span class="s2">collider </span><span class="s1">= </span><span class="s2">ColliderBuilder</span><span class="s1">::</span><span class="s2">capsule_y</span><span class="s1">(</span><span class="s4">2</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">).</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l200"><span class="ln">200 </span></a>
<a name="l201"><span class="ln">201 </span></a> <span class="s0">let </span><span class="s2">gpu_mesh_buffer </span><span class="s1">= </span><span class="s2">renderer</span>
<a name="l202"><span class="ln">202 </span></a> <span class="s1">.</span><span class="s2">upload_mesh_to_buffer</span><span class="s1">(</span>
<a name="l203"><span class="ln">203 </span></a> <span class="s2">raw_mesh</span><span class="s3">,</span>
<a name="l204"><span class="ln">204 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">Color </span><span class="s1">{</span>
<a name="l205"><span class="ln">205 </span></a> <span class="s2">r</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l206"><span class="ln">206 </span></a> <span class="s2">g</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">7</span><span class="s3">,</span>
<a name="l207"><span class="ln">207 </span></a> <span class="s2">b</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">3</span><span class="s3">,</span>
<a name="l208"><span class="ln">208 </span></a> <span class="s2">a</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l209"><span class="ln">209 </span></a> <span class="s1">})</span><span class="s3">,</span>
<a name="l210"><span class="ln">210 </span></a> <span class="s1">)</span>
<a name="l211"><span class="ln">211 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l212"><span class="ln">212 </span></a>
<a name="l213"><span class="ln">213 </span></a> <span class="s0">let </span><span class="s2">position </span><span class="s1">= </span><span class="s2">Position</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">entity</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">())</span><span class="s3">;</span>
<a name="l214"><span class="ln">214 </span></a>
<a name="l215"><span class="ln">215 </span></a> <span class="s0">let mut </span><span class="s2">dynamic_body </span><span class="s1">= </span><span class="s2">RigidBodyBuilder</span><span class="s1">::</span><span class="s2">new_dynamic</span><span class="s1">()</span>
<a name="l216"><span class="ln">216 </span></a> <span class="s1">.</span><span class="s2">can_sleep</span><span class="s1">(</span><span class="s0">false</span><span class="s1">)</span>
<a name="l217"><span class="ln">217 </span></a> <span class="s1">.</span><span class="s2">mass</span><span class="s1">(</span><span class="s4">100</span><span class="s1">.</span><span class="s4">0</span><span class="s1">)</span>
<a name="l218"><span class="ln">218 </span></a> <span class="s1">.</span><span class="s2">translation</span><span class="s1">(</span><span class="s2">position</span><span class="s1">.</span><span class="s2">x</span><span class="s3">, </span><span class="s2">position</span><span class="s1">.</span><span class="s2">y</span><span class="s3">, </span><span class="s2">position</span><span class="s1">.</span><span class="s2">z</span><span class="s1">)</span>
<a name="l219"><span class="ln">219 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l220"><span class="ln">220 </span></a>
<a name="l221"><span class="ln">221 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span>
<a name="l222"><span class="ln">222 </span></a> <span class="s2">position</span><span class="s3">,</span>
<a name="l223"><span class="ln">223 </span></a> <span class="s2">gpu_mesh_buffer</span><span class="s3">,</span>
<a name="l224"><span class="ln">224 </span></a> <span class="s2">Physics </span><span class="s1">{</span>
<a name="l225"><span class="ln">225 </span></a> <span class="s2">rigid_body</span><span class="s1">: </span><span class="s2">dynamic_body</span><span class="s3">,</span>
<a name="l226"><span class="ln">226 </span></a> <span class="s2">rigid_body_handle</span><span class="s1">: </span><span class="s2">None</span><span class="s3">,</span>
<a name="l227"><span class="ln">227 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l228"><span class="ln">228 </span></a> <span class="s2">Collider </span><span class="s1">{</span>
<a name="l229"><span class="ln">229 </span></a> <span class="s2">collider</span><span class="s1">: </span><span class="s2">collider</span><span class="s3">,</span>
<a name="l230"><span class="ln">230 </span></a> <span class="s2">collider_handle</span><span class="s1">: </span><span class="s2">None</span><span class="s3">,</span>
<a name="l231"><span class="ln">231 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l232"><span class="ln">232 </span></a> <span class="s2">ImguiGenericOutputLine</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s5">&quot;wahoo! from a physics entity&quot;</span><span class="s1">.</span><span class="s2">to_string</span><span class="s1">())</span><span class="s3">,</span>
<a name="l233"><span class="ln">233 </span></a> <span class="s1">))</span><span class="s3">;</span>
<a name="l234"><span class="ln">234 </span></a> <span class="s1">}</span>
<a name="l235"><span class="ln">235 </span></a> <span class="s5">&quot;StaticMesh&quot; </span><span class="s1">=&gt; {</span>
<a name="l236"><span class="ln">236 </span></a> <span class="s0">let </span><span class="s2">mesh_name </span><span class="s1">= </span><span class="s2">entity</span><span class="s1">.</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l237"><span class="ln">237 </span></a> <span class="s0">let </span><span class="s2">raw_mesh </span><span class="s1">= </span><span class="s0">match </span><span class="s2">runtime_state</span><span class="s1">.</span><span class="s2">get_mesh</span><span class="s1">(</span><span class="s2">mesh_name</span><span class="s1">.</span><span class="s2">as_str</span><span class="s1">()) {</span>
<a name="l238"><span class="ln">238 </span></a> <span class="s2">None </span><span class="s1">=&gt; {</span>
<a name="l239"><span class="ln">239 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">warn</span><span class="s1">!(</span><span class="s5">&quot;Skipping entity with invalid mesh file {:?} &quot;</span><span class="s3">, </span><span class="s2">mesh_name</span><span class="s1">)</span><span class="s3">;</span>
<a name="l240"><span class="ln">240 </span></a> <span class="s0">continue</span><span class="s3">;</span>
<a name="l241"><span class="ln">241 </span></a> <span class="s1">}</span>
<a name="l242"><span class="ln">242 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">mesh</span><span class="s1">) =&gt; </span><span class="s2">mesh</span><span class="s3">,</span>
<a name="l243"><span class="ln">243 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l244"><span class="ln">244 </span></a>
<a name="l245"><span class="ln">245 </span></a> <span class="s0">let </span><span class="s2">position </span><span class="s1">= </span><span class="s2">Position</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">entity</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">())</span><span class="s3">;</span>
<a name="l246"><span class="ln">246 </span></a>
<a name="l247"><span class="ln">247 </span></a> <span class="s0">let mut </span><span class="s2">static_body </span><span class="s1">= </span><span class="s2">RigidBodyBuilder</span><span class="s1">::</span><span class="s2">new_static</span><span class="s1">()</span>
<a name="l248"><span class="ln">248 </span></a> <span class="s1">.</span><span class="s2">position</span><span class="s1">(</span><span class="s2">Isometry3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span>
<a name="l249"><span class="ln">249 </span></a> <span class="s2">Vector3</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s2">position</span><span class="s1">.</span><span class="s2">x</span><span class="s3">, </span><span class="s2">position</span><span class="s1">.</span><span class="s2">y</span><span class="s3">, </span><span class="s2">position</span><span class="s1">.</span><span class="s2">z</span><span class="s1">)</span><span class="s3">,</span>
<a name="l250"><span class="ln">250 </span></a> <span class="s2">Vector</span><span class="s1">::</span><span class="s2">y</span><span class="s1">()</span><span class="s3">,</span>
<a name="l251"><span class="ln">251 </span></a> <span class="s1">))</span>
<a name="l252"><span class="ln">252 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l253"><span class="ln">253 </span></a>
<a name="l254"><span class="ln">254 </span></a> <span class="s0">let </span><span class="s2">mesh_collider </span><span class="s1">= </span><span class="s2">ColliderBuilder</span><span class="s1">::</span><span class="s2">trimesh</span><span class="s1">(</span>
<a name="l255"><span class="ln">255 </span></a> <span class="s2">raw_mesh</span><span class="s1">.</span><span class="s2">vertices</span><span class="s1">.</span><span class="s2">iter</span><span class="s1">().</span><span class="s2">map</span><span class="s1">(|</span><span class="s2">v</span><span class="s1">| </span><span class="s2">v</span><span class="s1">.</span><span class="s2">position</span><span class="s1">()).</span><span class="s2">collect</span><span class="s1">()</span><span class="s3">,</span>
<a name="l256"><span class="ln">256 </span></a> <span class="s2">raw_mesh</span><span class="s1">.</span><span class="s2">indices</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">()</span><span class="s3">,</span>
<a name="l257"><span class="ln">257 </span></a> <span class="s1">)</span>
<a name="l258"><span class="ln">258 </span></a> <span class="s1">.</span><span class="s2">build</span><span class="s1">()</span><span class="s3">;</span>
<a name="l259"><span class="ln">259 </span></a>
<a name="l260"><span class="ln">260 </span></a> <span class="s0">let </span><span class="s2">gpu_mesh_buffer </span><span class="s1">= </span><span class="s2">renderer</span>
<a name="l261"><span class="ln">261 </span></a> <span class="s1">.</span><span class="s2">upload_mesh_to_buffer</span><span class="s1">(</span>
<a name="l262"><span class="ln">262 </span></a> <span class="s2">raw_mesh</span><span class="s3">,</span>
<a name="l263"><span class="ln">263 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">Color </span><span class="s1">{</span>
<a name="l264"><span class="ln">264 </span></a> <span class="s2">r</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l265"><span class="ln">265 </span></a> <span class="s2">g</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">7</span><span class="s3">,</span>
<a name="l266"><span class="ln">266 </span></a> <span class="s2">b</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">3</span><span class="s3">,</span>
<a name="l267"><span class="ln">267 </span></a> <span class="s2">a</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l268"><span class="ln">268 </span></a> <span class="s1">})</span><span class="s3">,</span>
<a name="l269"><span class="ln">269 </span></a> <span class="s1">)</span>
<a name="l270"><span class="ln">270 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l271"><span class="ln">271 </span></a>
<a name="l272"><span class="ln">272 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span>
<a name="l273"><span class="ln">273 </span></a> <span class="s2">position</span><span class="s3">,</span>
<a name="l274"><span class="ln">274 </span></a> <span class="s2">gpu_mesh_buffer</span><span class="s3">,</span>
<a name="l275"><span class="ln">275 </span></a> <span class="s2">Physics </span><span class="s1">{</span>
<a name="l276"><span class="ln">276 </span></a> <span class="s2">rigid_body</span><span class="s1">: </span><span class="s2">static_body</span><span class="s3">,</span>
<a name="l277"><span class="ln">277 </span></a> <span class="s2">rigid_body_handle</span><span class="s1">: </span><span class="s2">None</span><span class="s3">,</span>
<a name="l278"><span class="ln">278 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l279"><span class="ln">279 </span></a> <span class="s2">Collider </span><span class="s1">{</span>
<a name="l280"><span class="ln">280 </span></a> <span class="s2">collider</span><span class="s1">: </span><span class="s2">mesh_collider</span><span class="s3">,</span>
<a name="l281"><span class="ln">281 </span></a> <span class="s2">collider_handle</span><span class="s1">: </span><span class="s2">None</span><span class="s3">,</span>
<a name="l282"><span class="ln">282 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l283"><span class="ln">283 </span></a> <span class="s1">))</span><span class="s3">;</span>
<a name="l284"><span class="ln">284 </span></a> <span class="s1">}</span>
<a name="l285"><span class="ln">285 </span></a> <span class="s5">&quot;Camera&quot; </span><span class="s1">=&gt; {</span>
<a name="l286"><span class="ln">286 </span></a> <span class="s0">let </span><span class="s2">position </span><span class="s1">= </span><span class="s2">Position</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">entity</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">())</span><span class="s3">;</span>
<a name="l287"><span class="ln">287 </span></a> <span class="s0">let </span><span class="s2">entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">= </span><span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span>
<a name="l288"><span class="ln">288 </span></a> <span class="s2">Camera </span><span class="s1">{</span>
<a name="l289"><span class="ln">289 </span></a> <span class="s2">position</span><span class="s1">: </span><span class="s2">cgmath</span><span class="s1">::</span><span class="s2">Point3 </span><span class="s1">{</span>
<a name="l290"><span class="ln">290 </span></a> <span class="s2">x</span><span class="s1">: </span><span class="s2">position</span><span class="s1">.</span><span class="s2">x</span><span class="s3">,</span>
<a name="l291"><span class="ln">291 </span></a> <span class="s2">y</span><span class="s1">: </span><span class="s2">position</span><span class="s1">.</span><span class="s2">y</span><span class="s3">,</span>
<a name="l292"><span class="ln">292 </span></a> <span class="s2">z</span><span class="s1">: </span><span class="s2">position</span><span class="s1">.</span><span class="s2">z</span><span class="s3">,</span>
<a name="l293"><span class="ln">293 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l294"><span class="ln">294 </span></a> <span class="s2">yaw</span><span class="s1">: </span><span class="s2">Rad</span><span class="s1">(</span><span class="s2">PI </span><span class="s1">/ </span><span class="s4">2</span><span class="s1">.</span><span class="s4">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l295"><span class="ln">295 </span></a> <span class="s2">pitch</span><span class="s1">: </span><span class="s2">Rad</span><span class="s1">(</span><span class="s2">PI </span><span class="s1">/ </span><span class="s4">2</span><span class="s1">.</span><span class="s4">0 </span><span class="s1">+ </span><span class="s4">25</span><span class="s1">.</span><span class="s4">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l296"><span class="ln">296 </span></a> <span class="s1">}</span><span class="s3">,</span>
<a name="l297"><span class="ln">297 </span></a> <span class="s2">CameraController</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s4">5</span><span class="s1">.</span><span class="s4">0</span><span class="s3">, </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s1">)</span><span class="s3">,</span>
<a name="l298"><span class="ln">298 </span></a> <span class="s2">ImguiGenericOutputLine</span><span class="s1">::</span><span class="s2">new</span><span class="s1">(</span><span class="s5">&quot;wahoo! from a camera&quot;</span><span class="s1">.</span><span class="s2">to_string</span><span class="s1">())</span><span class="s3">,</span>
<a name="l299"><span class="ln">299 </span></a> <span class="s1">))</span><span class="s3">;</span>
<a name="l300"><span class="ln">300 </span></a> <span class="s1">}</span>
<a name="l301"><span class="ln">301 </span></a> <span class="s5">&quot;Light&quot; </span><span class="s1">=&gt; {</span>
<a name="l302"><span class="ln">302 </span></a> <span class="s0">let </span><span class="s2">mesh_name </span><span class="s1">= </span><span class="s2">entity</span><span class="s1">.</span><span class="s2">mesh</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">().</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l303"><span class="ln">303 </span></a> <span class="s0">let </span><span class="s2">raw_mesh </span><span class="s1">= </span><span class="s0">match </span><span class="s2">runtime_state</span><span class="s1">.</span><span class="s2">get_mesh</span><span class="s1">(</span><span class="s2">mesh_name</span><span class="s1">.</span><span class="s2">as_str</span><span class="s1">()) {</span>
<a name="l304"><span class="ln">304 </span></a> <span class="s2">None </span><span class="s1">=&gt; {</span>
<a name="l305"><span class="ln">305 </span></a> <span class="s2">log</span><span class="s1">::</span><span class="s2">warn</span><span class="s1">!(</span><span class="s5">&quot;Skipping entity with invalid mesh file {:?} &quot;</span><span class="s3">, </span><span class="s2">mesh_name</span><span class="s1">)</span><span class="s3">;</span>
<a name="l306"><span class="ln">306 </span></a> <span class="s0">continue</span><span class="s3">;</span>
<a name="l307"><span class="ln">307 </span></a> <span class="s1">}</span>
<a name="l308"><span class="ln">308 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">mesh</span><span class="s1">) =&gt; </span><span class="s2">mesh</span><span class="s3">,</span>
<a name="l309"><span class="ln">309 </span></a> <span class="s1">}</span><span class="s3">;</span>
<a name="l310"><span class="ln">310 </span></a>
<a name="l311"><span class="ln">311 </span></a> <span class="s0">let </span><span class="s2">position </span><span class="s1">= </span><span class="s2">Position</span><span class="s1">::</span><span class="s2">from</span><span class="s1">(</span><span class="s2">entity</span><span class="s1">.</span><span class="s2">position</span><span class="s1">.</span><span class="s2">clone</span><span class="s1">())</span><span class="s3">;</span>
<a name="l312"><span class="ln">312 </span></a>
<a name="l313"><span class="ln">313 </span></a> <span class="s0">let </span><span class="s2">gpu_mesh_buffer </span><span class="s1">= </span><span class="s2">renderer</span>
<a name="l314"><span class="ln">314 </span></a> <span class="s1">.</span><span class="s2">upload_mesh_to_buffer</span><span class="s1">(</span>
<a name="l315"><span class="ln">315 </span></a> <span class="s2">raw_mesh</span><span class="s3">,</span>
<a name="l316"><span class="ln">316 </span></a> <span class="s2">Some</span><span class="s1">(</span><span class="s2">wgpu</span><span class="s1">::</span><span class="s2">Color </span><span class="s1">{</span>
<a name="l317"><span class="ln">317 </span></a> <span class="s2">r</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l318"><span class="ln">318 </span></a> <span class="s2">g</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">7</span><span class="s3">,</span>
<a name="l319"><span class="ln">319 </span></a> <span class="s2">b</span><span class="s1">: </span><span class="s4">0</span><span class="s1">.</span><span class="s4">3</span><span class="s3">,</span>
<a name="l320"><span class="ln">320 </span></a> <span class="s2">a</span><span class="s1">: </span><span class="s4">1</span><span class="s1">.</span><span class="s4">0</span><span class="s3">,</span>
<a name="l321"><span class="ln">321 </span></a> <span class="s1">})</span><span class="s3">,</span>
<a name="l322"><span class="ln">322 </span></a> <span class="s1">)</span>
<a name="l323"><span class="ln">323 </span></a> <span class="s1">.</span><span class="s2">unwrap</span><span class="s1">()</span><span class="s3">;</span>
<a name="l324"><span class="ln">324 </span></a>
<a name="l325"><span class="ln">325 </span></a> <span class="s0">let </span><span class="s2">light_entity</span><span class="s1">: </span><span class="s2">Entity </span><span class="s1">=</span>
<a name="l326"><span class="ln">326 </span></a> <span class="s2">cmd</span><span class="s1">.</span><span class="s2">push</span><span class="s1">((</span><span class="s2">position</span><span class="s3">, </span><span class="s2">gpu_mesh_buffer</span><span class="s3">, </span><span class="s2">renderer</span><span class="s1">.</span><span class="s2">create_light</span><span class="s1">()))</span><span class="s3">;</span>
<a name="l327"><span class="ln">327 </span></a> <span class="s1">}</span>
<a name="l328"><span class="ln">328 </span></a>
<a name="l329"><span class="ln">329 </span></a> <span class="s2">_ </span><span class="s1">=&gt; {}</span>
<a name="l330"><span class="ln">330 </span></a> <span class="s1">}</span>
<a name="l331"><span class="ln">331 </span></a> <span class="s1">}</span>
<a name="l332"><span class="ln">332 </span></a><span class="s1">}</span>
<a name="l333"><span class="ln">333 </span></a></pre>
</body>
</html>

26
note.md Normal file
View File

@@ -0,0 +1,26 @@
# Texture Samplers
|GLSL sampler|OpenGL texture enum|Texture type|
|---|---|---|
gsampler1D | GL_TEXTURE_1D | 1D texture
gsampler2D | GL_TEXTURE_2D | 2D texture
gsampler3D | GL_TEXTURE_3D | 3D texture
gsamplerCube | GL_TEXTURE_CUBE_MAP | Cubemap Texture
gsampler2DRect | GL_TEXTURE_RECTANGLE | Rectangle Texture
gsampler1DArray | GL_TEXTURE_1D_ARRAY | 1D Array Texture
gsampler2DArray | GL_TEXTURE_2D_ARRAY | 2D Array Texture
gsamplerCubeArray | GL_TEXTURE_CUBE_MAP_ARRAY | Cubemap Array Texture
gsamplerBuffer | GL_TEXTURE_BUFFER | Buffer Texture
gsampler2DMS | GL_TEXTURE_2D_MULTISAMPLE | Multisample Texture
gsampler2DMSArray | GL_TEXTURE_2D_MULTISAMPLE_ARRAY | Multisample Array Texture
# Shadow Samplers
|GLSL sampler|OpenGL texture enum|
|---|---|
sampler1DShadow | GL_TEXTURE_1D
sampler2DShadow | GL_TEXTURE_2D
samplerCubeShadow | GL_TEXTURE_CUBE_MAP
sampler2DRectShadow | GL_TEXTURE_RECTANGLE
sampler1DArrayShadow | GL_TEXTURE_1D_ARRAY
sampler2DArrayShadow | GL_TEXTURE_2D_ARRAY
samplerCubeArrayShadow | GL_TEXTURE_CUBE_MAP_ARRAY

View File

Before

Width:  |  Height:  |  Size: 3.0 MiB

After

Width:  |  Height:  |  Size: 3.0 MiB

View File

@@ -1,13 +0,0 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Material.002
Ns 225.000000
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd /Users/mitchellhansen/source/minimum-viable-game-engine/resources/test.jpg

View File

@@ -1,18 +0,0 @@
# Blender v2.93.1 OBJ File: ''
# www.blender.org
mtllib texture-test-1.mtl
o Plane_Plane.001
v -1.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v -1.000000 0.000000 -1.000000
v 1.000000 0.000000 -1.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 1.000000
vn 0.0000 1.0000 0.0000
g Plane_Plane.001_Material.002
usemtl Material.002
s off
f 2/1/1 3/2/1 1/3/1
f 2/1/1 4/4/1 3/2/1

View File

@@ -1,12 +0,0 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Material.001
Ns 323.999994
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2

View File

@@ -1,17 +0,0 @@
# Blender v2.93.1 OBJ File: ''
# www.blender.org
mtllib textured-plane.mtl
o Plane
v -1.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v -1.000000 0.000000 -1.000000
v 1.000000 0.000000 -1.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 1.000000
vn 0.0000 1.0000 0.0000
usemtl Material.001
s off
f 2/1/1 3/2/1 1/3/1
f 2/1/1 4/4/1 3/2/1

View File

@@ -6,6 +6,10 @@ layout(set = 0, binding = 0) uniform Globals {
mat4 u_ViewProj;
};
layout(set = 0, binding = 1) uniform Globals {
mat4 u_ViewProj;
};
layout(set = 1, binding = 0) uniform Entity {
mat4 u_World;
vec4 u_Color;

View File

@@ -30,18 +30,23 @@ layout(set = 1, binding = 0) uniform Entity {
};
float fetch_shadow(int light_id, vec4 homogeneous_coords) {
// homogeneous coords is the depth of the previously rendered
// fragment, from the lights perspective. If it's less than 0
// then it's behind the light, so it's obviously in shadow
if (homogeneous_coords.w <= 0.0) {
return 1.0;
}
// compensate for the Y-flip difference between the NDC and texture coordinates
// compensate for the Y-flip difference between the normalized device
// coordinates (NDC) and texture coordinates
const vec2 flip_correction = vec2(0.5, -0.5);
// compute texture coordinates for shadow lookup
vec4 light_local = vec4(
// I don't know what kind of jank shit is going on on this line
homogeneous_coords.xy * flip_correction/homogeneous_coords.w + 0.5,
light_id,
homogeneous_coords.z / homogeneous_coords.w
light_id, // array layer
homogeneous_coords.z / homogeneous_coords.w // D-Ref
);
// do the lookup, using HW PCF and comparison
// do the lookup, using HW percentage closer filtering(PCF) and comparison
return texture(sampler2DArrayShadow(t_Shadow, s_Shadow), light_local);
}

View File

@@ -0,0 +1,22 @@
#version 450
layout(location = 0) in vec3 v_Normal;
layout(location = 1) in vec4 v_Position;
layout(location = 2) in vec2 v_Uv;
layout(location = 0) out vec4 o_Normal;
layout(location = 1) out vec4 o_Position;
layout(location = 2) out vec4 o_Uv;
// so I need to have my 3 color attachments and 1? sampler.
layout(set = 0, binding = 1) uniform texture2DArray t_Uv;
layout(set = 0, binding = 2) uniform gsampler2D s_Uv;
// I also need my 1 depth texture and its sampler
layout(set = 0, binding = 3) uniform texture2DArray t_Shadow;
layout(set = 0, binding = 4) uniform samplerShadow s_Shadow;
void main() {
}

View File

@@ -0,0 +1,21 @@
#version 450
layout(location = 0) in vec4 a_Pos;
layout(location = 0) out vec3 v_Normal;
layout(location = 1) out vec4 v_Position;
layout(location = 2) out vec2 v_Uv;
layout(set = 0, binding = 0) uniform Globals {
mat4 u_ViewProj;
};
layout(set = 1, binding = 0) uniform Entity {
mat4 u_World;
vec4 u_Color;
};
void main() {
gl_Position = u_ViewProj * u_World * vec4(a_Pos);
}

View File

@@ -10,9 +10,8 @@ use wgpu::{BindGroup, Buffer, TextureView};
use crate::runtime::state::{TomlPositionDescription, TomlRotationDescription};
use imgui::Ui;
/// a component is any type that is 'static, sized, send and sync
/// ImguiWindow contains a single handle and lifetime to an Imgui window, along with
/// a function which takes a UI, as well as a vector of a user defined type T
// a component is any type that is 'static, sized, send and sync
pub struct ImguiWindow<'a, T> {
pub window: fn() -> imgui::Window<'a>,
pub func: fn(&Ui, Vec<&T>),

View File

@@ -35,8 +35,6 @@ pub struct RawMesh {
}
/// We use meshes in a few different places. To keep things simple, we return
/// the most basic, direct-to-memory version. If something fancy needs to be done
/// with it, the fancy stays there
@@ -60,11 +58,6 @@ pub fn load_obj(obj_path: &str) -> Result<RawMesh, String> {
for model in models {
let mesh = &model.mesh;
if let Some(mat_id) = mesh.material_id {
let mat : &Material = materials.get(mat_id).unwrap();
println!("{:?}", mat);
}
// Cycle through the faces and chunk out the indices
let mut next_face = 0;
for f in 0..mesh.num_face_indices.len() {
@@ -119,28 +112,3 @@ pub fn load_obj(obj_path: &str) -> Result<RawMesh, String> {
indices: index_data.to_vec(),
})
}
// pub fn create_quad_mesh() -> RawMesh {
//
// let mut index_data: Vec<[u32; 3]> = Vec::new();
// let mut vertex_data = Vec::new();
//
// vertex_data.push(Vertex::from(
// [
// mesh.positions[3 * v],
// mesh.positions[3 * v + 1],
// mesh.positions[3 * v + 2],
// ],
// [
// mesh.normals[3 * v],
// mesh.normals[3 * v + 1],
// mesh.normals[3 * v + 2],
// ],
// [mesh.texcoords[2 * v], mesh.texcoords[2 * v + 1]],
// ));
//
// RawMesh {
// vertices: vertex_data.to_vec(),
// indices: index_data.to_vec(),
// }
// }

View File

@@ -45,6 +45,7 @@ use wgpu_subscriber;
use winit_24::event::DeviceEvent::MouseMotion;
use winit_24::event::{ElementState, VirtualKeyCode};
use winit_24::event_loop::EventLoopProxy;
use winit_24::platform::unix::x11::ffi::Time;
use winit_24::window::Window;
use winit_24::{
event::{self, WindowEvent},
@@ -99,38 +100,20 @@ ECS
entities & behaviours (got the entities!)
scripting!
Todo:
Load scene imgui interface w/ toml files
This means a scene graph
FPS graph port from voxel raycaster
better imgui interface with components & systems
Figure out eventing, GameInput, passing all events, etc.
+ texturing
I need to figure out the way that I want to do 2d graphics in a 3d engine...
I suppose I will need sprites. And those are just 2 polygons which are textured
*/
/**
Notes:
(Im)GUI,
* I have to hold onto an ImGUI window and it's lifetime
* I have to execute a bunch of function calls to build
the immediate mode UI each and every frame
It looks like my solution was to have an entity describing
the window
*/
//log::info!("");
/// ImGUI works on more or less an unsafe global state. which is MegaLame
// ImGUI works on more or less an unsafe global state. which is MegaLame
static mut CURRENT_UI: Option<imgui::Ui<'static>> = None;
pub unsafe fn current_ui<'a>() -> Option<&'a imgui::Ui<'a>> {
CURRENT_UI.as_ref()
@@ -157,7 +140,7 @@ fn main() {
let mut render_schedule = Schedule::builder()
.add_system(render::system::render_imgui_system())
.add_system(render::system::render_function_system())
.add_system(render::system::render_test_system())
.add_system(render::system::render_performance_flag_system())
.build();

View File

@@ -12,18 +12,15 @@ use rapier3d::pipeline::PhysicsPipeline;
use crate::camera::{Camera, CameraController};
use crate::components::{Collider, LoopState, Mesh, Physics, Position};
use imgui::FontSource;
use rapier3d::prelude::{IslandManager, CCDSolver};
pub struct PhysicsState {
pub(in crate::physics) gravity: rapier3d::math::Vector<f32>,
pub(in crate::physics) integration_parameters: IntegrationParameters,
pub(in crate::physics) island_manager: IslandManager,
pub(in crate::physics) broad_phase: BroadPhase,
pub(in crate::physics) narrow_phase: NarrowPhase,
pub(in crate::physics) bodies: RigidBodySet,
pub(in crate::physics) colliders: ColliderSet,
pub(in crate::physics) joints: JointSet,
pub(in crate::physics) ccd_solver: CCDSolver,
}
impl PhysicsState {
@@ -33,13 +30,11 @@ impl PhysicsState {
PhysicsState {
gravity,
integration_parameters: IntegrationParameters::default(),
island_manager: IslandManager::new(),
broad_phase: BroadPhase::new(),
narrow_phase: NarrowPhase::new(),
bodies: RigidBodySet::new(),
colliders: ColliderSet::new(),
joints: JointSet::new(),
ccd_solver: CCDSolver::new(),
},
)
}

View File

@@ -38,7 +38,7 @@ pub fn run_physics(
Some(handle) => handle,
};
if collider.collider_handle == None {
let handle = physics_state.colliders.insert_with_parent(
let handle = physics_state.colliders.insert(
collider.collider.clone(),
rigid_body_handle,
&mut physics_state.bodies,
@@ -56,14 +56,13 @@ pub fn run_physics(
physics_pipeline.step(
&physics_state.gravity,
&physics_state.integration_parameters,
&mut physics_state.island_manager,
&mut physics_state.broad_phase,
&mut physics_state.narrow_phase,
&mut physics_state.bodies,
&mut physics_state.colliders,
&mut physics_state.joints,
&mut physics_state.ccd_solver,
&(),
None,
None,
&event_handler,
);
@@ -106,8 +105,6 @@ pub fn update_models(
) {
// Make sure all the entities we care about are added to the system
// TODO add scenegraph component to compare against
// allows per node rotation, better logging
let mut query = <(&mut Collider, &mut Physics, &mut Mesh, &mut Position)>::query();
for (collider, physics, mesh, position) in query.iter_mut(world) {
let pos = physics_state

View File

@@ -66,3 +66,12 @@ pub struct ShadowUniforms {
unsafe impl Pod for ShadowUniforms {}
unsafe impl Zeroable for ShadowUniforms {}
#[repr(C)]
#[derive(Clone, Copy, Debug)]
pub struct CameraProjectionView {
proj: [[f32; 4]; 4],
}
unsafe impl Pod for CameraProjectionView {}
unsafe impl Zeroable for CameraProjectionView {}

View File

@@ -16,32 +16,37 @@ use imgui::*;
use imgui_wgpu::{Renderer as ImguiRenderer, RendererConfig as ImguiRendererConfig};
use legion::world::SubWorld;
use legion::*;
use rapier3d::parry::motion::RigidMotionComposition;
use wgpu::util::DeviceExt;
use wgpu::{BackendBit, BindGroup, BindGroupLayout, Buffer, BufferBindingType, Device, FragmentState, Instance, Queue, Surface, SwapChain, SwapChainDescriptor, SwapChainFrame, TextureView, VertexState, CommandEncoder};
use wgpu::{
BackendBit, BindGroup, BindGroupLayout, Buffer, BufferBindingType, CommandEncoder, Device,
Features, FragmentState, Instance, Queue, Surface, SwapChain, SwapChainDescriptor,
SwapChainFrame, TextureView, VertexState,
};
use winit_24::dpi::PhysicalSize;
use winit_24::platform::unix::x11::ffi::Time;
use winit_24::window::Window;
use crate::camera::{Camera, CameraController};
use crate::components::{Mesh, Position, RangeCopy};
use crate::current_ui;
use crate::geometry::{load_obj, Vertex, RawMesh};
use crate::geometry::{load_obj, RawMesh, Vertex};
use crate::imgui_supp::imgui_support::{ImguiContext, ImguiPlatform};
use crate::light::{DirectionalLight, LightRaw};
use crate::render::{EntityUniforms, ShadowUniforms, ForwardUniforms};
use crate::render::{CameraProjectionView, EntityUniforms, ForwardUniforms, ShadowUniforms};
/// A render pass consists of a pipeline, bindgroup, and uniform buf
/// The uniform buf is just the ShadowUniforms or ForwardUniforms
/// They are uniform across all cu's.
/// And the bindgroup is just the localbindgroup (the EntityUniforms) and the rest
///
pub struct Pass {
pub pipeline: wgpu::RenderPipeline,
pub bind_group: wgpu::BindGroup,
pub uniform_buf: wgpu::Buffer,
}
pub struct RenderState {
swapchain: SwapChain,
swapchain_description: SwapChainDescriptor,
instance: Arc<Instance>,
@@ -59,6 +64,15 @@ pub struct RenderState {
pub(in crate::render) forward_pass: Pass,
pub(in crate::render) forward_depth: wgpu::TextureView,
// Gbuffer bs
pub(in crate::render) gbuffer_pass: Pass,
pub(in crate::render) gbuffer_cam_projection_buffer: wgpu::Buffer,
pub(in crate::render) gbuffer_depth_texture: wgpu::TextureView,
pub(in crate::render) gbuffer_depth_views: Vec<Arc<TextureView>>,
pub(in crate::render) gbuffer_target_texture: wgpu::TextureView,
pub(in crate::render) gbuffer_target_views: Vec<Arc<TextureView>>,
// this is for the set=1 entity uniforms
entity_bind_group_layout: BindGroupLayout,
pub(in crate::render) light_uniform_buf: wgpu::Buffer,
@@ -71,12 +85,14 @@ pub struct RenderState {
impl RenderState {
const MAX_LIGHTS: usize = 10;
const SHADOW_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
const G_BUFFER_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba32Float;
const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
const SHADOW_SIZE: wgpu::Extent3d = wgpu::Extent3d {
width: 1024,
height: 1024,
depth: Self::MAX_LIGHTS as u32,
};
const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
/// Generate a projection matrix with no look-at yet
pub fn generate_matrix(&self) -> cgmath::Matrix4<f32> {
@@ -107,10 +123,7 @@ impl RenderState {
}
/// Create a buffer for a mesh
fn create_buffer(
device: &wgpu::Device,
raw_mesh: &RawMesh,
) -> (Arc<Buffer>, Arc<Buffer>) {
fn create_buffer(device: &wgpu::Device, raw_mesh: &RawMesh) -> (Arc<Buffer>, Arc<Buffer>) {
let vertex_buf = Arc::new(
device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("vertex-buffer"),
@@ -131,8 +144,11 @@ impl RenderState {
}
/// Take a meshes raw representation and upload it to a GPU buffer
pub fn upload_mesh_to_buffer(&mut self, mesh: &RawMesh, color: Option<wgpu::Color>) -> Result<Mesh, String> {
pub fn upload_mesh_to_buffer(
&mut self,
mesh: &RawMesh,
color: Option<wgpu::Color>,
) -> Result<Mesh, String> {
let index_count = mesh.indices.len() * 3; // TODO bad bad bad bad!
let (vertex_buf, index_buf) = RenderState::create_buffer(&self.device, mesh);
@@ -172,7 +188,11 @@ impl RenderState {
}
/// explicitly load from file, and upload to gpu the mesh
pub fn load_mesh_to_buffer(&mut self, filepath: &str, color: Option<wgpu::Color>) -> Result<Mesh, String> {
pub fn load_mesh_to_buffer(
&mut self,
filepath: &str,
color: Option<wgpu::Color>,
) -> Result<Mesh, String> {
let raw_mesh = load_obj(filepath)?;
self.upload_mesh_to_buffer(&raw_mesh, color)
}
@@ -203,6 +223,105 @@ impl RenderState {
}
}
// Create a render pass with the ability to add external bindings
pub fn create_render_pass(
device: &Device,
external_binding_layout: &BindGroupLayout,
vertex_description: &wgpu::VertexBufferLayout,
uniform_size: u64,
label: Option<&str>,
) -> Option<Pass> {
// The g-buffers camera projection matrix that we stream data to
let uniform_buf = device.create_buffer(&wgpu::BufferDescriptor {
label: Some(format!("{} uniform-buffer", label.unwrap_or("unnamed")).as_str()),
size: uniform_size,
usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST,
mapped_at_creation: false,
});
// Uniform bind group for the view matrix
let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
label: Some(format!("{} bind group layout", label.unwrap_or("unnamed")).as_str()),
entries: &[wgpu::BindGroupLayoutEntry {
binding: 0, // global
visibility: wgpu::ShaderStage::VERTEX,
ty: wgpu::BindingType::Buffer {
ty: wgpu::BufferBindingType::Uniform,
min_binding_size: wgpu::BufferSize::new(uniform_size),
has_dynamic_offset: false,
},
count: None,
}],
});
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
label: Some(format!("{} uniform bind group", label.unwrap_or("unnamed")).as_str()),
layout: &bind_group_layout,
entries: &[wgpu::BindGroupEntry {
binding: 0,
resource: wgpu::BindingResource::Buffer {
buffer: &uniform_buf,
offset: 0,
size: wgpu::BufferSize::new(uniform_size),
},
}],
});
let vs_module =
device.create_shader_module(&wgpu::include_spirv!("../../shaders/bake.vert.spv"));
let fs_module =
device.create_shader_module(&wgpu::include_spirv!("../../shaders/bake.frag.spv"));
// The bind group layouts are accessed by layout(set = X, binding = x)
// in the shader.
let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
label: Some(format!("{} pipeline layout", label.unwrap_or("unnamed")).as_str()),
bind_group_layouts: &[&bind_group_layout, external_binding_layout],
push_constant_ranges: &[],
});
let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
label: Some(format!("{} render pipeline", label.unwrap_or("unnamed")).as_str()),
layout: Some(&pipeline_layout),
vertex: VertexState {
module: &vs_module,
entry_point: "main",
buffers: &[vertex_description.clone()],
},
fragment: Some(FragmentState {
module: &fs_module,
entry_point: "main",
targets: &[],
}),
primitive: wgpu::PrimitiveState {
topology: wgpu::PrimitiveTopology::TriangleList,
front_face: wgpu::FrontFace::Ccw,
cull_mode: wgpu::CullMode::Back,
..Default::default()
},
depth_stencil: Some(wgpu::DepthStencilState {
format: wgpu::TextureFormat::Depth32Float,
depth_write_enabled: true,
depth_compare: wgpu::CompareFunction::LessEqual,
stencil: wgpu::StencilState::default(),
bias: wgpu::DepthBiasState {
constant: 2, // corresponds to bilinear filtering
slope_scale: 2.0,
clamp: 0.0,
},
clamp_depth: device.features().contains(wgpu::Features::DEPTH_CLAMPING),
}),
multisample: wgpu::MultisampleState::default(),
});
Some(Pass {
pipeline,
bind_group,
uniform_buf,
})
}
pub fn init(window: &Window, imgui_context: &mut ImguiContext) -> RenderState {
// Grab the GPU instance, and query its features
let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY);
@@ -289,6 +408,150 @@ impl RenderState {
}],
});
/*
The shadow pass renders from the perspective of each camera and applies that to the shadow
texture. Due to light FOV and the shadow texture itself, it's rather difficult to have
hands-off global lighting / point lights
*/
// This pass is just going to forward the vertex info to the fragments
// And they are going to render to the gbuffer
let g_buffer_pass = Self::create_render_pass(
&device,
&entity_bind_group_layout,
&vb_desc,
mem::size_of::<CameraProjectionView>() as wgpu::BufferAddress,
Some("g-buffer"),
);
let shadow_pass = Self::create_render_pass(
&device,
&entity_bind_group_layout,
&vb_desc,
mem::size_of::<ShadowUniforms>() as wgpu::BufferAddress,
Some("shadow-pass"),
);
let g_buffer_pass = {
let uniform_size = mem::size_of::<CameraProjectionView>() as wgpu::BufferAddress;
// The g-buffers camera projection matrix that we stream data to
let uniform_buf = device.create_buffer(&wgpu::BufferDescriptor {
label: Some("g-buffers CameraProjectionView uniform buffer"),
size: uniform_size,
usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST,
mapped_at_creation: false,
});
// Uniform bind group for the view matrix
let bind_group_layout =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
label: Some("g-buffer input pass bindgroup layout (cam)"),
entries: &[
wgpu::BindGroupLayoutEntry {
binding: 0, // global
visibility: wgpu::ShaderStage::VERTEX,
ty: wgpu::BindingType::Buffer {
ty: wgpu::BufferBindingType::Uniform,
min_binding_size: wgpu::BufferSize::new(uniform_size),
has_dynamic_offset: false,
},
count: None,
},
wgpu::BindGroupLayoutEntry {
binding: 1, // texture2DArray
visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Texture {
multisampled: false,
sample_type: wgpu::TextureSampleType::Depth,
view_dimension: wgpu::TextureViewDimension::D2Array,
},
count: None,
},
wgpu::BindGroupLayoutEntry {
binding: 2, // samplerShadow
visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler {
filtering: false,
comparison: true,
},
count: None,
},
],
});
//sudo rm /usr/bin/ld
//sudo ln -s /usr/bin/lld /usr/bin/ld
//sudo ln -s /usr/bin/x86_64-linux-gnu-ld /usr/bin/ld
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
label: Some("g-buffers uniform bind group"),
layout: &bind_group_layout,
entries: &[wgpu::BindGroupEntry {
binding: 0, // globals
resource: wgpu::BindingResource::Buffer {
buffer: &uniform_buf,
offset: 0,
size: wgpu::BufferSize::new(uniform_size),
},
}],
});
let vs_module =
device.create_shader_module(&wgpu::include_spirv!("../../shaders/bake.vert.spv"));
let fs_module =
device.create_shader_module(&wgpu::include_spirv!("../../shaders/bake.frag.spv"));
// The bind group layouts are accessed by layout(set = X, binding = x)
// in the shader.
let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
label: Some("g-buffer input pipeline layout"),
bind_group_layouts: &[&bind_group_layout, &entity_bind_group_layout],
push_constant_ranges: &[],
});
let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
label: Some("g-buffer"),
layout: Some(&pipeline_layout),
vertex: VertexState {
module: &vs_module,
entry_point: "main",
buffers: &[vb_desc.clone()],
},
fragment: Some(FragmentState {
module: &fs_module,
entry_point: "main",
targets: &[],
}),
primitive: wgpu::PrimitiveState {
topology: wgpu::PrimitiveTopology::TriangleList,
front_face: wgpu::FrontFace::Ccw,
cull_mode: wgpu::CullMode::Back,
..Default::default()
},
depth_stencil: Some(wgpu::DepthStencilState {
format: wgpu::TextureFormat::Depth32Float,
depth_write_enabled: true,
depth_compare: wgpu::CompareFunction::LessEqual,
stencil: wgpu::StencilState::default(),
bias: wgpu::DepthBiasState {
constant: 2, // corresponds to bilinear filtering
slope_scale: 2.0,
clamp: 0.0,
},
clamp_depth: device.features().contains(wgpu::Features::DEPTH_CLAMPING),
}),
multisample: wgpu::MultisampleState::default(),
});
Pass {
pipeline,
bind_group,
uniform_buf,
}
};
let shadow_pass = {
let uniform_size = mem::size_of::<ShadowUniforms>() as wgpu::BufferAddress;
@@ -339,9 +602,9 @@ impl RenderState {
// Create the render pipeline
let vs_module =
device.create_shader_module(&wgpu::include_spirv!("../../resources/bake.vert.spv"));
device.create_shader_module(&wgpu::include_spirv!("../../shaders/bake.vert.spv"));
let fs_module =
device.create_shader_module(&wgpu::include_spirv!("../../resources/bake.frag.spv"));
device.create_shader_module(&wgpu::include_spirv!("../../shaders/bake.frag.spv"));
let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
label: Some("shadow"),
@@ -385,6 +648,19 @@ impl RenderState {
}
};
// Pre init the gbuffers camera projection uniform
let gbuffer_cam_uniform_size =
mem::size_of::<CameraProjectionView>() as wgpu::BufferAddress;
let gbuffer_cam_uniform_buf = device.create_buffer(&wgpu::BufferDescriptor {
label: Some("g-buffer camera projection uniform buffer"),
size: gbuffer_cam_uniform_size,
usage: wgpu::BufferUsage::UNIFORM
| wgpu::BufferUsage::COPY_SRC
| wgpu::BufferUsage::COPY_DST,
mapped_at_creation: false,
});
// Pre init the light uniform, with slots enough for MAX_LIGHTS
let light_uniform_size =
(Self::MAX_LIGHTS * mem::size_of::<LightRaw>()) as wgpu::BufferAddress;
@@ -430,8 +706,22 @@ impl RenderState {
50.0,
);
let g_buffer_camera_projection_matrix = CameraProjectionView {
proj: *mx_projection.as_ref(),
};
let g_buffer_camera_projection_uniform =
device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("g-buffer camera projection uniform buffer"),
contents: bytemuck::bytes_of(&g_buffer_camera_projection_matrix),
usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST,
});
let forward_pass = {
// Create pipeline layout
let forward_uniform_size =
mem::size_of::<ForwardUniforms>() as wgpu::BufferAddress;
let bind_group_layout =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
entries: &[
@@ -440,11 +730,7 @@ impl RenderState {
visibility: wgpu::ShaderStage::VERTEX | wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Buffer {
ty: wgpu::BufferBindingType::Uniform,
min_binding_size: wgpu::BufferSize::new(mem::size_of::<
ForwardUniforms,
>(
)
as _),
min_binding_size: wgpu::BufferSize::new(forward_uniform_size),
has_dynamic_offset: false,
},
count: None,
@@ -460,7 +746,7 @@ impl RenderState {
count: None,
},
wgpu::BindGroupLayoutEntry {
binding: 2,
binding: 2, // texture2DArray
visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Texture {
multisampled: false,
@@ -470,7 +756,7 @@ impl RenderState {
count: None,
},
wgpu::BindGroupLayoutEntry {
binding: 3,
binding: 3, // samplerShadow
visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::Sampler {
filtering: false,
@@ -552,10 +838,10 @@ impl RenderState {
});
// Create the render pipeline
let vs_module =
device.create_shader_module(&wgpu::include_spirv!("../../resources/forward.vert.spv"));
let fs_module =
device.create_shader_module(&wgpu::include_spirv!("../../resources/forward.frag.spv"));
let vs_module = device
.create_shader_module(&wgpu::include_spirv!("../../shaders/forward.vert.spv"));
let fs_module = device
.create_shader_module(&wgpu::include_spirv!("../../shaders/forward.frag.spv"));
let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
label: Some("main"),
@@ -593,7 +879,7 @@ impl RenderState {
}
};
let depth_texture = device.create_texture(&wgpu::TextureDescriptor {
let forward_depth_texture = device.create_texture(&wgpu::TextureDescriptor {
size: wgpu::Extent3d {
width: sc_desc.width,
height: sc_desc.height,
@@ -604,9 +890,73 @@ impl RenderState {
dimension: wgpu::TextureDimension::D2,
format: Self::DEPTH_FORMAT,
usage: wgpu::TextureUsage::RENDER_ATTACHMENT,
label: Some("Depth Texture"),
label: Some("Forward Depth Texture"),
});
let g_buffer_depth_texture = device.create_texture(&wgpu::TextureDescriptor {
size: wgpu::Extent3d {
width: sc_desc.width,
height: sc_desc.height,
depth: 5,
},
mip_level_count: 1,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
format: Self::DEPTH_FORMAT,
usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED,
label: Some("g-buffer depth texture"),
});
// I need one of these for each of the g-buffer elements I'm calculating
let mut g_buffer_depth_texture_views = (0..4)
.map(|i| {
Arc::new(
g_buffer_depth_texture.create_view(&wgpu::TextureViewDescriptor {
label: Some("g-buffer depth texture"),
format: None,
dimension: Some(wgpu::TextureViewDimension::D2),
aspect: wgpu::TextureAspect::All,
base_mip_level: 0,
level_count: None,
base_array_layer: i as u32,
array_layer_count: NonZeroU32::new(1),
}),
)
})
.collect::<Vec<_>>();
let g_buffer_data_texture = device.create_texture(&wgpu::TextureDescriptor {
size: wgpu::Extent3d {
width: sc_desc.width,
height: sc_desc.height,
depth: 5,
},
mip_level_count: 1,
sample_count: 1,
dimension: wgpu::TextureDimension::D2,
format: Self::DEPTH_FORMAT,
usage: wgpu::TextureUsage::RENDER_ATTACHMENT | wgpu::TextureUsage::SAMPLED,
label: Some("g-buffer depth texture"),
});
// I need one of these for each of the g-buffer elements I'm calculating
let mut g_buffer_data_texture_views = (0..4)
.map(|i| {
Arc::new(
g_buffer_depth_texture.create_view(&wgpu::TextureViewDescriptor {
label: Some("g-buffer depth texture"),
format: None,
dimension: Some(wgpu::TextureViewDimension::D2),
aspect: wgpu::TextureAspect::All,
base_mip_level: 0,
level_count: None,
base_array_layer: i as u32,
array_layer_count: NonZeroU32::new(1),
}),
)
})
.collect::<Vec<_>>();
// Imgui renderer
let renderer_config = ImguiRendererConfig {
texture_format: sc_desc.format,
@@ -616,6 +966,15 @@ impl RenderState {
ImguiRenderer::new(&mut imgui_context.context, &device, &queue, renderer_config);
RenderState {
gbuffer_pass: g_buffer_pass,
gbuffer_cam_projection_buffer: g_buffer_camera_projection_uniform,
gbuffer_depth_texture: g_buffer_depth_texture
.create_view(&wgpu::TextureViewDescriptor::default()),
gbuffer_depth_views: g_buffer_depth_texture_views,
gbuffer_target_texture: g_buffer_data_texture
.create_view(&wgpu::TextureViewDescriptor::default()),
gbuffer_target_views: g_buffer_data_texture_views,
swapchain: swap_chain,
queue: queue,
size,
@@ -623,7 +982,8 @@ impl RenderState {
lights_are_dirty: true,
shadow_pass,
forward_pass,
forward_depth: depth_texture.create_view(&wgpu::TextureViewDescriptor::default()),
forward_depth: forward_depth_texture
.create_view(&wgpu::TextureViewDescriptor::default()),
entity_bind_group_layout: entity_bind_group_layout,
shadow_target_views: shadow_target_views,
light_uniform_buf,
@@ -678,9 +1038,8 @@ impl RenderState {
}
}
/*
*/
*/

View File

@@ -1,30 +1,32 @@
use std::{iter, num::NonZeroU32, ops::Range, rc::Rc};
use std::cell::RefCell;
use std::iter::Chain;
use std::slice::Iter;
use std::sync::{Arc, Mutex};
use std::thread::current;
use std::time::Duration;
use std::{iter, num::NonZeroU32, ops::Range, rc::Rc};
use bytemuck::__core::mem;
use bytemuck::{Pod, Zeroable};
use bytemuck::__core::mem;
use cgmath::{
vec3, Decomposed, Deg, Euler, InnerSpace, Matrix4, Point3, Quaternion, Rad, Rotation3,
Transform, Vector3,
Decomposed, Deg, Euler, InnerSpace, Matrix4, Point3, Quaternion, Rad, Rotation3, Transform,
vec3, Vector3,
};
use futures::executor::LocalPool;
use imgui::sys::ImGuiContext;
use imgui::*;
use imgui::sys::ImGuiContext;
use imgui_wgpu::{Renderer as ImguiRenderer, RendererConfig as ImguiRendererConfig};
use legion::world::SubWorld;
use legion::*;
use wgpu::util::DeviceExt;
use legion::world::SubWorld;
use rapier3d::parry::motion::RigidMotionComposition;
use wgpu::{
BackendBit, BindGroup, BindGroupLayout, Buffer, BufferBindingType, CommandEncoder, Device,
FragmentState, Instance, Queue, Surface, SwapChain, SwapChainDescriptor, SwapChainFrame,
TextureView, VertexState,
};
use wgpu::util::DeviceExt;
use winit_24::dpi::PhysicalSize;
use winit_24::platform::unix::x11::ffi::Time;
use winit_24::window::Window;
use crate::camera::{Camera, CameraController};
@@ -33,11 +35,8 @@ use crate::current_ui;
use crate::geometry::{load_obj, Vertex};
use crate::imgui_supp::imgui_support::{ImguiContext, ImguiPlatform};
use crate::light::{DirectionalLight, LightRaw};
use crate::render::{EntityUniforms, ForwardUniforms, insert_debug_marker_checked, pop_debug_group_checked, push_debug_group_checked};
use crate::render::state::RenderState;
use crate::render::{
insert_debug_marker_checked, pop_debug_group_checked, push_debug_group_checked, EntityUniforms,
};
#[system]
#[write_component(Camera)]
@@ -83,38 +82,18 @@ fn run_imgui_render_step<G: 'static + Sized + Send + Sync>(world: &mut SubWorld,
/// Go through each "global" window-data component and render it's data
#[system]
#[write_component(ImguiWindow<ImguiPerformanceProfilerLine>)]
#[write_component(ImguiWindow < ImguiPerformanceProfilerLine >)]
#[write_component(ImguiPerformanceProfilerLine)]
#[write_component(ImguiWindow<ImguiGenericOutputLine>)]
#[write_component(ImguiWindow < ImguiGenericOutputLine >)]
#[write_component(ImguiGenericOutputLine)]
pub fn render_imgui(world: &mut SubWorld, #[resource] loop_state: &mut LoopState) {
// This is a global that we have to grab for imgui
let ui = unsafe { crate::current_ui().unwrap() };
// Pull out the window associated with this type, and render each of the components in the system
// Pull out the window associated with this type, and render each of the components in the sytem
run_imgui_render_step::<ImguiGenericOutputLine>(world, &ui);
run_imgui_render_step::<ImguiPerformanceProfilerLine>(world, &ui);
}
/**
Oh boy, now I need to remember this interface that I wrote...
The (Im)GUI System
* Each window is a static type, like ImguiGenericOutputLine, and ImguiPerformanceProfilerLine.
* Each window is also an entity that we do a query on
*/
// This would be the shared state for all imgui generic output things
pub struct ImguiGenericOutputLine {
pub label: String,
@@ -135,7 +114,6 @@ pub struct ImguiPerformanceProfilerLine {
pub scale_max: f32,
}
/// Adding samples, iterating, and calculating profiler lines
impl ImguiPerformanceProfilerLine {
fn add_sample(&mut self, sample: f32) {
self.list_of_fps[self.index] = sample;
@@ -182,7 +160,6 @@ impl ImguiPerformanceProfilerLine {
}
}
/// Take the current delta time from the loop state and add it to the profile line
#[system]
#[write_component(ImguiPerformanceProfilerLine)]
pub fn render_performance_flag(world: &mut SubWorld, #[resource] loop_state: &mut LoopState) {
@@ -198,10 +175,10 @@ pub fn render_performance_flag(world: &mut SubWorld, #[resource] loop_state: &mu
#[write_component(Camera)]
#[write_component(Position)]
#[write_component(ImguiPerformanceProfilerLine)]
#[write_component(Point3<f32>)]
#[write_component(Point3 < f32 >)]
#[write_component(Mesh)]
#[write_component(DirectionalLight)]
pub fn render_function(
pub fn render_test(
world: &mut SubWorld,
#[resource] loop_state: &mut LoopState,
#[resource] renderer: &mut RenderState,
@@ -257,6 +234,7 @@ pub fn render_function(
mesh_stack.push(mesh.clone());
}
// Update the light uniforms only if flagged
if renderer.lights_are_dirty {
renderer.lights_are_dirty = false;
let mut query = <(&mut DirectionalLight, &mut Position)>::query();
@@ -269,10 +247,58 @@ pub fn render_function(
}
}
// Render the g buffer
push_debug_group_checked("g-buffer stuff", &mut encoder);
{
// insert_debug_marker_checked("render entities", &mut encoder);
// The render pass for the g buffer.. Does it need any attachments
// the shadow pass uses a target view as the input, which are just views on
// top of the shadow texture. So the attachment is a RW buffer which clears on load
let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("render pass"),
color_attachments: &[
wgpu::RenderPassColorAttachmentDescriptor {
attachment: &renderer.gbuffer_target_views.get(0).unwrap(),
resolve_target: None,
ops: Default::default(),
},
wgpu::RenderPassColorAttachmentDescriptor {
attachment: &renderer.gbuffer_target_views.get(1).unwrap(),
resolve_target: None,
ops: Default::default(),
},
wgpu::RenderPassColorAttachmentDescriptor {
attachment: &renderer.gbuffer_target_views.get(2).unwrap(),
resolve_target: None,
ops: Default::default(),
}],
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachmentDescriptor {
attachment: &renderer.gbuffer_target_views.get(3).unwrap(),
depth_ops: Some(wgpu::Operations {
load: wgpu::LoadOp::Clear(1.0),
store: true,
}),
stencil_ops: None,
}),
});
pass.set_pipeline(&renderer.gbuffer_pass.pipeline);
pass.set_bind_group(0, &renderer.gbuffer_pass.bind_group, &[]);
// for mesh in &mesh_stack {
// pass.set_bind_group(1, &mesh.bind_group, &[]);
// // TODO, pipe through this index format through the mesh
// pass.set_index_buffer(mesh.index_buffer.slice(..), mesh.index_format);
// pass.set_vertex_buffer(0, mesh.vertex_buffer.slice(..));
// pass.draw_indexed(0..mesh.index_count as u32, 0, 0..1);
// }
}
pop_debug_group_checked(&mut encoder);
// Render the shadow textures
push_debug_group_checked("shadow passes", &mut encoder);
let mut query = <(&mut DirectionalLight, &mut Position)>::query();
for (i, (light, pos)) in query.iter_mut(world).enumerate() {
insert_debug_marker_checked(
&format!("shadow pass {} (light at position {:?})", i, pos),
@@ -291,6 +317,7 @@ pub fn render_function(
insert_debug_marker_checked("render entities", &mut encoder);
//
let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("render pass"),
color_attachments: &[],
@@ -314,11 +341,10 @@ pub fn render_function(
pass.draw_indexed(0..mesh.index_count as u32, 0, 0..1);
}
}
pop_debug_group_checked(&mut encoder);
// forward pass
push_debug_group_checked("forward rendering pass", &mut encoder);
// And then render the viewport
push_debug_group_checked("forward rendering pass", &mut encoder);
{
let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("forward render pass"),
@@ -349,6 +375,7 @@ pub fn render_function(
let mut query = <(&mut Position, &mut Mesh)>::query();
// I could use that mesh stack here lol
for (pos, mesh) in query.iter_mut(world) {
pass.set_bind_group(1, &mesh.bind_group, &[]);
// TODO: Pipe this in through the mesh
@@ -358,9 +385,11 @@ pub fn render_function(
}
}
pop_debug_group_checked(&mut encoder);
pop_debug_group_checked(&mut encoder);
// Run the Imgui render
push_debug_group_checked("imgui rendering pass", &mut encoder);
{
let mut imgui_context = &mut imgui_context.lock().unwrap().context;
let mut imgui_platform = &mut imgui_platform.lock().unwrap().platform;
@@ -395,6 +424,10 @@ pub fn render_function(
.render(draw_data, &renderer.queue, &renderer.device, &mut rpass)
.expect("Rendering failed");
}
pop_debug_group_checked(&mut encoder);
// the startfunction debug group
pop_debug_group_checked(&mut encoder);
renderer.queue.submit(iter::once(encoder.finish()));
}

View File

@@ -16,7 +16,7 @@ use crate::camera::{Camera, CameraController};
use crate::components::{Collider, LoopState, Mesh, Physics, Position};
use crate::geometry::{load_obj, RawMesh};
use std::io::Read;
use imgui_wgpu::Texture;
#[derive(Deserialize, Clone)]
@@ -71,28 +71,8 @@ pub struct TomlEntityContainer {
pub struct RuntimeState {
config_db: TomlEntityContainer,
mesh_cache: HashMap<String, RawMesh>,
texture_cache: HashMap<String, RawMesh>,
}
pub struct Model {
pub meshes: Vec<RawMesh>,
pub materials: Vec<Material>,
}
pub struct Material {
pub name: String,
pub diffuse_texture: Texture,
}
// pub struct Mesh {
// pub name: String,
// pub vertex_buffer: wgpu::Buffer,
// pub index_buffer: wgpu::Buffer,
// pub num_elements: u32,
// pub material: usize,
// }
impl RuntimeState {
pub fn new() -> RuntimeState {
// TODO: Hook this file to the gui
@@ -106,7 +86,6 @@ impl RuntimeState {
RuntimeState {
config_db: settings,
mesh_cache: Default::default(),
texture_cache: Default::default(),
}
}

View File

@@ -19,12 +19,11 @@ use rapier3d::pipeline::{ChannelEventCollector, PhysicsPipeline};
use crate::camera::{Camera, CameraController};
use crate::components::{Collider, ImguiWindow, LoopState, Mesh, Physics, Position};
use crate::geometry;
use crate::geometry::RawMesh;
use crate::physics::state::PhysicsState;
use crate::render::state::RenderState;
use crate::render::system::{ImguiGenericOutputLine, ImguiPerformanceProfilerLine};
use crate::runtime::state::RuntimeState;
use crate::geometry::RawMesh;
pub fn quad_color(color: [f32; 4]) -> [[f32; 4]; 4] {
[color, color, color, color]
@@ -127,59 +126,6 @@ pub fn runtime_spawn(
) {
for entity in &runtime_state.get_entities() {
match entity.type_name.as_ref() {
// "Sprite" => {
//
//
//
// let mesh_name = entity.mesh.clone().unwrap();
// let raw_mesh = match runtime_state.get_mesh(mesh_name.as_str()) {
// None => {
// log::warn!("Skipping entity with invalid mesh file {:?} ", mesh_name);
// continue;
// }
// Some(mesh) => mesh,
// };
//
// let position = Position::from(entity.position.clone());
//
// let mut static_body = RigidBodyBuilder::new_static()
// .position(Isometry3::new(
// Vector3::new(position.x, position.y, position.z),
// Vector::y(),
// ))
// .build();
//
// let mesh_collider = ColliderBuilder::trimesh(
// raw_mesh.vertices.iter().map(|v| v.position()).collect(),
// raw_mesh.indices.clone(),
// )
// .build();
//
// let gpu_mesh_buffer = renderer
// .upload_mesh_to_buffer(
// raw_mesh,
// Some(wgpu::Color {
// r: 1.0,
// g: 0.7,
// b: 0.3,
// a: 1.0,
// }),
// )
// .unwrap();
//
// let entity: Entity = cmd.push((
// position,
// gpu_mesh_buffer,
// Physics {
// rigid_body: static_body,
// rigid_body_handle: None,
// },
// Collider {
// collider: mesh_collider,
// collider_handle: None,
// },
// ));
// }
"PhysicsEntity" => {
let mesh_name = entity.mesh.as_ref().unwrap();
let raw_mesh = match runtime_state.get_mesh(mesh_name.as_str()) {
@@ -198,10 +144,6 @@ pub fn runtime_spawn(
let collider = ColliderBuilder::capsule_y(2.0, 1.0).build();
//let mut vec = Vec::new();
//vec.push()
let gpu_mesh_buffer = renderer
.upload_mesh_to_buffer(
raw_mesh,
@@ -219,7 +161,7 @@ pub fn runtime_spawn(
let mut dynamic_body = RigidBodyBuilder::new_dynamic()
.can_sleep(false)
.mass(100.0)
.translation(Vector3::new(position.x, position.y, position.z))
.translation(position.x, position.y, position.z)
.build();
let entity: Entity = cmd.push((
@@ -236,7 +178,7 @@ pub fn runtime_spawn(
ImguiGenericOutputLine::new("wahoo! from a physics entity".to_string()),
));
}
"StaticMesh" => {
"Terrain" => {
let mesh_name = entity.mesh.clone().unwrap();
let raw_mesh = match runtime_state.get_mesh(mesh_name.as_str()) {
None => {