public void SetContact() { float length = 8.0f; //Engine.Singleton.GameCamera.DistanceNow + 1.0f; Vector3 AimPosition = new Vector3(); AimPosition.x = (float)System.Math.Sin((double)-getY().ValueRadians) * length; AimPosition.x = (float)System.Math.Cos((double)getX().ValueRadians) * AimPosition.x + Engine.Singleton.Camera.Position.x; AimPosition.y = (float)System.Math.Sin((double)getX().ValueRadians) * length + Engine.Singleton.Camera.Position.y; AimPosition.z = (float)System.Math.Cos((double)getY().ValueRadians) * -length; AimPosition.z = (float)System.Math.Cos((double)getX().ValueRadians) * AimPosition.z + Engine.Singleton.Camera.Position.z; Contact = null; PredicateRaycast raycast = new PredicateRaycast((b => !(b.UserData is TriggerVolume) && (b.MaterialGroupID != Engine.Singleton.MaterialManager.CharacterSensorMaterialID) && (b.MaterialGroupID != Engine.Singleton.MaterialManager.LevelMaterialID))); raycast.Go(Engine.Singleton.NewtonWorld, Engine.Singleton.Camera.Position, AimPosition); if (raycast.Contacts.Count != 0) { raycast.SortContacts(); AimPosition = Position + (AimPosition - Position) * raycast.Contacts[0].Distance + raycast.Contacts[0].Normal * 0.01f * length; if (raycast.Contacts[0].Body.UserData is GameObject) { Contact = raycast.Contacts[0].Body.UserData as GameObject; } } }
public void Update() { if (!Engine.Singleton.HumanController.HUDMenu.IsVisible) { Vector3 offset = Character.Node.Orientation * (-Vector3.UNIT_Z + (Vector3.UNIT_Y * (float)System.Math.Tan(Angle.ValueRadians)) ).NormalisedCopy * Distance; Vector3 head = Character.Node.Position + Character.Profile.HeadOffset; Vector3 desiredPosition = head + offset; InterPosition += (desiredPosition - InterPosition) * 0.1f; PredicateRaycast raycast = new PredicateRaycast((b => !(b.UserData is TriggerVolume))); raycast.Go(Engine.Singleton.NewtonWorld, head, InterPosition); if (raycast.Contacts.Count != 0) { raycast.SortContacts(); Engine.Singleton.Camera.Position = head + (InterPosition - head) * raycast.Contacts[0].Distance + raycast.Contacts[0].Normal * 0.15f; DistanceNow = raycast.Contacts[0].Distance; } else { Engine.Singleton.Camera.Position = InterPosition; DistanceNow = Distance; } Engine.Singleton.Camera.LookAt(head); } else { Engine.Singleton.Camera.Position = new Vector3(3.5f, 1.5f, 2.25f); Engine.Singleton.Camera.LookAt(new Vector3(0, 0, 0)); } }
public void Update() { if (!Engine.Singleton.HumanController.HUDMenu.IsVisible) { Vector3 offset = Character.Node.Orientation * (-Vector3.UnitZ + (Vector3.UnitY * (float)System.Math.Tan(Angle.ValueRadians)) ).NormalisedCopy * Distance; Vector3 head = Character.Node.Position + Character.Profile.HeadOffset; Vector3 desiredPosition = head + offset; InterPosition += (desiredPosition - InterPosition) * 0.1f; PredicateRaycast raycast = new PredicateRaycast((b => !(b.UserData is TriggerVolume))); raycast.Go(Engine.Singleton.NewtonWorld, head, InterPosition); if (raycast.Contacts.Count != 0) { raycast.SortContacts(); Engine.Singleton.Camera.Position = head + (InterPosition - head) * raycast.Contacts[0].Distance + raycast.Contacts[0].Normal * 0.15f; DistanceNow = raycast.Contacts[0].Distance; } else { Engine.Singleton.Camera.Position = InterPosition; DistanceNow = Distance; } Engine.Singleton.Camera.LookAt(head); } else { Engine.Singleton.Camera.Position = new Vector3(3.5f, 1.5f, 2.25f); Engine.Singleton.Camera.LookAt(new Vector3(0, 0, 0)); } }