コード例 #1
0
        public SolarVsUtilityProjection CalculateFutureProjection(
            IYearlyKwhUsage solarEstimate,
            ProjectionParameters projectionParameters
            )
        {
            var projection      = new List <IYearlyKwhUsageCompare>();
            var utilityEstimate = projectionParameters.UtilityYear;

            var paidOffSolarEstimate = new YearlyKwhUsageFromAnnual(
                0, solarEstimate.TotalKiloWattHours
                );

            // Each year to project
            for (int i = 0; i < projectionParameters.YearsToProject; i++)
            {
                projection.Add(new YearlyKwhUsageCompare(
                                   FormulaHelpers.CompoundInterest(utilityEstimate.TotalCost, projectionParameters.PercentIncreasePerYear, 1, i),
                                   utilityEstimate.TotalKiloWattHours,
                                   i,
                                   // After financeYears, solar panels are no longer paid for
                                   i < projectionParameters.FinanceYears ?
                                   solarEstimate : paidOffSolarEstimate
                                   ));
            }

            return(new SolarVsUtilityProjection(solarEstimate, projection, projectionParameters.FinanceYears));
        }
コード例 #2
0
ファイル: Camera3D.cs プロジェクト: nmcguinness/GDGame
 public Camera3D(string id, ActorType actorType, StatusType statusType,
                 Transform3D transform3D, ProjectionParameters projectionParameters, Viewport viewPort)
     : base(id, actorType, statusType, transform3D)
 {
     this.projectionParameters = projectionParameters;
     this.viewPort             = viewPort;
 }
コード例 #3
0
        private void AddSecurityCamera(Viewport viewport, ProjectionParameters projectionParameters)
        {
            Transform3D transform = new Transform3D(new Vector3(50, 10, 10), Vector3.Zero, Vector3.Zero, -Vector3.UnitX, Vector3.UnitY);

            Camera3D camera3D = new Camera3D("security camera 1", ActorType.Camera, transform, projectionParameters, viewport);

            camera3D.AttachController(new SecurityCameraController("scc1", ControllerType.Security, 15, 2, Vector3.UnitX));

            this.cameraManager.Add(camera3D);
        }
コード例 #4
0
        private void AddFlightCamera(Viewport viewport, ProjectionParameters projectionParameters)
        {
            Transform3D transform = new Transform3D(new Vector3(0, 10, 30), Vector3.Zero, Vector3.Zero, -Vector3.UnitZ, Vector3.UnitY);

            Camera3D camera3D = new Camera3D("flight camera 1", ActorType.Camera, transform, projectionParameters, viewport);

            camera3D.AttachController(new FlightCameraController("flight camera controller 1",
                                                                 ControllerType.Flight, AppData.CameraMoveKeys_Alt1, AppData.CameraMoveSpeed,
                                                                 AppData.CameraStrafeSpeed, AppData.CameraRotationSpeed, this.inputManagerParameters, this.screenCentre));

            this.cameraManager.Add(camera3D);
        }
コード例 #5
0
        private void AddRailCamera(Viewport viewport, ProjectionParameters projectionParameters)
        {
            //doesnt matter where the camera starts because we reset immediately inside the RailController
            Transform3D transform = Transform3D.Zero;

            Camera3D camera3D = new Camera3D("rail camera 1", ActorType.Camera, transform, projectionParameters, viewport);

            camera3D.AttachController(new RailController("rc1", ControllerType.Rail,
                                                         this.drivableModelObject, this.railDictionary["battlefield 1"]));

            this.cameraManager.Add(camera3D);
        }
コード例 #6
0
        private void AddTrack3DCamera(Viewport viewport, ProjectionParameters projectionParameters)
        {
            //doesnt matter where the camera starts because we reset immediately inside the Transform3DCurveController
            Transform3D transform = Transform3D.Zero;

            Camera3D camera3D = new Camera3D("curve camera 1", ActorType.Camera, transform, projectionParameters, viewport);

            camera3D.AttachController(new Track3DController("tcc1", ControllerType.Track,
                                                            this.track3DDictionary["push forward 1"], PlayStatusType.Play));

            this.cameraManager.Add(camera3D);
        }
コード例 #7
0
        private void AddThirdPersonCamera(Viewport viewport, ProjectionParameters projectionParameters)
        {
            Transform3D transform = Transform3D.Zero;

            Camera3D camera3D = new Camera3D("third person camera 1", ActorType.Camera,
                                             transform, projectionParameters, viewport);

            camera3D.AttachController(new ThirdPersonController("tpcc1", ControllerType.ThirdPerson,
                                                                this.drivableModelObject, AppData.CameraThirdPersonDistance,
                                                                AppData.CameraThirdPersonScrollSpeedDistanceMultiplier,
                                                                AppData.CameraThirdPersonElevationAngleInDegrees,
                                                                AppData.CameraThirdPersonScrollSpeedElevationMultiplier,
                                                                LerpSpeed.Slow, LerpSpeed.VerySlow, this.inputManagerParameters));

            this.cameraManager.Add(camera3D);
        }
コード例 #8
0
        private void AddMainAndPipCamera(Viewport viewport, ProjectionParameters projectionParameters)
        {
            Camera3D    camera3D  = null;
            Transform3D transform = null;

            //security camera
            transform = new Transform3D(new Vector3(0, 40, 0),
                                        Vector3.Zero, Vector3.One, -Vector3.UnitY, Vector3.UnitZ);

            int      width       = 240;
            int      height      = 180;
            int      xPos        = this.resolution.X - width - 10;
            Viewport pipViewport = new Viewport(xPos, 10, width, height);

            camera3D = new Camera3D("sc1", ActorType.Camera,
                                    transform, projectionParameters, pipViewport, 0.8f);

            camera3D.AttachController(new SecurityCameraController("scc1", ControllerType.Security, 15, 2, Vector3.UnitX));

            this.cameraManager.Add(camera3D);

            //1st person
            transform = new Transform3D(
                new Vector3(0, 10, 100), Vector3.Zero,
                Vector3.One, -Vector3.UnitZ, Vector3.UnitY);

            camera3D = new Camera3D("fpc1", ActorType.Camera,
                                    transform, projectionParameters, viewport, 0.4f);

            camera3D.AttachController(new FirstPersonCameraController(
                                          "fpcc1", ControllerType.FirstPerson,
                                          AppData.CameraMoveKeys, AppData.CameraMoveSpeed,
                                          AppData.CameraStrafeSpeed, AppData.CameraRotationSpeed, this.inputManagerParameters, this.screenCentre));



            //put controller later!
            this.cameraManager.Add(camera3D);
        }
コード例 #9
0
        private void InitializeCameras(ScreenLayoutType screenLayoutType)
        {
            Viewport             viewport             = new Viewport(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);
            float                aspectRatio          = (float)this.resolution.X / this.resolution.Y;
            ProjectionParameters projectionParameters = new ProjectionParameters(MathHelper.PiOver4, aspectRatio, 1, 2500);

            if (screenLayoutType == ScreenLayoutType.FirstPerson)
            {
                AddFirstPersonCamera(viewport, projectionParameters);
            }
            else if (screenLayoutType == ScreenLayoutType.ThirdPerson)
            {
                AddThirdPersonCamera(viewport, projectionParameters);
            }
            else if (screenLayoutType == ScreenLayoutType.Flight)
            {
                AddFlightCamera(viewport, projectionParameters);
            }
            else if (screenLayoutType == ScreenLayoutType.Rail)
            {
                AddRailCamera(viewport, projectionParameters);
            }
            else if (screenLayoutType == ScreenLayoutType.Track)
            {
                AddTrack3DCamera(viewport, projectionParameters);
            }
            else if (screenLayoutType == ScreenLayoutType.Pip)
            {
                AddMainAndPipCamera(viewport, projectionParameters);
            }

            else if (screenLayoutType == ScreenLayoutType.Multi1x4) //splits the screen vertically x4
            {
                viewport = new Viewport(0, 0, (int)(graphics.PreferredBackBufferWidth / 4.0f), graphics.PreferredBackBufferHeight);
                AddFirstPersonCamera(viewport, projectionParameters);

                viewport.X += viewport.Width; //move the next camera over to start at x = 1/4 screen width
                AddRailCamera(viewport, projectionParameters);

                viewport.X += viewport.Width; //move the next camera over to start at x = 2/4 screen width
                AddTrack3DCamera(viewport, projectionParameters);

                viewport.X += viewport.Width; //move the next camera over to start at x = 3/4 screen width
                AddSecurityCamera(viewport, projectionParameters);
            }
            else if (screenLayoutType == ScreenLayoutType.Multi2x2) //splits the screen in 4 equal parts
            {
                //top left
                viewport = new Viewport(0, 0, (int)(graphics.PreferredBackBufferWidth / 2.0f), (int)(graphics.PreferredBackBufferHeight / 2.0f));
                AddFirstPersonCamera(viewport, projectionParameters);

                //top right
                viewport.X = viewport.Width;
                AddRailCamera(viewport, projectionParameters);

                ////bottom left
                viewport.X = 0;
                viewport.Y = viewport.Height;
                AddTrack3DCamera(viewport, projectionParameters);

                ////bottom right
                viewport.X = viewport.Width;
                viewport.Y = viewport.Height;
                AddSecurityCamera(viewport, projectionParameters);
            }
            else //in all other cases just add a security camera - saves us having to implement all enum options at the moment
            {
                AddSecurityCamera(viewport, projectionParameters);
            }
        }
コード例 #10
0
        /// <summary>
        /// Builds the projection function (<see cref="ProjectionFunction"/>) and extracts the arguments to it
        /// for use elsewhere.
        /// </summary>
        /// <param name="expression">The Select expression.</param>
        protected void BuildProjection(Expression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            var ue = ((MethodCallExpression)expression).Arguments[1] as UnaryExpression;

            if (ue == null)
            {
                throw new LinqToRdfException("Incompatible expression type found when building ontology projection");
            }

            var projectionFunctionExpression = (LambdaExpression)ue.Operand;

            if (projectionFunctionExpression == null)
            {
                throw new LinqToRdfException("Incompatible expression type found when building ontology projection");
            }

            if (Expressions.ContainsKey("GroupBy"))
            {
                throw new NotSupportedException("Group By is not supported by VDS.RDF.Linq");
            }

            // compile the projection's lambda expression into a function that can be used to instantiate new objects
            ProjectionFunction = projectionFunctionExpression.Compile();

            // work out what kind of project is being performed (identity, member or anonymous type)
            // identity projection is from queries like this: "from a in ctx select a"
            // member projection from ones like this "from a in ctx select a.b"
            // anonymous type projection from this "from a in ctx select new {a.b, a.b}"
            if (projectionFunctionExpression.Body is ParameterExpression) //  ie an identity projection
            {
                foreach (PropertyInfo i in OwlClassSupertype.GetAllPersistentProperties(OriginalType))
                {
                    ProjectionParameters.Add(i);
                }
            }
            else if (projectionFunctionExpression.Body is MemberExpression) // a member projection
            {
                var memex = projectionFunctionExpression.Body as MemberExpression;
                if (memex == null)
                {
                    throw new LinqToRdfException("Expected MemberExpression was null");
                }

                ProjectionParameters.Add(memex.Member);
            }
            else if (projectionFunctionExpression.Body is NewExpression)
            {
                // create an anonymous type
                var mie = projectionFunctionExpression.Body as NewExpression;
                if (mie == null)
                {
                    throw new LinqToRdfException("Expected NewExpression was not present");
                }

                foreach (MemberExpression me in mie.Arguments)
                {
                    ProjectionParameters.Add(me.Member);
                }
            }
            else if (projectionFunctionExpression.Body is MethodCallExpression)
            {
                throw new NotSupportedException("Calling a method on the selected variable is not supported - use the Select() extension method on the results of the query to achieve this");
            }
            else
            {
                throw new LinqToRdfException("The Projection used in this LINQ expression is not executable by VDS.RDF.Linq");
            }
        }