void PickBody() { DropBody(); PickedEntity = RayCastEntity(out Vector3 PickPoint, out Vector3 Normal); if (PickedEntity != null) { DbgDraw.DrawLine(FireOrigin, PickPoint, Time: 5000); DbgDraw.DrawCircle(PickPoint + Normal * 0.1f, Normal, FishGfx.Color.Red, 5, 8, Time: 5000); PickDist = Vector3.Distance(FireOrigin, PickPoint); GlobalPickPoint = PickPoint; Matrix4x4.Invert(PickedEntity.RigidBody.CenterOfMassTransform, out Matrix4x4 InvCenterOfMass); LocalPickPoint = PickPoint = Vector3.Transform(PickPoint, InvCenterOfMass); PickedEntity.Unfreeze(); PickedEntity.DisableSleep(); PointConst = new Point2PointConstraint(PickedEntity.RigidBody, PickPoint); PointConst.Setting.ImpulseClamp = 10000; PointConst.Setting.Tau = 0.01f; PointConst.Setting.Damping = 0.99f; Map.World.AddConstraint(PointConst); OldAngularDamping = PickedEntity.RigidBody.AngularDamping; OldLinearDamping = PickedEntity.RigidBody.LinearDamping; PickedEntity.RigidBody.SetDamping(OldLinearDamping, 0.99f); IsPickingBody = true; } }
public override void Reload(bool Pressed) { if (Pressed) { EntPhysics Ent = RayCastEntity(out Vector3 PickPoint); if (Ent != null) { Ent.Unfreeze(); } /*Vector3[] Pts = Engine.Camera3D.GetFrustumPoints(); * * // Connecting lines * Vector3 A = DrawRay(Pts[0], Pts[4]); * Vector3 B = DrawRay(Pts[1], Pts[5]); * Vector3 C = DrawRay(Pts[2], Pts[6]); * Vector3 D = DrawRay(Pts[3], Pts[7]); * * DbgDraw.DrawLine(A, B, FishGfx.Color.Red, Time: 30000); * DbgDraw.DrawLine(B, C, FishGfx.Color.Red, Time: 30000); * DbgDraw.DrawLine(C, D, FishGfx.Color.Red, Time: 30000); * DbgDraw.DrawLine(D, A, FishGfx.Color.Red, Time: 30000);*/ } }
void DropBody() { if (!IsPickingBody) { return; } Map.World.RemoveConstraint(PointConst); PointConst.Dispose(); PointConst = null; PickedEntity.Unfreeze(); PickedEntity.RigidBody.SetDamping(OldLinearDamping, OldAngularDamping); PickedEntity = null; IsPickingBody = false; }
public override void Reload(bool Pressed) { if (Pressed) { EntPhysics Ent = RayCastEntity(out Vector3 PickPoint); if (Ent != null) { Ent.Unfreeze(); } //DbgDraw.DrawFrustum(Engine.Camera3D, Time: 10000); //DbgDraw.DrawFrustum(Engine.Map.GetEntities<Player>().First().ViewModelCamera, Time: 10000); Vector3[] Pts = Engine.Camera3D.GetFrustumPoints(); /*// Near * DbgDraw.DrawLine(Pts[0], Pts[1], Time: 10000); * DbgDraw.DrawLine(Pts[1], Pts[2], Time: 10000); * DbgDraw.DrawLine(Pts[2], Pts[3], Time: 10000); * DbgDraw.DrawLine(Pts[3], Pts[0], Time: 10000); * * // Far * DbgDraw.DrawLine(Pts[4], Pts[5], Time: 10000); * DbgDraw.DrawLine(Pts[5], Pts[6], Time: 10000); * DbgDraw.DrawLine(Pts[6], Pts[7], Time: 10000); * DbgDraw.DrawLine(Pts[7], Pts[4], Time: 10000);*/ // Connecting lines Vector3 A = DrawRay(Pts[0], Pts[4]); Vector3 B = DrawRay(Pts[1], Pts[5]); Vector3 C = DrawRay(Pts[2], Pts[6]); Vector3 D = DrawRay(Pts[3], Pts[7]); DbgDraw.DrawLine(A, B, FishGfx.Color.Red, Time: 30000); DbgDraw.DrawLine(B, C, FishGfx.Color.Red, Time: 30000); DbgDraw.DrawLine(C, D, FishGfx.Color.Red, Time: 30000); DbgDraw.DrawLine(D, A, FishGfx.Color.Red, Time: 30000); } }