diff --git a/model/haunted_mansion/hauntedMansionCollision.blend b/model/haunted_mansion/hauntedMansionCollision.blend new file mode 100644 index 0000000..0443379 Binary files /dev/null and b/model/haunted_mansion/hauntedMansionCollision.blend differ diff --git a/model/haunted_mansion/hauntedMansionCollision.mtl b/model/haunted_mansion/hauntedMansionCollision.mtl new file mode 100644 index 0000000..f3cbe8f --- /dev/null +++ b/model/haunted_mansion/hauntedMansionCollision.mtl @@ -0,0 +1,2 @@ +# Blender 4.2.1 LTS MTL File: 'hauntedMansionCollision.blend' +# www.blender.org diff --git a/model/haunted_mansion/hauntedMansionCollision.obj b/model/haunted_mansion/hauntedMansionCollision.obj new file mode 100644 index 0000000..9a7dc15 --- /dev/null +++ b/model/haunted_mansion/hauntedMansionCollision.obj @@ -0,0 +1,360 @@ +# Blender 4.2.1 LTS +# www.blender.org +mtllib hauntedMansionCollision.mtl +o house-coll-display +v 9.468655 18.171686 -0.000001 +v 9.468655 -11.468163 -0.000001 +v 11.768676 6.959891 -0.000001 +v 11.768676 -0.458513 -0.000001 +v -1.959310 6.487949 0.000000 +v -1.959310 6.959890 0.000000 +v -1.959310 0.000950 0.000000 +v -1.959310 -0.458513 0.000000 +v -0.034380 -7.700261 0.000000 +v -1.639923 6.684578 0.000000 +v 0.260841 1.695189 -0.000000 +v -1.639923 -0.395491 0.000000 +v 4.497604 18.171686 -0.000000 +v 4.497604 6.487949 -0.000000 +v 4.497604 6.959890 -0.000000 +v 4.497604 0.000950 -0.000000 +v 4.497604 -0.458513 -0.000000 +v 4.178310 6.684578 -0.000000 +v 2.417353 1.695189 -0.000000 +v 9.468655 -5.209778 -0.000001 +v -0.034380 -6.403114 0.000000 +v 11.768676 -4.928789 -0.000001 +v -1.959310 -4.928789 0.000000 +v -1.639923 -4.928789 0.000000 +v 4.497604 -4.928789 -0.000000 +v 4.178310 -4.928789 -0.000000 +v -5.530122 18.171686 0.000000 +v -5.530122 -11.468163 0.000000 +v 0.516239 4.961135 -0.000000 +v 2.003563 4.961135 -0.000000 +v -5.530122 -5.209778 0.000000 +v 0.286729 -11.468163 -0.000000 +v 0.286729 -5.209778 -0.000000 +v -0.034380 -11.468163 0.000000 +v -3.538448 -5.209778 0.000000 +v -0.921080 -5.209778 0.000000 +v -4.641364 -5.209778 0.000000 +v 11.768676 11.356500 -0.000001 +v -1.959310 11.356500 0.000000 +v -1.639923 11.522879 0.000000 +v 4.497604 11.356500 -0.000000 +v 4.178310 11.522879 -0.000000 +v 0.516239 1.695189 -0.000000 +v 0.516239 -4.928789 -0.000000 +v 2.003563 -4.928789 -0.000000 +v 2.003563 1.695189 -0.000000 +v 2.614596 13.142808 -0.000000 +v -0.076209 13.142808 0.000000 +v -12.607601 2.479054 0.000001 +v -12.607601 4.197836 0.000001 +v -12.349248 0.000951 0.000001 +v -12.352005 6.487949 0.000001 +v -12.583817 1.727151 0.000001 +v -12.582272 4.799030 0.000001 +v -12.174327 7.221593 0.000001 +v -12.165005 -0.753008 0.000001 +v -7.615463 6.959890 0.000001 +v -7.615463 11.356500 0.000001 +v -7.615463 0.000951 0.000001 +v -7.615463 6.487949 0.000001 +v -7.615463 -4.928789 0.000001 +v -7.615463 -0.458513 0.000001 +v -7.615463 4.197836 0.000001 +v -7.615463 2.479054 0.000001 +v -1.959310 9.934581 0.000000 +v -1.639923 9.934581 0.000000 +v 4.497604 9.934581 -0.000000 +v 4.178310 9.934581 -0.000000 +v -1.639923 -3.482409 0.000000 +v -1.959310 -1.987983 0.000000 +v 4.497604 -1.987983 -0.000000 +v 4.178310 -3.482409 -0.000000 +v 4.178310 -1.987983 -0.000000 +v -1.959310 -3.482409 0.000000 +v 4.497604 -3.482409 -0.000000 +v -1.639923 -1.987983 0.000000 +v 9.468655 11.693382 -0.000001 +v -1.959310 11.693382 0.000000 +v 2.614596 4.961135 -0.000000 +v 4.497604 11.693382 -0.000000 +v -0.076209 4.961135 0.000000 +v -5.530122 11.693382 0.000000 +v 4.178310 -0.031970 -0.000000 +v -0.236704 4.799030 0.000000 +v -0.236704 4.197837 0.000000 +v -0.236704 2.479054 0.000000 +v -0.236704 1.727151 0.000000 +v 0.516240 13.142808 -0.000000 +v 2.003563 13.142808 -0.000000 +v 2.676960 4.561967 -0.000000 +v 2.676960 4.197836 -0.000000 +v 2.676960 2.479054 -0.000000 +v 2.676960 1.891271 -0.000000 +v -1.639923 10.952084 0.000000 +v 4.178310 10.952084 -0.000000 +v 4.497604 10.950237 -0.000000 +v -1.959310 10.952084 0.000000 +v 12.588175 0.000950 -0.000001 +v 12.588175 6.487949 -0.000001 +v 14.280035 1.677614 -0.000001 +v 14.280035 4.801496 -0.000001 +v 0.516239 2.479054 -0.000000 +v 0.516239 4.197837 -0.000000 +v 2.003563 4.197837 -0.000000 +v 2.003563 2.479054 -0.000000 +v -6.127061 6.487949 0.000000 +v -6.127061 -0.458513 0.000000 +v -6.127060 6.959890 0.000000 +v -6.127060 0.000951 0.000000 +v -3.538448 6.487949 0.000000 +v -3.538448 6.959890 0.000000 +v -3.538448 -0.458513 0.000000 +v -3.538448 0.000951 0.000000 +v -3.538448 -4.928789 0.000000 +v -3.538448 11.356500 0.000000 +v -4.641364 -4.928789 0.000000 +v -4.641364 11.356500 0.000000 +v 2.003563 -5.209778 -0.000000 +v 0.516239 -5.209778 -0.000000 +v 7.522186 -5.209778 -0.000001 +v 6.182686 -5.209778 -0.000000 +v 0.286729 -6.406253 -0.000000 +v 0.286729 -7.699028 -0.000000 +v 7.522186 -0.458513 -0.000001 +v 7.522186 6.487949 -0.000001 +v 7.522186 0.000950 -0.000001 +v 7.522186 11.693382 -0.000001 +v 7.522186 11.356500 -0.000001 +v 7.522186 -4.928789 -0.000001 +v 7.522186 6.959890 -0.000001 +v 6.182686 -0.458513 -0.000000 +v 6.182686 -4.928789 -0.000000 +v 6.182686 6.487949 -0.000000 +v 6.182686 0.000950 -0.000000 +v 6.182686 6.959890 -0.000000 +v 6.182686 11.693382 -0.000000 +v 6.182686 11.356500 -0.000000 +v 4.497604 13.394125 -0.000000 +v -4.695820 11.693382 0.000000 +v -3.505549 11.693382 0.000000 +v -1.959310 16.679245 0.000000 +v -1.959310 12.984167 0.000000 +v 2.003563 18.741804 -0.000000 +v 0.516240 18.741804 -0.000000 +v -1.577724 21.941124 0.000000 +v 5.434333 21.941124 -0.000000 +v 2.985128 12.758956 -0.000000 +v -0.446740 12.758956 0.000000 +v 3.867863 11.844486 -0.000000 +v -1.329476 11.844486 0.000000 +v -1.959310 12.032170 0.000000 +v -1.670803 12.032170 0.000000 +v 0.516240 13.474504 -0.000000 +v 2.003563 13.474504 -0.000000 +v 0.516240 16.687757 -0.000000 +v 2.003563 16.687757 -0.000000 +v 2.572726 13.474504 -0.000000 +v 2.572726 16.687757 -0.000000 +v -0.081743 13.474504 0.000000 +v -0.081743 16.687757 0.000000 +v 0.516240 17.029930 -0.000000 +v 0.516240 18.182152 -0.000000 +v -0.391281 13.212752 0.000000 +v -0.668785 12.984167 0.000000 +v -0.391281 17.029930 0.000000 +v -1.677333 16.679245 0.000000 +v -1.677333 12.984167 0.000000 +v 4.154991 12.163081 -0.000000 +v 4.497604 12.163081 -0.000000 +v 2.985128 13.382598 -0.000000 +v 5.434333 18.741804 -0.000000 +v -1.577724 18.741804 0.000000 +v -0.921202 -4.928789 0.000000 +v -0.034380 -4.928789 0.000000 +v -8.584578 2.479054 0.000001 +v -8.584578 4.197836 0.000001 +v -8.584578 7.221593 0.000001 +v -8.584578 -0.753008 0.000001 +l 9 123 +l 120 129 +l 20 120 +l 2 20 +l 32 123 +l 38 128 +l 38 3 +l 13 138 +l 1 13 +l 153 159 +l 159 160 +l 77 127 +l 9 34 +l 35 36 +l 28 34 +l 31 37 +l 28 31 +l 37 116 +l 35 114 +l 36 173 +l 21 174 +l 16 134 +l 49 50 +l 49 53 +l 52 54 +l 50 54 +l 51 53 +l 176 177 +l 55 177 +l 52 55 +l 106 108 +l 78 140 +l 78 151 +l 99 101 +l 92 93 +l 90 91 +l 14 90 +l 16 93 +l 99 125 +l 25 75 +l 25 132 +l 44 174 +l 60 106 +l 18 79 +l 30 79 +l 26 45 +l 26 72 +l 17 71 +l 17 131 +l 15 67 +l 15 135 +l 72 75 +l 71 73 +l 19 46 +l 19 83 +l 59 64 +l 59 109 +l 30 104 +l 40 94 +l 47 147 +l 47 89 +l 10 66 +l 8 70 +l 8 112 +l 124 126 +l 83 73 +l 69 74 +l 70 76 +l 84 85 +l 11 43 +l 7 87 +l 5 84 +l 86 87 +l 29 103 +l 48 88 +l 48 148 +l 29 81 +l 10 81 +l 18 68 +l 43 102 +l 46 105 +l 91 104 +l 92 105 +l 86 102 +l 85 103 +l 42 95 +l 41 137 +l 41 96 +l 95 96 +l 67 68 +l 39 97 +l 39 115 +l 94 97 +l 65 66 +l 107 109 +l 112 113 +l 62 107 +l 62 61 +l 60 63 +l 23 114 +l 23 74 +l 5 110 +l 6 111 +l 6 65 +l 58 117 +l 7 113 +l 61 116 +l 110 111 +l 98 126 +l 98 100 +l 100 101 +l 32 2 +l 44 119 +l 45 118 +l 118 121 +l 33 119 +l 33 122 +l 21 122 +l 22 129 +l 3 130 +l 4 124 +l 57 58 +l 57 108 +l 4 22 +l 163 165 +l 127 128 +l 136 137 +l 125 130 +l 133 135 +l 14 133 +l 131 134 +l 121 132 +l 82 139 +l 141 142 +l 115 140 +l 117 139 +l 144 162 +l 146 171 +l 143 171 +l 154 157 +l 157 158 +l 156 158 +l 42 149 +l 40 150 +l 150 152 +l 148 164 +l 27 82 +l 142 167 +l 151 152 +l 88 153 +l 89 154 +l 155 161 +l 143 156 +l 163 164 +l 166 167 +l 161 165 +l 141 166 +l 27 162 +l 80 136 +l 80 169 +l 1 77 +l 168 169 +l 149 168 +l 147 170 +l 138 170 +l 145 146 +l 145 172 +l 144 172 +l 155 160 +l 12 11 +l 12 76 +l 24 69 +l 24 173 +l 63 176 +l 64 175 +l 51 56 +l 56 178 +l 175 178 diff --git a/model/haunted_mansion/model_collision.h b/model/haunted_mansion/model_collision.h new file mode 100644 index 0000000..0d09b46 --- /dev/null +++ b/model/haunted_mansion/model_collision.h @@ -0,0 +1,931 @@ +#pragma once + +const vertex_position haunted_mansion_collision_position[] = { + {-18.171686f, -0.000001f, -9.468655f}, + {11.468163f, -0.000001f, -9.468655f}, + {-6.959891f, -0.000001f, -11.768676f}, + {0.458513f, -0.000001f, -11.768676f}, + {-6.487949f, 0.000000f, 1.959310f}, + {-6.959890f, 0.000000f, 1.959310f}, + {-0.000950f, 0.000000f, 1.959310f}, + {0.458513f, 0.000000f, 1.959310f}, + {7.700261f, 0.000000f, 0.034380f}, + {-6.684578f, 0.000000f, 1.639923f}, + {-1.695189f, -0.000000f, -0.260841f}, + {0.395491f, 0.000000f, 1.639923f}, + {-18.171686f, -0.000000f, -4.497604f}, + {-6.487949f, -0.000000f, -4.497604f}, + {-6.959890f, -0.000000f, -4.497604f}, + {-0.000950f, -0.000000f, -4.497604f}, + {0.458513f, -0.000000f, -4.497604f}, + {-6.684578f, -0.000000f, -4.178310f}, + {-1.695189f, -0.000000f, -2.417353f}, + {5.209778f, -0.000001f, -9.468655f}, + {6.403114f, 0.000000f, 0.034380f}, + {4.928789f, -0.000001f, -11.768676f}, + {4.928789f, 0.000000f, 1.959310f}, + {4.928789f, 0.000000f, 1.639923f}, + {4.928789f, -0.000000f, -4.497604f}, + {4.928789f, -0.000000f, -4.178310f}, + {-18.171686f, 0.000000f, 5.530122f}, + {11.468163f, 0.000000f, 5.530122f}, + {-4.961135f, -0.000000f, -0.516239f}, + {-4.961135f, -0.000000f, -2.003563f}, + {5.209778f, 0.000000f, 5.530122f}, + {11.468163f, -0.000000f, -0.286729f}, + {5.209778f, -0.000000f, -0.286729f}, + {11.468163f, 0.000000f, 0.034380f}, + {5.209778f, 0.000000f, 3.538448f}, + {5.209778f, 0.000000f, 0.921080f}, + {5.209778f, 0.000000f, 4.641364f}, + {-11.356500f, -0.000001f, -11.768676f}, + {-11.356500f, 0.000000f, 1.959310f}, + {-11.522879f, 0.000000f, 1.639923f}, + {-11.356500f, -0.000000f, -4.497604f}, + {-11.522879f, -0.000000f, -4.178310f}, + {-1.695189f, -0.000000f, -0.516239f}, + {4.928789f, -0.000000f, -0.516239f}, + {4.928789f, -0.000000f, -2.003563f}, + {-1.695189f, -0.000000f, -2.003563f}, + {-13.142808f, -0.000000f, -2.614596f}, + {-13.142808f, 0.000000f, 0.076209f}, + {-2.479054f, 0.000001f, 12.607601f}, + {-4.197836f, 0.000001f, 12.607601f}, + {-0.000951f, 0.000001f, 12.349248f}, + {-6.487949f, 0.000001f, 12.352005f}, + {-1.727151f, 0.000001f, 12.583817f}, + {-4.799030f, 0.000001f, 12.582272f}, + {-7.221593f, 0.000001f, 12.174327f}, + {0.753008f, 0.000001f, 12.165005f}, + {-6.959890f, 0.000001f, 7.615463f}, + {-11.356500f, 0.000001f, 7.615463f}, + {-0.000951f, 0.000001f, 7.615463f}, + {-6.487949f, 0.000001f, 7.615463f}, + {4.928789f, 0.000001f, 7.615463f}, + {0.458513f, 0.000001f, 7.615463f}, + {-4.197836f, 0.000001f, 7.615463f}, + {-2.479054f, 0.000001f, 7.615463f}, + {-9.934581f, 0.000000f, 1.959310f}, + {-9.934581f, 0.000000f, 1.639923f}, + {-9.934581f, -0.000000f, -4.497604f}, + {-9.934581f, -0.000000f, -4.178310f}, + {3.482409f, 0.000000f, 1.639923f}, + {1.987983f, 0.000000f, 1.959310f}, + {1.987983f, -0.000000f, -4.497604f}, + {3.482409f, -0.000000f, -4.178310f}, + {1.987983f, -0.000000f, -4.178310f}, + {3.482409f, 0.000000f, 1.959310f}, + {3.482409f, -0.000000f, -4.497604f}, + {1.987983f, 0.000000f, 1.639923f}, + {-11.693382f, -0.000001f, -9.468655f}, + {-11.693382f, 0.000000f, 1.959310f}, + {-4.961135f, -0.000000f, -2.614596f}, + {-11.693382f, -0.000000f, -4.497604f}, + {-4.961135f, 0.000000f, 0.076209f}, + {-11.693382f, 0.000000f, 5.530122f}, + {0.031970f, -0.000000f, -4.178310f}, + {-4.799030f, 0.000000f, 0.236704f}, + {-4.197837f, 0.000000f, 0.236704f}, + {-2.479054f, 0.000000f, 0.236704f}, + {-1.727151f, 0.000000f, 0.236704f}, + {-13.142808f, -0.000000f, -0.516240f}, + {-13.142808f, -0.000000f, -2.003563f}, + {-4.561967f, -0.000000f, -2.676960f}, + {-4.197836f, -0.000000f, -2.676960f}, + {-2.479054f, -0.000000f, -2.676960f}, + {-1.891271f, -0.000000f, -2.676960f}, + {-10.952084f, 0.000000f, 1.639923f}, + {-10.952084f, -0.000000f, -4.178310f}, + {-10.950237f, -0.000000f, -4.497604f}, + {-10.952084f, 0.000000f, 1.959310f}, + {-0.000950f, -0.000001f, -12.588175f}, + {-6.487949f, -0.000001f, -12.588175f}, + {-1.677614f, -0.000001f, -14.280035f}, + {-4.801496f, -0.000001f, -14.280035f}, + {-2.479054f, -0.000000f, -0.516239f}, + {-4.197837f, -0.000000f, -0.516239f}, + {-4.197837f, -0.000000f, -2.003563f}, + {-2.479054f, -0.000000f, -2.003563f}, + {-6.487949f, 0.000000f, 6.127061f}, + {0.458513f, 0.000000f, 6.127061f}, + {-6.959890f, 0.000000f, 6.127060f}, + {-0.000951f, 0.000000f, 6.127060f}, + {-6.487949f, 0.000000f, 3.538448f}, + {-6.959890f, 0.000000f, 3.538448f}, + {0.458513f, 0.000000f, 3.538448f}, + {-0.000951f, 0.000000f, 3.538448f}, + {4.928789f, 0.000000f, 3.538448f}, + {-11.356500f, 0.000000f, 3.538448f}, + {4.928789f, 0.000000f, 4.641364f}, + {-11.356500f, 0.000000f, 4.641364f}, + {5.209778f, -0.000000f, -2.003563f}, + {5.209778f, -0.000000f, -0.516239f}, + {5.209778f, -0.000001f, -7.522186f}, + {5.209778f, -0.000000f, -6.182686f}, + {6.406253f, -0.000000f, -0.286729f}, + {7.699028f, -0.000000f, -0.286729f}, + {0.458513f, -0.000001f, -7.522186f}, + {-6.487949f, -0.000001f, -7.522186f}, + {-0.000950f, -0.000001f, -7.522186f}, + {-11.693382f, -0.000001f, -7.522186f}, + {-11.356500f, -0.000001f, -7.522186f}, + {4.928789f, -0.000001f, -7.522186f}, + {-6.959890f, -0.000001f, -7.522186f}, + {0.458513f, -0.000000f, -6.182686f}, + {4.928789f, -0.000000f, -6.182686f}, + {-6.487949f, -0.000000f, -6.182686f}, + {-0.000950f, -0.000000f, -6.182686f}, + {-6.959890f, -0.000000f, -6.182686f}, + {-11.693382f, -0.000000f, -6.182686f}, + {-11.356500f, -0.000000f, -6.182686f}, + {-13.394125f, -0.000000f, -4.497604f}, + {-11.693382f, 0.000000f, 4.695820f}, + {-11.693382f, 0.000000f, 3.505549f}, + {-16.679245f, 0.000000f, 1.959310f}, + {-12.984167f, 0.000000f, 1.959310f}, + {-18.741804f, -0.000000f, -2.003563f}, + {-18.741804f, -0.000000f, -0.516240f}, + {-21.941124f, 0.000000f, 1.577724f}, + {-21.941124f, -0.000000f, -5.434333f}, + {-12.758956f, -0.000000f, -2.985128f}, + {-12.758956f, 0.000000f, 0.446740f}, + {-11.844486f, -0.000000f, -3.867863f}, + {-11.844486f, 0.000000f, 1.329476f}, + {-12.032170f, 0.000000f, 1.959310f}, + {-12.032170f, 0.000000f, 1.670803f}, + {-13.474504f, -0.000000f, -0.516240f}, + {-13.474504f, -0.000000f, -2.003563f}, + {-16.687757f, -0.000000f, -0.516240f}, + {-16.687757f, -0.000000f, -2.003563f}, + {-13.474504f, -0.000000f, -2.572726f}, + {-16.687757f, -0.000000f, -2.572726f}, + {-13.474504f, 0.000000f, 0.081743f}, + {-16.687757f, 0.000000f, 0.081743f}, + {-17.029930f, -0.000000f, -0.516240f}, + {-18.182152f, -0.000000f, -0.516240f}, + {-13.212752f, 0.000000f, 0.391281f}, + {-12.984167f, 0.000000f, 0.668785f}, + {-17.029930f, 0.000000f, 0.391281f}, + {-16.679245f, 0.000000f, 1.677333f}, + {-12.984167f, 0.000000f, 1.677333f}, + {-12.163081f, -0.000000f, -4.154991f}, + {-12.163081f, -0.000000f, -4.497604f}, + {-13.382598f, -0.000000f, -2.985128f}, + {-18.741804f, -0.000000f, -5.434333f}, + {-18.741804f, 0.000000f, 1.577724f}, + {4.928789f, 0.000000f, 0.921202f}, + {4.928789f, 0.000000f, 0.034380f}, + {-2.479054f, 0.000001f, 8.584578f}, + {-4.197836f, 0.000001f, 8.584578f}, + {-7.221593f, 0.000001f, 8.584578f}, + {0.753008f, 0.000001f, 8.584578f}, +}; + +const vertex_texture haunted_mansion_collision_texture[] = { +}; + +const vertex_normal haunted_mansion_collision_normal[] = { +}; + +const union triangle haunted_mansion_collision_house_coll_display_triangle[] = { +}; + +const union quadrilateral haunted_mansion_collision_house_coll_display_quadrilateral[] = { +}; + +const union line haunted_mansion_collision_house_coll_display_line[] = { + { + .a = 8, + .b = 122, + }, + { + .a = 119, + .b = 128, + }, + { + .a = 19, + .b = 119, + }, + { + .a = 1, + .b = 19, + }, + { + .a = 31, + .b = 122, + }, + { + .a = 37, + .b = 127, + }, + { + .a = 37, + .b = 2, + }, + { + .a = 12, + .b = 137, + }, + { + .a = 0, + .b = 12, + }, + { + .a = 152, + .b = 158, + }, + { + .a = 158, + .b = 159, + }, + { + .a = 76, + .b = 126, + }, + { + .a = 8, + .b = 33, + }, + { + .a = 34, + .b = 35, + }, + { + .a = 27, + .b = 33, + }, + { + .a = 30, + .b = 36, + }, + { + .a = 27, + .b = 30, + }, + { + .a = 36, + .b = 115, + }, + { + .a = 34, + .b = 113, + }, + { + .a = 35, + .b = 172, + }, + { + .a = 20, + .b = 173, + }, + { + .a = 15, + .b = 133, + }, + { + .a = 48, + .b = 49, + }, + { + .a = 48, + .b = 52, + }, + { + .a = 51, + .b = 53, + }, + { + .a = 49, + .b = 53, + }, + { + .a = 50, + .b = 52, + }, + { + .a = 175, + .b = 176, + }, + { + .a = 54, + .b = 176, + }, + { + .a = 51, + .b = 54, + }, + { + .a = 105, + .b = 107, + }, + { + .a = 77, + .b = 139, + }, + { + .a = 77, + .b = 150, + }, + { + .a = 98, + .b = 100, + }, + { + .a = 91, + .b = 92, + }, + { + .a = 89, + .b = 90, + }, + { + .a = 13, + .b = 89, + }, + { + .a = 15, + .b = 92, + }, + { + .a = 98, + .b = 124, + }, + { + .a = 24, + .b = 74, + }, + { + .a = 24, + .b = 131, + }, + { + .a = 43, + .b = 173, + }, + { + .a = 59, + .b = 105, + }, + { + .a = 17, + .b = 78, + }, + { + .a = 29, + .b = 78, + }, + { + .a = 25, + .b = 44, + }, + { + .a = 25, + .b = 71, + }, + { + .a = 16, + .b = 70, + }, + { + .a = 16, + .b = 130, + }, + { + .a = 14, + .b = 66, + }, + { + .a = 14, + .b = 134, + }, + { + .a = 71, + .b = 74, + }, + { + .a = 70, + .b = 72, + }, + { + .a = 18, + .b = 45, + }, + { + .a = 18, + .b = 82, + }, + { + .a = 58, + .b = 63, + }, + { + .a = 58, + .b = 108, + }, + { + .a = 29, + .b = 103, + }, + { + .a = 39, + .b = 93, + }, + { + .a = 46, + .b = 146, + }, + { + .a = 46, + .b = 88, + }, + { + .a = 9, + .b = 65, + }, + { + .a = 7, + .b = 69, + }, + { + .a = 7, + .b = 111, + }, + { + .a = 123, + .b = 125, + }, + { + .a = 82, + .b = 72, + }, + { + .a = 68, + .b = 73, + }, + { + .a = 69, + .b = 75, + }, + { + .a = 83, + .b = 84, + }, + { + .a = 10, + .b = 42, + }, + { + .a = 6, + .b = 86, + }, + { + .a = 4, + .b = 83, + }, + { + .a = 85, + .b = 86, + }, + { + .a = 28, + .b = 102, + }, + { + .a = 47, + .b = 87, + }, + { + .a = 47, + .b = 147, + }, + { + .a = 28, + .b = 80, + }, + { + .a = 9, + .b = 80, + }, + { + .a = 17, + .b = 67, + }, + { + .a = 42, + .b = 101, + }, + { + .a = 45, + .b = 104, + }, + { + .a = 90, + .b = 103, + }, + { + .a = 91, + .b = 104, + }, + { + .a = 85, + .b = 101, + }, + { + .a = 84, + .b = 102, + }, + { + .a = 41, + .b = 94, + }, + { + .a = 40, + .b = 136, + }, + { + .a = 40, + .b = 95, + }, + { + .a = 94, + .b = 95, + }, + { + .a = 66, + .b = 67, + }, + { + .a = 38, + .b = 96, + }, + { + .a = 38, + .b = 114, + }, + { + .a = 93, + .b = 96, + }, + { + .a = 64, + .b = 65, + }, + { + .a = 106, + .b = 108, + }, + { + .a = 111, + .b = 112, + }, + { + .a = 61, + .b = 106, + }, + { + .a = 61, + .b = 60, + }, + { + .a = 59, + .b = 62, + }, + { + .a = 22, + .b = 113, + }, + { + .a = 22, + .b = 73, + }, + { + .a = 4, + .b = 109, + }, + { + .a = 5, + .b = 110, + }, + { + .a = 5, + .b = 64, + }, + { + .a = 57, + .b = 116, + }, + { + .a = 6, + .b = 112, + }, + { + .a = 60, + .b = 115, + }, + { + .a = 109, + .b = 110, + }, + { + .a = 97, + .b = 125, + }, + { + .a = 97, + .b = 99, + }, + { + .a = 99, + .b = 100, + }, + { + .a = 31, + .b = 1, + }, + { + .a = 43, + .b = 118, + }, + { + .a = 44, + .b = 117, + }, + { + .a = 117, + .b = 120, + }, + { + .a = 32, + .b = 118, + }, + { + .a = 32, + .b = 121, + }, + { + .a = 20, + .b = 121, + }, + { + .a = 21, + .b = 128, + }, + { + .a = 2, + .b = 129, + }, + { + .a = 3, + .b = 123, + }, + { + .a = 56, + .b = 57, + }, + { + .a = 56, + .b = 107, + }, + { + .a = 3, + .b = 21, + }, + { + .a = 162, + .b = 164, + }, + { + .a = 126, + .b = 127, + }, + { + .a = 135, + .b = 136, + }, + { + .a = 124, + .b = 129, + }, + { + .a = 132, + .b = 134, + }, + { + .a = 13, + .b = 132, + }, + { + .a = 130, + .b = 133, + }, + { + .a = 120, + .b = 131, + }, + { + .a = 81, + .b = 138, + }, + { + .a = 140, + .b = 141, + }, + { + .a = 114, + .b = 139, + }, + { + .a = 116, + .b = 138, + }, + { + .a = 143, + .b = 161, + }, + { + .a = 145, + .b = 170, + }, + { + .a = 142, + .b = 170, + }, + { + .a = 153, + .b = 156, + }, + { + .a = 156, + .b = 157, + }, + { + .a = 155, + .b = 157, + }, + { + .a = 41, + .b = 148, + }, + { + .a = 39, + .b = 149, + }, + { + .a = 149, + .b = 151, + }, + { + .a = 147, + .b = 163, + }, + { + .a = 26, + .b = 81, + }, + { + .a = 141, + .b = 166, + }, + { + .a = 150, + .b = 151, + }, + { + .a = 87, + .b = 152, + }, + { + .a = 88, + .b = 153, + }, + { + .a = 154, + .b = 160, + }, + { + .a = 142, + .b = 155, + }, + { + .a = 162, + .b = 163, + }, + { + .a = 165, + .b = 166, + }, + { + .a = 160, + .b = 164, + }, + { + .a = 140, + .b = 165, + }, + { + .a = 26, + .b = 161, + }, + { + .a = 79, + .b = 135, + }, + { + .a = 79, + .b = 168, + }, + { + .a = 0, + .b = 76, + }, + { + .a = 167, + .b = 168, + }, + { + .a = 148, + .b = 167, + }, + { + .a = 146, + .b = 169, + }, + { + .a = 137, + .b = 169, + }, + { + .a = 144, + .b = 145, + }, + { + .a = 144, + .b = 171, + }, + { + .a = 143, + .b = 171, + }, + { + .a = 154, + .b = 159, + }, + { + .a = 11, + .b = 10, + }, + { + .a = 11, + .b = 75, + }, + { + .a = 23, + .b = 68, + }, + { + .a = 23, + .b = 172, + }, + { + .a = 62, + .b = 175, + }, + { + .a = 63, + .b = 174, + }, + { + .a = 50, + .b = 55, + }, + { + .a = 55, + .b = 177, + }, + { + .a = 174, + .b = 177, + }, +}; + +const struct object haunted_mansion_collision_house_coll_display = { + .triangle = &haunted_mansion_collision_house_coll_display_triangle[0], + .quadrilateral = &haunted_mansion_collision_house_coll_display_quadrilateral[0], + .line = &haunted_mansion_collision_house_coll_display_line[0], + .triangle_count = 0, + .quadrilateral_count = 0, + .line_count = 178, + .material = 0, +}; + +const struct object * haunted_mansion_collision_object[] = { + &haunted_mansion_collision_house_coll_display, +}; + +const struct model haunted_mansion_collision_model = { + .position = haunted_mansion_collision_position, + .texture = haunted_mansion_collision_texture, + .normal = haunted_mansion_collision_normal, + .object = haunted_mansion_collision_object, + .object_count = 1 +}; diff --git a/src/haunted_mansion.cpp b/src/haunted_mansion.cpp index f489aeb..1e21cc8 100644 --- a/src/haunted_mansion.cpp +++ b/src/haunted_mansion.cpp @@ -48,6 +48,9 @@ using mat4x4 = mat<4, 4, float>; #include "model/haunted_mansion/model_mansion.h" #include "model/haunted_mansion/model_cone.h" #include "model/haunted_mansion/model_cube.h" +#include "model/haunted_mansion/model_collision.h" + +#define _fsrra(n) (1.0f / (__builtin_sqrtf(n))) void vbr100() { @@ -227,6 +230,33 @@ void do_get_condition() } } +void global_polygon_type_0(ta_parameter_writer& writer) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque + | obj_control::col_type::packed_color + ; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::always + | isp_tsp_instruction_word::culling_mode::no_culling; + + const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog + | tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + ; + + const uint32_t texture_control_word = 0; + + writer.append() = + ta_global_parameter::polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + texture_control_word, + 0, // data_size_for_sort_dma + 0 // next_address_for_sort_dma + ); +} + void global_polygon_type_1(ta_parameter_writer& writer, uint32_t texture_address, uint32_t list, @@ -331,12 +361,51 @@ static inline void render_tri(ta_parameter_writer& writer, ci); } +static inline void render_line(ta_parameter_writer& writer, + vec3 p1, + vec3 p2, + uint32_t base_color) +{ + float dy = p2.y - p1.y; + float dx = p2.x - p1.x; + float d = _fsrra(dx * dx + dy * dy) * 0.7f; + float dy1 = dy * d; + float dx1 = dx * d; + + const vec3 v[4] = { + { p1.x + dy1, p1.y + -dx1, p1.z }, + { p1.x + -dy1, p1.y + dx1, p1.z }, + { p2.x + -dy1, p2.y + dx1, p2.z }, + { p2.x + dy1, p2.y + -dx1, p2.z }, + }; + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + v[0].x, v[0].y, v[0].z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + v[1].x, v[1].y, v[1].z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + v[3].x, v[3].y, v[3].z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true), + v[2].x, v[2].y, v[2].z, + base_color); +} + constexpr inline mat4x4 screen_rotation(float theta, float x, float y) { //float zt = -0.7853981633974483 + (0.2); float zt = -0.7853981633974483 * 0; - float yt = -0.7853981633974483 * theta; - float xt = 0.7853981633974483 * 4; + float yt = -0.7853981633974483 * 0; + float xt = 0.7853981633974483 * 0; //float xt = 0.7853981633974483 * 3.7; mat4x4 rx = { @@ -370,8 +439,6 @@ constexpr inline mat4x4 screen_rotation(float theta, float x, float y) return ry * t * rx * rz; } -#define _fsrra(n) (1.0f / (__builtin_sqrtf(n))) - static inline float inverse_length(vec3 v) { float f = dot(v, v); @@ -678,22 +745,118 @@ void render_cone(ta_parameter_writer& writer, const mat4x4& cone_model) screen_transform(c)); } -void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen, const mat4x4& cone_model) +vec2 line_intersection(vec2 a1, vec2 a2, + vec2 b1, vec2 b2) +{ + float x1 = a1.x; + float y1 = a1.y; + float x2 = a2.x; + float y2 = a2.y; + + float x3 = b1.x; + float y3 = b1.y; + float x4 = b2.x; + float y4 = b2.y; + + float x1x2 = x1 - x2; + float x1x3 = x1 - x3; + float x3x4 = x3 - x4; + float y1y2 = y1 - y2; + float y1y3 = y1 - y3; + float y3y4 = y3 - y4; + + float div = 1.0f / (x1x2 * y3y4 - y1y2 * x3x4); + + float t = (x1x3 * y3y4 - y1y3 * x3x4) * div; + float u = -(x1x2 * y1y3 - y1y2 * x1x3) * div; + + return {t, u}; +} + +bool collided[256] = {}; + +bool line_has_collision(vec3 a1, vec3 a2, const mat4x4& model_trans, const mat4x4& screen) +{ + const struct model * model = &haunted_mansion_collision_model; + const struct object * object = &haunted_mansion_collision_house_coll_display; + + float tx = screen[0][3]; + float ty = screen[2][3]; + + for (int i = 0; i < object->line_count; i++) { + + const union line * line = &object->line[i]; + + vec3 la = model->position[line->a]; + vec3 lb = model->position[line->b]; + + vec2 b1 = {la.x + tx, la.z + ty}; + vec2 b2 = {lb.x + tx, lb.z + ty}; + + vec2 tu = line_intersection({a1.x, a1.y}, + {a2.x, a2.y}, + {b1.x, b1.y}, + {b2.x, b2.y}); + + if (tu.x >= 0.0f && tu.x <= 1.0f && tu.y >= 0.0f && tu.y <= 1.0f) { + collided[i] = true; + return true; + } + } + return false; +} + +float last_dx = 0; +float last_dy = 0; + +void render_collision(ta_parameter_writer& writer, const mat4x4& model_trans, const mat4x4& screen) +{ + mat4x4 trans = screen * model_trans; + + const uint32_t base_color = 0xffffffff; + + const struct model * model = &haunted_mansion_collision_model; + const struct object * object = &haunted_mansion_collision_house_coll_display; + + int line_count = object->line_count; + for (int i = 0; i < line_count; i++) { + + const union line * line = &object->line[i]; + + vec3 a = trans * model->position[line->a]; + vec3 b = trans * model->position[line->b]; + + if (a.z < 0 || b.z < 0) + continue; + + render_line(writer, + screen_transform(a), + screen_transform(b), + collided[i] ? 0xffff0000 : base_color); + } + + vec3 a = {last_dx * -2, last_dy * -2, 1}; + vec3 b = {0, 0, 1}; + if (a.z > 0) { + render_line(writer, + screen_transform(a), + screen_transform(b), + 0xff00ff00); + } +} + +void transfer_scene(ta_parameter_writer& writer, const mat4x4& mansion_model_trans, const mat4x4& screen, const mat4x4& cone_model) { // opaque { - global_polygon_type_1(writer, texture_memory_alloc.texture.start, + global_polygon_type_1(writer, + texture_memory_alloc.texture.start, para_control::list_type::opaque, isp_tsp_instruction_word::culling_mode::no_culling); - float scale = 1.f; - float translate = 0.f; - const mat4x4 model = { - scale, 0, 0, 0, - 0, scale, 0, 0, - 0, 0, -scale, translate, - 0, 0, 0, 1, - }; - render_model(writer, model, screen, &mansion_model); + render_model(writer, mansion_model_trans, screen, &mansion_model); + + global_polygon_type_0(writer); + render_collision(writer, mansion_model_trans, screen); } // end of opaque list writer.append() = @@ -823,7 +986,7 @@ constexpr inline mat4x4 update_cone() return mry * mrx; } -constexpr inline mat4x4 update_analog(mat4x4& screen) +constexpr inline mat4x4 update_analog(const mat4x4& model_trans, const mat4x4& screen) { const float l_ = static_cast(data[0].analog_coordinate_axis[0]) * (1.f / 255.f); const float r_ = static_cast(data[0].analog_coordinate_axis[1]) * (1.f / 255.f); @@ -833,6 +996,17 @@ constexpr inline mat4x4 update_analog(mat4x4& screen) float x = 0.05f * -x_; float y = 0.05f * y_; + last_dx = x; + last_dy = y; + + vec3 a = {last_dx * -2, last_dy * -2, 1.f}; + vec3 b = {0, 0, 1.f}; + + if (line_has_collision(a, b, model_trans, screen)) { + x = 0; + y = 0; + } + mat4x4 t = { 1, 0, 0, x, 0, 1, 0, 0, @@ -926,10 +1100,19 @@ void main() mat4x4 screen = screen_rotation(0, 0, 0); + float scale = 1.f; + float translate = 0.f; + const mat4x4 mansion_model_trans = { + scale, 0, 0, 0, + 0, -scale, 0, 0, + 0, 0, scale, translate, + 0, 0, 0, 1, + }; + while (1) { maple::dma_wait_complete(); do_get_condition(); - screen = update_analog(screen); + screen = update_analog(mansion_model_trans, screen); mat4x4 cone_model = update_cone(); ta_polygon_converter_init2(texture_memory_alloc.isp_tsp_parameters[ta].start, @@ -941,7 +1124,7 @@ void main() tile_width, tile_height); writer.offset = 0; - transfer_scene(writer, screen, cone_model); + transfer_scene(writer, mansion_model_trans, screen, cone_model); ta_polygon_converter_writeback(writer.buf, writer.offset); ta_polygon_converter_transfer(writer.buf, writer.offset); ta_wait_opaque_modifier_volume_list();