Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
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));
            }
        }