private static void Main(string[] args) { // All you have to do is put new experiment classes in the ExperimentFactory. ExperimentFactory factory = new ExperimentFactory(); Sandbox sandbox = new Sandbox(factory); sandbox.Run(); }
/** Removes experimental part. * TODO: Check if there is another active contract using this part in which case we have to keep it! */ private void removeExperimentalParts() { AvailablePart ap = ExperimentFactory.getPartForExperiment(ExperimentFactory.KEMINI_EXPERIMENTS, experiment); if (ap != null && ResearchAndDevelopment.IsExperimentalPart(ap)) { NE_Helper.log("Removing experimental part: " + ap.name); ResearchAndDevelopment.RemoveExperimentalPart(ap); } }
private void addExperimentalParts() { AvailablePart ap = ExperimentFactory.getPartForExperiment(ExperimentFactory.KEMINI_EXPERIMENTS, experiment); if (ap != null && !ResearchAndDevelopment.PartModelPurchased(ap)) { NE_Helper.log("Adding experimental part: " + ap.name); ResearchAndDevelopment.AddExperimentalPart(ap); } }
public override bool MeetRequirements() { CelestialBodySubtree kerbinProgress = null; foreach (var node in ProgressTracking.Instance.celestialBodyNodes) { if (node.Body == Planetarium.fetch.Home) { kerbinProgress = node; } } if (kerbinProgress == null) { return(false); } return(ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS).Count > 0); }
/** Callback used to generate a contract at a particular prestige level. * this.Prestige contains the required prestige level of contract to generate. * Add any other checks and guards in here to prevent too many contracts being generated. * Return TRUE if a contract could be created, FALSE if not. */ protected override bool Generate() { if (Prestige != ContractPrestige.Trivial) { return(false); } if (ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS, true).Count == 0) { return(false); } NE_Helper.log("Generate Contract"); if (activeContracts() >= getMaxContracts()) { NE_Helper.log("Generate Contract: Max Contracts reached: " + getMaxContracts()); return(false); } targetBody = getTargetBody(); // Assert: targetBody != null NE_Helper.log("Generate Contract: Body: " + targetBody.name); if (!setTargetExperiment(getTargetExperiment())) { return(false); } NE_Helper.log("Generate Contract: Add Parameter"); AddParameter(new Parameters.ExperimentDataDoExperimentParameter(targetBody, experiment)); AddParameter(new Parameters.ExperimentDataReturnExperimentParameter(targetBody, experiment)); NE_Helper.log("Generate Contract: set Values "); base.SetExpiry(10, 100); base.SetScience(5f, targetBody); base.SetDeadlineYears(1f, targetBody); base.SetReputation(80f, 30f, targetBody); base.SetFunds(15000f, 30000f, 5000f, targetBody); agent = AgentList.Instance.GetAgent("Nehemiah Engineering"); NE_Helper.log("Generate Contract: done Exp: " + experiment.getAbbreviation() + " Body: " + targetBody.name + " funds Adv: " + this.FundsAdvance); return(true); }
private ExperimentData getTargetExperiment() { List <ExperimentData> unlockedExperiments = ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS); List <ExperimentData> unlookedNoContract = new List <ExperimentData>(); foreach (ExperimentData exp in unlockedExperiments) { if (activeAndDoneContracts(exp, targetBody) == 0) { unlookedNoContract.Add(exp); } } if (unlookedNoContract.Count == 0) { return(null); } else { return(unlookedNoContract[UnityEngine.Random.Range(0, unlookedNoContract.Count)]); } }
private ExperimentData getTargetExperiment() { List <ExperimentData> unlockedExperiments = ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS, true); List <ExperimentData> unlockedNoContract = new List <ExperimentData>(); for (int idx = 0, count = unlockedExperiments.Count; idx < count; idx++) { var exp = unlockedExperiments[idx]; if (activeAndDoneContracts(exp, targetBody) == 0) { unlockedNoContract.Add(exp); } } if (unlockedNoContract.Count == 0) { return(null); } else { return(unlockedNoContract[UnityEngine.Random.Range(0, unlockedNoContract.Count)]); } }
public void ExperimentLifecycleTest() { using (MockContext context = MockContext.Start(this.GetType())) { var chaosManagementClient = this.GetChaosManagementClient(context, handler); var experiment = ExperimentFactory.CreateDelayActionExperiment( experimentName: TestConstants.ExperimentName, branchName: TestConstants.BranchName, stepName: TestConstants.StepName, location: TestConstants.Region, principalId: TestConstants.ExperimentIdentityPrincipalId, tenantId: TestConstants.ExperimentIdentityTenantId); var createdExperimentResponse = chaosManagementClient.Experiments.CreateOrUpdateWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName, experiment).GetAwaiter().GetResult(); Assert.NotNull(createdExperimentResponse); Assert.Equal(HttpStatusCode.OK, createdExperimentResponse.Response.StatusCode); var getExperimentResponse = chaosManagementClient.Experiments.GetAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult(); Assert.NotNull(getExperimentResponse); var listExperimentsResponse = chaosManagementClient.Experiments.ListWithHttpMessagesAsync(TestConstants.ResourceGroupName, false).GetAwaiter().GetResult(); Assert.NotNull(listExperimentsResponse); var listExperiments = ResponseContentToListExperiments(listExperimentsResponse.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult()); Assert.True(listExperiments.Count > 0); var startExperimentResponse = chaosManagementClient.Experiments.StartWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult(); Assert.NotNull(startExperimentResponse); Assert.Equal(HttpStatusCode.Accepted, startExperimentResponse.Response.StatusCode); var statusElements = new Uri(startExperimentResponse.Body.StatusUrl).AbsolutePath.Split('/'); Assert.True(statusElements.Length == 11); var statusName = statusElements[10]; var status = string.Empty; do { Thread.Sleep(1000 * 120); // Sleep for 2 minute so we let the experiment execution run to completion. var getStatusResponse = chaosManagementClient.Experiments.GetStatusWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName, statusName).GetAwaiter().GetResult(); Assert.NotNull(getStatusResponse); Assert.Equal(HttpStatusCode.OK, getStatusResponse.Response.StatusCode); status = getStatusResponse.Body.Status; }while (!IsStatusTerminal(status)); Assert.Equal("success", status, StringComparer.InvariantCultureIgnoreCase); var getExecutionDetailResponse = chaosManagementClient.Experiments.GetExecutionDetailsWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName, statusName).GetAwaiter().GetResult(); Assert.NotNull(getExecutionDetailResponse); Assert.Equal(HttpStatusCode.OK, getExecutionDetailResponse.Response.StatusCode); var listStatusesResponse = chaosManagementClient.Experiments.ListAllStatusesWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult(); Assert.NotNull(listStatusesResponse); var listExperimentStatuses = ResponseContentToListExperimentStatus(listStatusesResponse.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult()); Assert.True(listExperimentStatuses.Count > 0); var listExecutionDetailsResponse = chaosManagementClient.Experiments.ListExecutionDetailsWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult(); Assert.NotNull(listExecutionDetailsResponse); var listExecutionDetails = ResponseContentToChaosExperimentExecutionDetailsList(listExecutionDetailsResponse.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult()); Assert.True(listExecutionDetails.Count > 0); var deleteResponse = chaosManagementClient.Experiments.DeleteWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult(); Assert.NotNull(deleteResponse); Assert.Equal(HttpStatusCode.OK, deleteResponse.Response.StatusCode); } }
public Sandbox(ExperimentFactory factory) { this.factory = factory; }