예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
                }
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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;
        }
예제 #6
0
 public void ForceRebuild()
 {
     LastTopCondition = null;
     OnVisible();
 }
예제 #7
0
 public void TestState( )
 {
     MissionInteriorCondition newTopCondition = GetTopCondition();
 }