- File Changes
 - .gitignore
 - Cargo.toml
 - src/animator.rs
 - src/components.rs
 - src/keyboard.rs
 - src/physics.rs
 - assets/bardo.png
 - assets/darkdimension.png
 - assets/reaper.png
 - src/main.rs
 - src/renderer.rs
 
- assets
 - 
     src
    
- animator.rs
 - components.rs
 - keyboard.rs
 - main.rs
 - physics.rs
 - renderer.rs
 
 - .gitignore
 - Cargo.toml
 
+4
        -32
         
        src/main.rs
      | 1 | 1 | 
                    
                   | 
              
| 2 | 2 | 
                    
                   | 
              
| 3 | 3 | 
                    
                   | 
              
| 4 | 4 | 
                    
                   | 
              
| 5 | 
                    
                   | 
              |
| 5 | 6 | 
                    
                   | 
              
| 6 | 
                    
                   | 
              |
| 7 | 7 | 
                    
                   | 
              
| 8 | 8 | 
                    
                   | 
              
| 9 | 
                    
                   | 
              |
| 9 | 
                    
                   | 
              |
| 10 | 10 | 
                    
                   | 
              
| 11 | 11 | 
                    
                   | 
              
| 12 | 12 | 
                    
                   | 
              
| 13 | 13 | 
                    
                   | 
              
| 14 | 14 | 
                    
                   | 
              
| 15 | 15 | 
                    
                   | 
              
| 16 | 16 | 
                    
                   | 
              
| 17 | 17 | 
                    
                   | 
              
| 18 | 18 | 
                    
                   | 
              
| 19 | 19 | 
                    
                   | 
              
| 20 | 20 | 
                    
                   | 
              
| 21 | 21 | 
                    
                   | 
              
| 22 | 22 | 
                    
                   | 
              
| 23 | 23 | 
                    
                   | 
              
| 24 | 24 | 
                    
                   | 
              
| 25 | 25 | 
                    
                   | 
              
| 26 | 26 | 
                    
                   | 
              
| 27 | 27 | 
                    
                   | 
              
| 28 | 28 | 
                    
                   | 
              
| 29 | 29 | 
                    
                   | 
              
| 30 | 30 | 
                    
                   | 
              
| 31 | 31 | 
                    
                   | 
              
| 32 | 32 | 
                    
                   | 
              
| 33 | 33 | 
                    
                   | 
              
| 34 | 34 | 
                    
                   | 
              
| 35 | 35 | 
                    
                   | 
              
| 36 | 36 | 
                    
                   | 
              
| 37 | 37 | 
                    
                   | 
              
| 38 | 38 | 
                    
                   | 
              
| 39 | 39 | 
                    
                   | 
              
| 40 | 40 | 
                    
                   | 
              
| 41 | 41 | 
                    
                   | 
              
| 42 | 42 | 
                    
                   | 
              
| 43 | 43 | 
                    
                   | 
              
| 44 | 44 | 
                    
                   | 
              
| 45 | 45 | 
                    
                   | 
              
| 46 | 46 | 
                    
                   | 
              
| 47 | 47 | 
                    
                   | 
              
| 48 | 48 | 
                    
                   | 
              
| 49 | 49 | 
                    
                   | 
              
| 50 | 50 | 
                    
                   | 
              
| 51 | 51 | 
                    
                   | 
              
| 52 | 52 | 
                    
                   | 
              
| 53 | 53 | 
                    
                   | 
              
| 54 | 54 | 
                    
                   | 
              
| 55 | 55 | 
                    
                   | 
              
| 56 | 56 | 
                    
                   | 
              
| 57 | 57 | 
                    
                   | 
              
| 58 | 58 | 
                    
                   | 
              
| 59 | 59 | 
                    
                   | 
              
| 60 | 60 | 
                    
                   | 
              
| 61 | 
                    
                   | 
              |
| 62 | 
                    
                   | 
              |
| 63 | 
                    
                   | 
              |
| 64 | 
                    
                   | 
              |
| 65 | 
                    
                   | 
              |
| 66 | 
                    
                   | 
              |
| 67 | 
                    
                   | 
              |
| 68 | 
                    
                   | 
              |
| 69 | 
                    
                   | 
              |
| 70 | 
                    
                   | 
              |
| 71 | 
                    
                   | 
              |
| 72 | 
                    
                   | 
              |
| 73 | 
                    
                   | 
              |
| 74 | 
                    
                   | 
              |
| 75 | 
                    
                   | 
              |
| 76 | 
                    
                   | 
              |
| 77 | 
                    
                   | 
              |
| 78 | 
                    
                   | 
              |
| 79 | 
                    
                   | 
              |
| 80 | 
                    
                   | 
              |
| 81 | 
                    
                   | 
              |
| 82 | 
                    
                   | 
              |
| 83 | 
                    
                   | 
              |
| 84 | 
                    
                   | 
              |
| 85 | 
                    
                   | 
              |
| 86 | 
                    
                   | 
              |
| 87 | 
                    
                   | 
              |
| 88 | 
                    
                   | 
              |
| 89 | 
                    
                   | 
              |
| 90 | 61 | 
                    
                   | 
              
| 91 | 62 | 
                    
                   | 
              
| 92 | 63 | 
                    
                   | 
              
| 93 | 64 | 
                    
                   | 
              
| 94 | 65 | 
                    
                   | 
              
| 95 | 66 | 
                    
                   | 
              
| 96 | 67 | 
                    
                   | 
              
| 97 | 68 | 
                    
                   | 
              
| 98 | 69 | 
                    
                   | 
              
| 99 | 70 | 
                    
                   | 
              
| 100 | 71 | 
                    
                   | 
              
| 101 | 72 | 
                    
                   | 
              
| 102 | 73 | 
                    
                   | 
              
| 103 | 74 | 
                    
                   | 
              
| 104 | 75 | 
                    
                   | 
              
| 105 | 76 | 
                    
                   | 
              
| 106 | 77 | 
                    
                   | 
              
| 107 | 78 | 
                    
                   | 
              
| 108 | 79 | 
                    
                   | 
              
| 109 | 80 | 
                    
                   | 
              
| 110 | 81 | 
                    
                   | 
              
| 111 | 82 | 
                    
                   | 
              
| 112 | 83 | 
                    
                   | 
              
| 113 | 84 | 
                    
                   | 
              
| 114 | 85 | 
                    
                   | 
              
| 86 | 
                    
                   | 
              |
| 115 | 87 | 
                    
                   | 
              
| 116 | 88 | 
                    
                   | 
              
| 117 | 89 | 
                    
                   | 
              
| 118 | 90 | 
                    
                   | 
              
| 119 | 91 | 
                    
                   | 
              
| 120 | 92 | 
                    
                   | 
              
| 121 | 93 | 
                    
                   | 
              
| 122 | 94 | 
                    
                   | 
              
| 123 | 95 | 
                    
                   | 
              
| 124 | 96 | 
                    
                   | 
              
| 125 | 97 | 
                    
                   | 
              
| 126 | 98 | 
                    
                   | 
              
| 127 | 99 | 
                    
                   | 
              
| 128 | 100 | 
                    
                   | 
              
| 129 | 101 | 
                    
                   | 
              
| 130 | 102 | 
                    
                   | 
              
| 131 | 103 | 
                    
                   | 
              
| 132 | 104 | 
                    
                   | 
              
| 133 | 105 | 
                    
                   | 
              
| 134 | 106 | 
                    
                   | 
              
| 135 | 107 | 
                    
                   | 
              
| 136 | 108 | 
                    
                   | 
              
| 137 | 109 | 
                    
                   | 
              
| 138 | 110 | 
                    
                   | 
              
| 139 | 111 | 
                    
                   | 
              
| 140 | 112 | 
                    
                   | 
              
| 141 | 113 | 
                    
                   | 
              
| 142 | 114 | 
                    
                   | 
              
| 143 | 115 | 
                    
                   | 
              
| 144 | 116 | 
                    
                   | 
              
| 145 | 117 | 
                    
                   | 
              
| 146 | 118 | 
                    
                   | 
              
| 147 | 119 | 
                    
                   | 
              
| 148 | 120 | 
                    
                   | 
              
| 149 | 121 | 
                    
                   | 
              
| 150 | 122 | 
                    
                   | 
              
| 151 | 123 | 
                    
                   | 
              
| 152 | 124 | 
                    
                   | 
              
| 153 | 125 | 
                    
                   | 
              
| 154 | 126 | 
                    
                   | 
              
| 155 | 127 | 
                    
                   | 
              
| 156 | 128 | 
                    
                   | 
              
| 157 | 129 | 
                    
                   | 
              
| 158 | 130 | 
                    
                   | 
              
| 159 | 131 | 
                    
                   | 
              
| 160 | 132 | 
                    
                   | 
              
| 161 | 133 | 
                    
                   | 
              
| 162 | 134 | 
                    
                   | 
              
| 163 | 135 | 
                    
                   | 
              
| 164 | 136 | 
                    
                   | 
              
| 165 | 137 | 
                    
                   | 
              
| 166 | 138 | 
                    
                   | 
              
| 167 | 139 | 
                    
                   | 
              
| 168 | 140 | 
                    
                   | 
              
| 169 | 141 | 
                    
                   | 
              
| 170 | 142 | 
                    
                   | 
              
| 171 | 143 | 
                    
                   | 
              
| 172 | 144 | 
                    
                   | 
              
| 173 | 145 | 
                    
                   | 
              
| 174 | 146 | 
                    
                   | 
              
| 175 | 147 | 
                    
                   | 
              
| 176 | 148 | 
                    
                   | 
              
| 177 | 149 | 
                    
                   | 
              
| 178 | 150 | 
                    
                   | 
              
| 179 | 151 | 
                    
                   | 
              
| 180 | 152 | 
                    
                   | 
              
| 181 | 153 | 
                    
                   | 
              
| 182 | 154 | 
                    
                   | 
              
| 183 | 155 | 
                    
                   | 
              
| 184 | 156 | 
                    
                   | 
              
| 185 | 
                    
                   | 
              |
| 157 | 
                    
                   | 
              |
| 186 | 158 | 
                    
                   | 
              
| 187 | 159 | 
                    
                   | 
              
| 188 | 160 | 
                    
                   | 
              
| 189 | 161 | 
                    
                   | 
              
| 190 | 162 | 
                    
                   | 
              
| 191 | 163 | 
                    
                   | 
              
| 192 | 164 | 
                    
                   | 
              
+37
        -0
         
        src/renderer.rs
      | 1 | 
                    
                   | 
              |
| 2 | 
                    
                   | 
              |
| 3 | 
                    
                   | 
              |
| 4 | 
                    
                   | 
              |
| 5 | 
                    
                   | 
              |
| 6 | 
                    
                   | 
              |
| 7 | 
                    
                   | 
              |
| 8 | 
                    
                   | 
              |
| 9 | 
                    
                   | 
              |
| 10 | 
                    
                   | 
              |
| 11 | 
                    
                   | 
              |
| 12 | 
                    
                   | 
              |
| 13 | 
                    
                   | 
              |
| 14 | 
                    
                   | 
              |
| 15 | 
                    
                   | 
              |
| 16 | 
                    
                   | 
              |
| 17 | 
                    
                   | 
              |
| 18 | 
                    
                   | 
              |
| 19 | 
                    
                   | 
              |
| 20 | 
                    
                   | 
              |
| 21 | 
                    
                   | 
              |
| 22 | 
                    
                   | 
              |
| 23 | 
                    
                   | 
              |
| 24 | 
                    
                   | 
              |
| 25 | 
                    
                   | 
              |
| 26 | 
                    
                   | 
              |
| 27 | 
                    
                   | 
              |
| 28 | 
                    
                   | 
              |
| 29 | 
                    
                   | 
              |
| 30 | 
                    
                   | 
              |
| 31 | 
                    
                   | 
              |
| 32 | 
                    
                   | 
              |
| 33 | 
                    
                   | 
              |
| 34 | 
                    
                   | 
              |
| 35 | 
                    
                   | 
              |
| 36 | 
                    
                   | 
              |
| 37 | 
                    
                   | 
              
+4
        -32
         
        src/main.rs
      | 1 | 
      
     | 
    1 | 
      
     | 
              
| 2 | 
      
     | 
    2 | 
      
     | 
              
| 3 | 
      
     | 
    3 | 
      
     | 
              
| 4 | 
      
     | 
    4 | 
      
     | 
              
| 5 | 
      
     | 
              ||
| 5 | 
      
     | 
    6 | 
      
     | 
              
| 6 | 
      
     | 
    ||
| 7 | 
      
     | 
    7 | 
      
     | 
              
| 8 | 
      
     | 
    8 | 
      
     | 
              
| 9 | 
      
     | 
    9 | 
      
     | 
              
| 10 | 
      
     | 
    10 | 
      
     | 
              
| 11 | 
      
     | 
    11 | 
      
     | 
              
| 12 | 
      
     | 
    12 | 
      
     | 
              
| 13 | 
      
     | 
    13 | 
      
     | 
              
| 14 | 
      
     | 
    14 | 
      
     | 
              
| 15 | 
      
     | 
    15 | 
      
     | 
              
| 16 | 
      
     | 
    16 | 
      
     | 
              
| 17 | 
      
     | 
    17 | 
      
     | 
              
| 18 | 
      
     | 
    18 | 
      
     | 
              
| 19 | 
      
     | 
    19 | 
      
     | 
              
| 20 | 
      
     | 
    20 | 
      
     | 
              
| 21 | 
      
     | 
    21 | 
      
     | 
              
| 22 | 
      
     | 
    22 | 
      
     | 
              
| 23 | 
      
     | 
    23 | 
      
     | 
              
| 24 | 
      
     | 
    24 | 
      
     | 
              
| 25 | 
      
     | 
    25 | 
      
     | 
              
| 26 | 
      
     | 
    26 | 
      
     | 
              
| 27 | 
      
     | 
    27 | 
      
     | 
              
| 28 | 
      
     | 
    28 | 
      
     | 
              
| 29 | 
      
     | 
    29 | 
      
     | 
              
| 30 | 
      
     | 
    30 | 
      
     | 
              
| 31 | 
      
     | 
    31 | 
      
     | 
              
| 32 | 
      
     | 
    32 | 
      
     | 
              
| 33 | 
      
     | 
    33 | 
      
     | 
              
| 34 | 
      
     | 
    34 | 
      
     | 
              
| 35 | 
      
     | 
    35 | 
      
     | 
              
| 36 | 
      
     | 
    36 | 
      
     | 
              
| 37 | 
      
     | 
    37 | 
      
     | 
              
| 38 | 
      
     | 
    38 | 
      
     | 
              
| 39 | 
      
     | 
    39 | 
      
     | 
              
| 40 | 
      
     | 
    40 | 
      
     | 
              
| 41 | 
      
     | 
    41 | 
      
     | 
              
| 42 | 
      
     | 
    42 | 
      
     | 
              
| 43 | 
      
     | 
    43 | 
      
     | 
              
| 44 | 
      
     | 
    44 | 
      
     | 
              
| 45 | 
      
     | 
    45 | 
      
     | 
              
| 46 | 
      
     | 
    46 | 
      
     | 
              
| 47 | 
      
     | 
    47 | 
      
     | 
              
| 48 | 
      
     | 
    48 | 
      
     | 
              
| 49 | 
      
     | 
    49 | 
      
     | 
              
| 50 | 
      
     | 
    50 | 
      
     | 
              
| 51 | 
      
     | 
    51 | 
      
     | 
              
| 52 | 
      
     | 
    52 | 
      
     | 
              
| 53 | 
      
     | 
    53 | 
      
     | 
              
| 54 | 
      
     | 
    54 | 
      
     | 
              
| 55 | 
      
     | 
    55 | 
      
     | 
              
| 56 | 
      
     | 
    56 | 
      
     | 
              
| 57 | 
      
     | 
    57 | 
      
     | 
              
| 58 | 
      
     | 
    58 | 
      
     | 
              
| 59 | 
      
     | 
    59 | 
      
     | 
              
| 60 | 
      
     | 
    60 | 
      
     | 
              
| 61 | 
      
     | 
    ||
| 62 | 
      
     | 
    ||
| 63 | 
      
     | 
    ||
| 64 | 
      
     | 
    ||
| 65 | 
      
     | 
    ||
| 66 | 
      
     | 
    ||
| 67 | 
      
     | 
    ||
| 68 | 
      
     | 
    ||
| 69 | 
      
     | 
    ||
| 70 | 
      
     | 
    ||
| 71 | 
      
     | 
    ||
| 72 | 
      
     | 
    ||
| 73 | 
      
     | 
    ||
| 74 | 
      
     | 
    ||
| 75 | 
      
     | 
    ||
| 76 | 
      
     | 
    ||
| 77 | 
      
     | 
    ||
| 78 | 
      
     | 
    ||
| 79 | 
      
     | 
    ||
| 80 | 
      
     | 
    ||
| 81 | 
      
     | 
    ||
| 82 | 
      
     | 
    ||
| 83 | 
      
     | 
    ||
| 84 | 
      
     | 
    ||
| 85 | 
      
     | 
    ||
| 86 | 
      
     | 
    ||
| 87 | 
      
     | 
    ||
| 88 | 
      
     | 
    ||
| 89 | 
      
     | 
    ||
| 90 | 
      
     | 
    61 | 
      
     | 
              
| 91 | 
      
     | 
    62 | 
      
     | 
              
| 92 | 
      
     | 
    63 | 
      
     | 
              
| 93 | 
      
     | 
    64 | 
      
     | 
              
| 94 | 
      
     | 
    65 | 
      
     | 
              
| 95 | 
      
     | 
    66 | 
      
     | 
              
| 96 | 
      
     | 
    67 | 
      
     | 
              
| 97 | 
      
     | 
    68 | 
      
     | 
              
| 98 | 
      
     | 
    69 | 
      
     | 
              
| 99 | 
      
     | 
    70 | 
      
     | 
              
| 100 | 
      
     | 
    71 | 
      
     | 
              
| 101 | 
      
     | 
    72 | 
      
     | 
              
| 102 | 
      
     | 
    73 | 
      
     | 
              
| 103 | 
      
     | 
    74 | 
      
     | 
              
| 104 | 
      
     | 
    75 | 
      
     | 
              
| 105 | 
      
     | 
    76 | 
      
     | 
              
| 106 | 
      
     | 
    77 | 
      
     | 
              
| 107 | 
      
     | 
    78 | 
      
     | 
              
| 108 | 
      
     | 
    79 | 
      
     | 
              
| 109 | 
      
     | 
    80 | 
      
     | 
              
| 110 | 
      
     | 
    81 | 
      
     | 
              
| 111 | 
      
     | 
    82 | 
      
     | 
              
| 112 | 
      
     | 
    83 | 
      
     | 
              
| 113 | 
      
     | 
    84 | 
      
     | 
              
| 114 | 
      
     | 
    85 | 
      
     | 
              
| 86 | 
      
     | 
              ||
| 115 | 
      
     | 
    87 | 
      
     | 
              
| 116 | 
      
     | 
    88 | 
      
     | 
              
| 117 | 
      
     | 
    89 | 
      
     | 
              
| 118 | 
      
     | 
    90 | 
      
     | 
              
| 119 | 
      
     | 
    91 | 
      
     | 
              
| 120 | 
      
     | 
    92 | 
      
     | 
              
| 121 | 
      
     | 
    93 | 
      
     | 
              
| 122 | 
      
     | 
    94 | 
      
     | 
              
| 123 | 
      
     | 
    95 | 
      
     | 
              
| 124 | 
      
     | 
    96 | 
      
     | 
              
| 125 | 
      
     | 
    97 | 
      
     | 
              
| 126 | 
      
     | 
    98 | 
      
     | 
              
| 127 | 
      
     | 
    99 | 
      
     | 
              
| 128 | 
      
     | 
    100 | 
      
     | 
              
| 129 | 
      
     | 
    101 | 
      
     | 
              
| 130 | 
      
     | 
    102 | 
      
     | 
              
| 131 | 
      
     | 
    103 | 
      
     | 
              
| 132 | 
      
     | 
    104 | 
      
     | 
              
| 133 | 
      
     | 
    105 | 
      
     | 
              
| 134 | 
      
     | 
    106 | 
      
     | 
              
| 135 | 
      
     | 
    107 | 
      
     | 
              
| 136 | 
      
     | 
    108 | 
      
     | 
              
| 137 | 
      
     | 
    109 | 
      
     | 
              
| 138 | 
      
     | 
    110 | 
      
     | 
              
| 139 | 
      
     | 
    111 | 
      
     | 
              
| 140 | 
      
     | 
    112 | 
      
     | 
              
| 141 | 
      
     | 
    113 | 
      
     | 
              
| 142 | 
      
     | 
    114 | 
      
     | 
              
| 143 | 
      
     | 
    115 | 
      
     | 
              
| 144 | 
      
     | 
    116 | 
      
     | 
              
| 145 | 
      
     | 
    117 | 
      
     | 
              
| 146 | 
      
     | 
    118 | 
      
     | 
              
| 147 | 
      
     | 
    119 | 
      
     | 
              
| 148 | 
      
     | 
    120 | 
      
     | 
              
| 149 | 
      
     | 
    121 | 
      
     | 
              
| 150 | 
      
     | 
    122 | 
      
     | 
              
| 151 | 
      
     | 
    123 | 
      
     | 
              
| 152 | 
      
     | 
    124 | 
      
     | 
              
| 153 | 
      
     | 
    125 | 
      
     | 
              
| 154 | 
      
     | 
    126 | 
      
     | 
              
| 155 | 
      
     | 
    127 | 
      
     | 
              
| 156 | 
      
     | 
    128 | 
      
     | 
              
| 157 | 
      
     | 
    129 | 
      
     | 
              
| 158 | 
      
     | 
    130 | 
      
     | 
              
| 159 | 
      
     | 
    131 | 
      
     | 
              
| 160 | 
      
     | 
    132 | 
      
     | 
              
| 161 | 
      
     | 
    133 | 
      
     | 
              
| 162 | 
      
     | 
    134 | 
      
     | 
              
| 163 | 
      
     | 
    135 | 
      
     | 
              
| 164 | 
      
     | 
    136 | 
      
     | 
              
| 165 | 
      
     | 
    137 | 
      
     | 
              
| 166 | 
      
     | 
    138 | 
      
     | 
              
| 167 | 
      
     | 
    139 | 
      
     | 
              
| 168 | 
      
     | 
    140 | 
      
     | 
              
| 169 | 
      
     | 
    141 | 
      
     | 
              
| 170 | 
      
     | 
    142 | 
      
     | 
              
| 171 | 
      
     | 
    143 | 
      
     | 
              
| 172 | 
      
     | 
    144 | 
      
     | 
              
| 173 | 
      
     | 
    145 | 
      
     | 
              
| 174 | 
      
     | 
    146 | 
      
     | 
              
| 175 | 
      
     | 
    147 | 
      
     | 
              
| 176 | 
      
     | 
    148 | 
      
     | 
              
| 177 | 
      
     | 
    149 | 
      
     | 
              
| 178 | 
      
     | 
    150 | 
      
     | 
              
| 179 | 
      
     | 
    151 | 
      
     | 
              
| 180 | 
      
     | 
    152 | 
      
     | 
              
| 181 | 
      
     | 
    153 | 
      
     | 
              
| 182 | 
      
     | 
    154 | 
      
     | 
              
| 183 | 
      
     | 
    155 | 
      
     | 
              
| 184 | 
      
     | 
    156 | 
      
     | 
              
| 185 | 
      
     | 
    157 | 
      
     | 
              
| 186 | 
      
     | 
    158 | 
      
     | 
              
| 187 | 
      
     | 
    159 | 
      
     | 
              
| 188 | 
      
     | 
    160 | 
      
     | 
              
| 189 | 
      
     | 
    161 | 
      
     | 
              
| 190 | 
      
     | 
    162 | 
      
     | 
              
| 191 | 
      
     | 
    163 | 
      
     | 
              
| 192 | 
      
     | 
    164 | 
      
     | 
              
+37
        -0
         
        src/renderer.rs
      | 1 | 
      
     | 
              ||
| 2 | 
      
     | 
              ||
| 3 | 
      
     | 
              ||
| 4 | 
      
     | 
              ||
| 5 | 
      
     | 
              ||
| 6 | 
      
     | 
              ||
| 7 | 
      
     | 
              ||
| 8 | 
      
     | 
              ||
| 9 | 
      
     | 
              ||
| 10 | 
      
     | 
              ||
| 11 | 
      
     | 
              ||
| 12 | 
      
     | 
              ||
| 13 | 
      
     | 
              ||
| 14 | 
      
     | 
              ||
| 15 | 
      
     | 
              ||
| 16 | 
      
     | 
              ||
| 17 | 
      
     | 
              ||
| 18 | 
      
     | 
              ||
| 19 | 
      
     | 
              ||
| 20 | 
      
     | 
              ||
| 21 | 
      
     | 
              ||
| 22 | 
      
     | 
              ||
| 23 | 
      
     | 
              ||
| 24 | 
      
     | 
              ||
| 25 | 
      
     | 
              ||
| 26 | 
      
     | 
              ||
| 27 | 
      
     | 
              ||
| 28 | 
      
     | 
              ||
| 29 | 
      
     | 
              ||
| 30 | 
      
     | 
              ||
| 31 | 
      
     | 
              ||
| 32 | 
      
     | 
              ||
| 33 | 
      
     | 
              ||
| 34 | 
      
     | 
              ||
| 35 | 
      
     | 
              ||
| 36 | 
      
     | 
              ||
| 37 | 
      
     | 
              
/target**/*.rs.bk
[package]name = "game-tutorial"version = "0.1.0"authors = ["Sunjay Varma <[email protected]>"]edition = "2018"[dependencies]specs = "0.14"specs-derive = "0.4"[dependencies.sdl2]version = "0.32.1"default-features = falsefeatures = ["image"]
use specs::prelude::*;use crate::components::*;pub struct Animator;impl<'a> System<'a> for Animator {type SystemData = (WriteStorage<'a, MovementAnimation>,WriteStorage<'a, Sprite>,ReadStorage<'a, Velocity>,);fn run(&mut self, mut data: Self::SystemData) {use self::Direction::*;//TODO: This code can be made nicer and more idiomatic using more pattern matching.// Look up "rust irrefutable patterns" and use them here.for (anim, sprite, vel) in (&mut data.0, &mut data.1, &data.2).join() {if vel.speed == 0 {continue;}let frames = match vel.direction {Left => &anim.left_frames,Right => &anim.right_frames,Up => &anim.up_frames,Down => &anim.down_frames,};anim.current_frame = (anim.current_frame + 1) % frames.len();*sprite = frames[anim.current_frame].clone();}}}
use specs::prelude::*;use specs_derive::Component;use sdl2::rect::{Point, Rect};#[derive(Debug, Clone, Copy, PartialEq, Eq)]pub enum Direction {Up,Down,Left,Right,}#[derive(Component, Debug, Default)]#[storage(NullStorage)]pub struct KeyboardControlled;/// The current position of a given entity#[derive(Component, Debug)]#[storage(VecStorage)]pub struct Position(pub Point);/// The current speed and direction of a given entity#[derive(Component, Debug)]#[storage(VecStorage)]pub struct Velocity {pub speed: i32,pub direction: Direction,}#[derive(Component, Debug, Clone)]#[storage(VecStorage)]pub struct Sprite {/// The specific spritesheet to render frompub spritesheet: usize,/// The current region of the spritesheet to be renderedpub region: Rect,}#[derive(Component, Debug)]#[storage(VecStorage)]pub struct MovementAnimation {// The current frame in the animation of the direction this entity is moving inpub current_frame: usize,pub up_frames: Vec<Sprite>,pub down_frames: Vec<Sprite>,pub left_frames: Vec<Sprite>,pub right_frames: Vec<Sprite>,}
use specs::prelude::*;use crate::components::*;use super::MovementCommand;const PLAYER_MOVEMENT_SPEED: i32 = 20;pub struct Keyboard;impl<'a> System<'a> for Keyboard {type SystemData = (ReadExpect<'a, Option<MovementCommand>>,ReadStorage<'a, KeyboardControlled>,WriteStorage<'a, Velocity>,);fn run(&mut self, mut data: Self::SystemData) {//TODO: This code can be made nicer and more idiomatic using more pattern matching.// Look up "rust irrefutable patterns" and use them here.let movement_command = match &*data.0 {Some(movement_command) => movement_command,None => return, // no change};for (_, vel) in (&data.1, &mut data.2).join() {match movement_command {&MovementCommand::Move(direction) => {vel.speed = PLAYER_MOVEMENT_SPEED;vel.direction = direction;},MovementCommand::Stop => vel.speed = 0,}}}}
mod components;mod physics;mod animator;mod keyboard;mod renderer;use sdl2::event::Event;use sdl2::keyboard::Keycode;use sdl2::pixels::Color;use sdl2::rect::{Point, Rect};// "self" imports the "image" module itself as well as everything else we listeduse sdl2::image::{self, LoadTexture, InitFlag};use specs::prelude::*;use std::time::Duration;use crate::components::*;pub enum MovementCommand {Stop,Move(Direction),}/// Returns the row of the spritesheet corresponding to the given directionfn direction_spritesheet_row(direction: Direction) -> i32 {use self::Direction::*;match direction {Up => 3,Down => 0,Left => 1,Right => 2,}}/// Create animation frames for the standard character spritesheetfn character_animation_frames(spritesheet: usize, top_left_frame: Rect, direction: Direction) -> Vec<Sprite> {// All assumptions about the spritesheets are now encapsulated in this function instead of in// the design of our entire system. We can always replace this function, but replacing the// entire system is harder.let (frame_width, frame_height) = top_left_frame.size();let y_offset = top_left_frame.y() + frame_height as i32 * direction_spritesheet_row(direction);let mut frames = Vec::new();for i in 0..3 {frames.push(Sprite {spritesheet,region: Rect::new(top_left_frame.x() + frame_width as i32 * i,y_offset,frame_width,frame_height,),})}frames}fn main() -> Result<(), String> {let sdl_context = sdl2::init()?;let video_subsystem = sdl_context.video()?;// Leading "_" tells Rust that this is an unused variable that we don't care about. It has to// stay unused because if we don't have any variable at all then Rust will treat it as a// temporary value and drop it right away!let _image_context = image::init(InitFlag::PNG | InitFlag::JPG)?;let window = video_subsystem.window("game tutorial", 800, 600).position_centered().build().expect("could not initialize video subsystem");let mut canvas = window.into_canvas().build().expect("could not make a canvas");let texture_creator = canvas.texture_creator();let mut dispatcher = DispatcherBuilder::new().with(keyboard::Keyboard, "Keyboard", &[]).with(physics::Physics, "Physics", &["Keyboard"]).with(animator::Animator, "Animator", &["Keyboard"]).build();let mut world = World::new();dispatcher.setup(&mut world.res);renderer::SystemData::setup(&mut world.res);// Initialize resourcelet movement_command: Option<MovementCommand> = None;world.add_resource(movement_command);let textures = [texture_creator.load_texture("assets/bardo.png")?,];// First texture in textures arraylet player_spritesheet = 0;let player_top_left_frame = Rect::new(0, 0, 26, 36);let player_animation = MovementAnimation {current_frame: 0,up_frames: character_animation_frames(player_spritesheet, player_top_left_frame, Direction::Up),down_frames: character_animation_frames(player_spritesheet, player_top_left_frame, Direction::Down),left_frames: character_animation_frames(player_spritesheet, player_top_left_frame, Direction::Left),right_frames: character_animation_frames(player_spritesheet, player_top_left_frame, Direction::Right),};world.create_entity().with(KeyboardControlled).with(Position(Point::new(0, 0))).with(Velocity {speed: 0, direction: Direction::Right}).with(player_animation.right_frames[0].clone()).with(player_animation).build();let mut event_pump = sdl_context.event_pump()?;let mut i = 0;'running: loop {// None - no change, Some(MovementCommand) - perform movementlet mut movement_command = None;// Handle eventsfor event in event_pump.poll_iter() {match event {Event::Quit {..} |Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {break 'running;},Event::KeyDown { keycode: Some(Keycode::Left), repeat: false, .. } => {movement_command = Some(MovementCommand::Move(Direction::Left));},Event::KeyDown { keycode: Some(Keycode::Right), repeat: false, .. } => {movement_command = Some(MovementCommand::Move(Direction::Right));},Event::KeyDown { keycode: Some(Keycode::Up), repeat: false, .. } => {movement_command = Some(MovementCommand::Move(Direction::Up));},Event::KeyDown { keycode: Some(Keycode::Down), repeat: false, .. } => {movement_command = Some(MovementCommand::Move(Direction::Down));},Event::KeyUp { keycode: Some(Keycode::Left), repeat: false, .. } |Event::KeyUp { keycode: Some(Keycode::Right), repeat: false, .. } |Event::KeyUp { keycode: Some(Keycode::Up), repeat: false, .. } |Event::KeyUp { keycode: Some(Keycode::Down), repeat: false, .. } => {movement_command = Some(MovementCommand::Stop);},_ => {}}}*world.write_resource() = movement_command;// Updatei = (i + 1) % 255;dispatcher.dispatch(&mut world.res);world.maintain();// Renderrenderer::render(&mut canvas, Color::RGB(i, 64, 255 - i), &textures, world.system_data())?;// Time management!::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 20));}Ok(())}
use specs::prelude::*;use crate::components::*;pub struct Physics;impl<'a> System<'a> for Physics {type SystemData = (WriteStorage<'a, Position>, ReadStorage<'a, Velocity>);fn run(&mut self, mut data: Self::SystemData) {use self::Direction::*;//TODO: This code can be made nicer and more idiomatic using more pattern matching.// Look up "rust irrefutable patterns" and use them here.for (pos, vel) in (&mut data.0, &data.1).join() {match vel.direction {Left => {pos.0 = pos.0.offset(-vel.speed, 0);},Right => {pos.0 = pos.0.offset(vel.speed, 0);},Up => {pos.0 = pos.0.offset(0, -vel.speed);},Down => {pos.0 = pos.0.offset(0, vel.speed);},}}}}
use specs::prelude::*;use sdl2::rect::{Point, Rect};use sdl2::pixels::Color;use sdl2::render::{WindowCanvas, Texture};use crate::components::*;// Type alias for the data needed by the rendererpub type SystemData<'a> = (ReadStorage<'a, Position>,ReadStorage<'a, Sprite>,);pub fn render(canvas: &mut WindowCanvas,background: Color,textures: &[Texture],data: SystemData,) -> Result<(), String> {canvas.set_draw_color(background);canvas.clear();let (width, height) = canvas.output_size()?;for (pos, sprite) in (&data.0, &data.1).join() {let current_frame = sprite.region;// Treat the center of the screen as the (0, 0) coordinatelet screen_position = pos.0 + Point::new(width as i32 / 2, height as i32 / 2);let screen_rect = Rect::from_center(screen_position, current_frame.width(), current_frame.height());canvas.copy(&textures[sprite.spritesheet], current_frame, screen_rect)?;}canvas.present();Ok(())}