public MissionInteriorCondition GetTopCondition() { int topConditionIndex = 0; MissionInteriorCondition topCondition = null; if (MissionCondition.CheckConditions <MissionInteriorCondition>(State.Conditions, out topConditionIndex)) { topCondition = State.Conditions[topConditionIndex]; } else { topCondition = State.Default; } return(topCondition); }
public MissionInteriorCondition GetTopCondition( ) { int topConditionIndex = 0; MissionInteriorCondition topCondition = null; if (MissionCondition.CheckConditions <MissionInteriorCondition> (State.Conditions, out topConditionIndex)) { topCondition = State.Conditions [topConditionIndex]; //Debug.Log("Choosing condition " + topConditionIndex.ToString () + " in " + name + " - " + topCondition.MissionName + " is " + topCondition.Status.ToString ( ) + ", " + topCondition.ObjectiveName + " is " + topCondition.ObjectiveStatus.ToString ( )); } else { //Debug.Log("Choosing default in " + name); topCondition = State.Default; } return(topCondition); }
public override void OnInitialized() { if (worlditem.Is <Structure>(out structure)) { structure.OnPreparingToBuild += OnPreparingToBuild; worlditem.OnVisible += OnVisible; LastTopCondition = null; if (structure.State.ForceBuildInterior) { State.OnlyRefreshOnVisible = true; } if (State.OnlyRefreshOnVisible) { Player.Get.AvatarActions.Subscribe(AvatarAction.MissionUpdated, new ActionListener(MissionUpdated)); } } }
public void OnPreparingToBuild() { if (structure.Is(StructureLoadState.InteriorLoading | StructureLoadState.InteriorLoaded) || Player.Local.Surroundings.IsVisitingStructure(structure)) { if (Player.Local.HasSpawned) { return; } } //check the mission states to figure out which interiors to build LastTopCondition = GetTopCondition(); structure.State.AdditionalInteriorVariants.Clear(); structure.State.AdditionalInteriorVariants.AddRange(LastTopCondition.StateVariable.InteriorVariants); structure.State.InteriorCharacters.Clear(); structure.State.OwnerSpawn = LastTopCondition.StateVariable.OwnerSpawn; structure.State.InteriorCharacters.AddRange(LastTopCondition.StateVariable.AdditionalInteriorCharacters); }
protected IEnumerator OnMissionUpdated() { double waitUntil = Frontiers.WorldClock.AdjustedRealTime + 1f; while (Frontiers.WorldClock.AdjustedRealTime < waitUntil) { yield return(null); } if (!Player.Local.Surroundings.IsVisitingStructure(structure)) { if (LastTopCondition != null) { //if we've been through this before //check the last top condition again MissionInteriorCondition newTopCondition = GetTopCondition(); if (newTopCondition != LastTopCondition) { LastTopCondition = newTopCondition; structure.State.AdditionalInteriorVariants.Clear(); structure.State.AdditionalInteriorVariants.AddRange(LastTopCondition.StateVariable.InteriorVariants); structure.State.InteriorCharacters.Clear(); structure.State.OwnerSpawn = LastTopCondition.StateVariable.OwnerSpawn; structure.State.InteriorCharacters.AddRange(LastTopCondition.StateVariable.AdditionalInteriorCharacters); //if we have a DIFFERENT condition than the last time //we want to wipe the slate clean //so add the interior to unload immediately Structures.AddInteriorToUnload(structure); } } } mUpdatingOverTime = false; yield break; }
public void ForceRebuild() { LastTopCondition = null; OnVisible(); }
public void TestState( ) { MissionInteriorCondition newTopCondition = GetTopCondition(); }