| 211 | } |
| 212 | |
| 213 | void set_camera_collision(const Fvector& box_size, const Fmatrix& xform, CPhysicsElement* roote, CBoxGeom* box) |
| 214 | { |
| 215 | ZoneScoped; |
| 216 | |
| 217 | Fvector bs = box_size; |
| 218 | bs.z = box_size.z * 2.f; |
| 219 | bs.y = box_size.y * 1.5f; |
| 220 | |
| 221 | box->set_size(bs); |
| 222 | Fmatrix m = Fidentity; |
| 223 | m.c.z -= box_size.z; |
| 224 | m.c.y -= box_size.y * 0.5f; |
| 225 | box->set_local_form_bt(m); |
| 226 | // CBoxGeom* character_collision_geom = smart_cast<CBoxGeom*>( roote->geometry( 1 ) ); |
| 227 | CCylinderGeom* character_collision_geom = smart_cast<CCylinderGeom*>(roote->geometry(1)); |
| 228 | VERIFY(character_collision_geom); |
| 229 | const Fvector character_collision_box_size = |
| 230 | Fvector().add(box_size, Fvector().set(camera_collision_character_skin_depth, camera_collision_character_skin_depth, camera_collision_character_skin_depth)); |
| 231 | // character_collision_geom->set_size( character_collision_box_size ); |
| 232 | character_collision_geom->set_radius(character_collision_box_size.x); |
| 233 | VERIFY(_valid(xform)); |
| 234 | Fmatrix character_collision_geom_local_xform(Fmatrix().invert(xform)); |
| 235 | Fvector shift_fv = Fvector().mul(xform.k, camera_collision_character_shift_z); |
| 236 | shift_fv.y = 0; |
| 237 | character_collision_geom_local_xform.transform_dir(shift_fv); |
| 238 | |
| 239 | // character_collision_geom_local_xform.c.set( 0, -0.8f, 0 ); |
| 240 | character_collision_geom_local_xform.c.set(Fvector().mul(character_collision_geom_local_xform.j, -camera_collision_character_gl_shift_y).add(Fvector().set(shift_fv))); |
| 241 | // character_collision_geom_local_xform.c.y =-0.8f; |
| 242 | character_collision_geom->set_local_form_bt(character_collision_geom_local_xform); |
| 243 | roote->SetTransform(xform /*, mh_clear*/); |
| 244 | } |
| 245 | |
| 246 | bool do_collide_and_move(const Fmatrix& xform, CPhysicsShellHolder* l_actor, CPhysicsShell* shell, CPhysicsElement* roote) |
| 247 | { |