コード例 #1
0
 private void OnDiggableReachabilityChanged(object data)
 {
     if (!IsReplacementTile)
     {
         int diggable_count    = 0;
         int unreachable_count = 0;
         building.RunOnArea(delegate(int offset_cell)
         {
             Diggable diggable = Diggable.GetDiggable(offset_cell);
             if ((UnityEngine.Object)diggable != (UnityEngine.Object)null)
             {
                 diggable_count++;
                 if (!diggable.GetComponent <KPrefabID>().HasTag(GameTags.Reachable))
                 {
                     unreachable_count++;
                 }
             }
         });
         bool flag = unreachable_count > 0 && unreachable_count == diggable_count;
         if (flag != hasUnreachableDigs)
         {
             if (flag)
             {
                 GetComponent <KSelectable>().AddStatusItem(Db.Get().BuildingStatusItems.ConstructableDigUnreachable, null);
             }
             else
             {
                 GetComponent <KSelectable>().RemoveStatusItem(Db.Get().BuildingStatusItems.ConstructableDigUnreachable, false);
             }
             hasUnreachableDigs = flag;
         }
     }
 }
コード例 #2
0
 private void OnPriorityChanged(PrioritySetting priority)
 {
     building.RunOnArea(delegate(int cell)
     {
         Diggable diggable = Diggable.GetDiggable(cell);
         if ((UnityEngine.Object)diggable != (UnityEngine.Object)null)
         {
             diggable.GetComponent <Prioritizable>().SetMasterPriority(priority);
         }
     });
 }
コード例 #3
0
    protected override void OnCleanUp()
    {
        if (IsReplacementTile && building.Def.isKAnimTile)
        {
            int        cell       = Grid.PosToCell(base.transform.GetPosition());
            GameObject gameObject = Grid.Objects[cell, (int)building.Def.ReplacementLayer];
            if ((UnityEngine.Object)gameObject == (UnityEngine.Object)base.gameObject && (UnityEngine.Object)gameObject.GetComponent <SimCellOccupier>() != (UnityEngine.Object)null)
            {
                World.Instance.blockTileRenderer.RemoveBlock(building.Def, IsReplacementTile, SimHashes.Void, cell);
            }
        }
        GameScenePartitioner.Instance.Free(ref solidPartitionerEntry);
        GameScenePartitioner.Instance.Free(ref digPartitionerEntry);
        GameScenePartitioner.Instance.Free(ref ladderParititonerEntry);
        SaveLoadRoot component = GetComponent <SaveLoadRoot>();

        if ((UnityEngine.Object)component != (UnityEngine.Object)null)
        {
            SaveLoader.Instance.saveManager.Unregister(component);
        }
        if (fetchList != null)
        {
            fetchList.Cancel("Constructable destroyed");
        }
        UnmarkArea();
        int[] placementCells = building.PlacementCells;
        foreach (int cell2 in placementCells)
        {
            Diggable diggable = Diggable.GetDiggable(cell2);
            if ((UnityEngine.Object)diggable != (UnityEngine.Object)null)
            {
                diggable.gameObject.DeleteObject();
            }
        }
        base.OnCleanUp();
    }
コード例 #4
0
 private void PlaceDiggables()
 {
     if (waitForFetchesBeforeDigging && fetchList != null && !hasLadderNearby)
     {
         OnDiggableReachabilityChanged(null);
     }
     else
     {
         bool digs_complete = true;
         if (!solidPartitionerEntry.IsValid())
         {
             Extents validPlacementExtents = building.GetValidPlacementExtents();
             solidPartitionerEntry = GameScenePartitioner.Instance.Add("Constructable.OnFetchListComplete", base.gameObject, validPlacementExtents, GameScenePartitioner.Instance.solidChangedLayer, OnSolidChangedOrDigDestroyed);
             digPartitionerEntry   = GameScenePartitioner.Instance.Add("Constructable.OnFetchListComplete", base.gameObject, validPlacementExtents, GameScenePartitioner.Instance.digDestroyedLayer, OnSolidChangedOrDigDestroyed);
         }
         if (!IsReplacementTile)
         {
             building.RunOnArea(delegate(int offset_cell)
             {
                 PrioritySetting masterPriority = GetComponent <Prioritizable>().GetMasterPriority();
                 if (Diggable.IsDiggable(offset_cell))
                 {
                     digs_complete     = false;
                     Diggable diggable = Diggable.GetDiggable(offset_cell);
                     if ((UnityEngine.Object)diggable == (UnityEngine.Object)null)
                     {
                         diggable = GameUtil.KInstantiate(Assets.GetPrefab(new Tag("DigPlacer")), Grid.SceneLayer.Move, null, 0).GetComponent <Diggable>();
                         diggable.gameObject.SetActive(true);
                         diggable.transform.SetPosition(Grid.CellToPosCBC(offset_cell, Grid.SceneLayer.Move));
                         diggable.Subscribe(-1432940121, OnDiggableReachabilityChanged);
                         Grid.Objects[offset_cell, 7] = diggable.gameObject;
                     }
                     else
                     {
                         diggable.Unsubscribe(-1432940121, OnDiggableReachabilityChanged);
                         diggable.Subscribe(-1432940121, OnDiggableReachabilityChanged);
                     }
                     diggable.choreTypeIdHash = Db.Get().ChoreTypes.BuildDig.IdHash;
                     diggable.GetComponent <Prioritizable>().SetMasterPriority(masterPriority);
                     RenderUtil.EnableRenderer(diggable.transform, false);
                     SaveLoadRoot component = diggable.GetComponent <SaveLoadRoot>();
                     if ((UnityEngine.Object)component != (UnityEngine.Object)null)
                     {
                         UnityEngine.Object.Destroy(component);
                     }
                 }
             });
             OnDiggableReachabilityChanged(null);
         }
         bool flag = building.Def.IsValidBuildLocation(base.gameObject, base.transform.GetPosition(), building.Orientation);
         if (flag)
         {
             notifier.Remove(invalidLocation);
         }
         else
         {
             notifier.Add(invalidLocation, string.Empty);
         }
         GetComponent <KSelectable>().ToggleStatusItem(Db.Get().BuildingStatusItems.InvalidBuildingLocation, !flag, this);
         bool flag2 = digs_complete && flag && fetchList == null;
         if (flag2 && buildChore == null)
         {
             buildChore = new WorkChore <Constructable>(Db.Get().ChoreTypes.Build, this, null, true, UpdateBuildState, UpdateBuildState, UpdateBuildState, true, null, false, true, null, true, true, true, PriorityScreen.PriorityClass.basic, 5, false, true);
             UpdateBuildState(buildChore);
         }
         else if (!flag2 && buildChore != null)
         {
             buildChore.Cancel("Need to dig");
             buildChore = null;
         }
     }
 }