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)); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }
/// <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"); } }