コード例 #1
0
        private void GetFireParameters(out Vec3 pos, out Quat rot, out float speed)
        {
            Camera camera = RendererWorld.Instance.DefaultCamera;

            pos = catapult.Position + new Vec3(0, 0, .7f);

            Radian verticalAngle = new Degree(30).InRadians();

            rot   = Quat.Identity;
            speed = 0;

            if (catapultFiring)
            {
                Ray startRay = camera.GetCameraToViewportRay(catapultFiringMouseStartPosition);
                Ray ray      = camera.GetCameraToViewportRay(MousePosition);

                Plane plane = Plane.FromPointAndNormal(pos, Vec3.ZAxis);

                Vec3 startRayPos;
                if (!plane.RayIntersection(startRay, out startRayPos))
                {
                    //must never happen
                }

                Vec3 rayPos;
                if (!plane.RayIntersection(ray, out rayPos))
                {
                    //must never happen
                }

                Vec2 diff = rayPos.ToVec2() - startRayPos.ToVec2();

                Radian horizonalAngle = MathFunctions.ATan(diff.Y, diff.X) + MathFunctions.PI;

                SphereDir dir = new SphereDir(horizonalAngle, verticalAngle);
                rot = Quat.FromDirectionZAxisUp(dir.GetVector());

                float distance = diff.Length();

                //3 meters clamp
                MathFunctions.Clamp(ref distance, .001f, 3);

                speed = distance * 10;
            }
        }
コード例 #2
0
        //MapObject GetObjectOverCursor()
        //{
        //   Camera camera = RendererWorld.Instance.DefaultCamera;
        //   Ray ray = camera.GetCameraToViewportRay( MousePosition );
        //   MapObject mapObject = null;
        //   Map.Instance.GetObjects( ray, delegate( MapObject obj, float scale )
        //   {
        //      //skip StaticMesh'es
        //      if( obj is StaticMesh )
        //         return true;
        //      mapObject = obj;
        //      return false;
        //   } );
        //   return mapObject;
        //}

        private bool IsCursorOverCatapult()
        {
            if (catapult != null)
            {
                Camera camera = RendererWorld.Instance.DefaultCamera;
                Ray    ray    = camera.GetCameraToViewportRay(MousePosition);
                if (catapult.MapBounds.RayIntersection(ray))
                {
                    return(true);
                }
            }
            return(false);
        }