Example #1
0
        protected sealed override void PrepareConstructionConfig(
            ConstructionTileRequirements tileRequirements,
            ConstructionStageConfig build,
            ConstructionStageConfig repair,
            ConstructionUpgradeConfig upgrade,
            out ProtoStructureCategory category)
        {
            // Oil pump requires each tile to contain an oil seep.
            // Notice: technically it will be possible to construct one oil pump on two oil seeps if they're nearby,
            // so there should be the oil spawn limitation to avoid that case!
            tileRequirements
            .Clear()
            .Add(ValidatorForPvP)
            .Add(ValidatorForPvE)
            .Add(ConstructionTileRequirements.BasicRequirements)
            .Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer)
            .Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic)
            .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
                 c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere(
                     c.Tile,
                     o => o.PhysicsBody.IsStatic &&
                     !(o.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject
                       is ObjectDepositOilSeep)))
            .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
                 c => c.Tile.StaticObjects.All(o => o.ProtoWorldObject is ObjectDepositOilSeep))
            .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea)
            .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea);

            this.PrepareConstructionConfig(build,
                                           repair,
                                           out category);
        }
        protected override void PrepareTileRequirements(ConstructionTileRequirements tileRequirements)
        {
            tileRequirements.Clear()
            //// do these checks if the bomb will have physics!
            //.Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer)
            //.Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic)
            .Add(new ConstructionTileRequirements.Validator(
                     ConstructionTileRequirements.ErrorNoFreeSpace,
                     c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere(
                         c.Tile,
                         t =>
            {
                if (!t.PhysicsBody.IsStatic)
                {
                    // allow
                    return(false);
                }

                switch (t.PhysicsBody.AssociatedWorldObject
                        ?.ProtoWorldObject)
                {
                case IProtoObjectDeposit _:                                       // allow deposits
                case ObjectWallDestroyed _:                                       // allow destroyed walls
                    return(false);
                }

                return(true);
            })));
        }
Example #3
0
        protected override void PrepareConstructionConfig(
            ConstructionTileRequirements tileRequirements,
            ConstructionStageConfig build,
            ConstructionStageConfig repair,
            ConstructionUpgradeConfig upgrade,
            out ProtoStructureCategory category)
        {
            // Lithium salt extractor requires each tile to contain a geothermal spring.
            tileRequirements
            .Clear()
            .Add(ValidatorForPvP)
            .Add(ValidatorForPvE)
            .Add(ConstructionTileRequirements.BasicRequirements)
            .Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer)
            .Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic)
            .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
                 c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere(
                     c.Tile,
                     t => t.PhysicsBody.IsStatic &&
                     !(t.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject is
                       ObjectDepositGeothermalSpring)))
            .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
                 c => c.Tile.StaticObjects.All(o => o.ProtoWorldObject is ObjectDepositGeothermalSpring))
            .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea)
            .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea);

            this.PrepareConstructionConfig(build, repair, out category);
        }
Example #4
0
 protected override void PrepareTileRequirements(ConstructionTileRequirements tileRequirements)
 {
     tileRequirements
     .Clear()
     // skip this check as it's usually fine to drop the loot if player could stand there
     //.Add(ConstructionTileRequirements.ValidatorNoStaticObjectsExceptFloor)
     // validate no static physics objects there except destroyed walls and opened doors
     .Add(ConstructionTileRequirements.ValidatorSolidGround)
     .Add(ConstructionTileRequirements.ValidatorNotCliffOrSlope)
     .Add(new ConstructionTileRequirements.Validator(
              ConstructionTileRequirements.ErrorNoFreeSpace,
              c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere(
                  c.Tile,
                  t => t.PhysicsBody.IsStatic
                  // allow destroyed walls physics in the tile
                  && !(t.PhysicsBody.AssociatedWorldObject
                       ?.ProtoWorldObject is ObjectWallDestroyed)
                  // allow opened doors in the tile
                  && !(t.PhysicsBody.AssociatedWorldObject
                       ?.ProtoWorldObject is ProtoObjectDoor &&
                       t.PhysicsBody.AssociatedWorldObject
                       .GetPublicState <ObjectDoorPublicState>().IsOpened))))
     // ensure no other loot containers
     .Add(new ConstructionTileRequirements.Validator(
              // ReSharper disable once CanExtractXamlLocalizableStringCSharp
              "Tile already has a loot container",
              c => !c.Tile.StaticObjects.Any(
                  so => so.ProtoStaticWorldObject is ObjectPlayerLootContainer)));
 }
Example #5
0
 protected override void PrepareTileRequirements(ConstructionTileRequirements tileRequirements)
 {
     tileRequirements
     .Clear()
     .Add(ErrorRequiresFarmPlot,
          c => c.Tile.StaticObjects.Any(_ => _.ProtoStaticWorldObject is IProtoObjectFarm))
     .Add(ConstructionTileRequirements.BasicRequirements)
     .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
          // ensure there are no static physics objects (other than farm)
          c => !ConstructionTileRequirements
          .TileHasAnyPhysicsObjectsWhere(
              c.Tile,
              o => o.PhysicsBody.IsStatic &&
              !(o.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject
                is IProtoObjectFarm)));
 }
        protected override void PrepareConstructionConfig(
            ConstructionTileRequirements tileRequirements,
            ConstructionStageConfig build,
            ConstructionStageConfig repair,
            ConstructionUpgradeConfig upgrade,
            out ProtoStructureCategory category)
        {
            category = GetCategory <StructureCategoryIndustry>();

            // Oil pump requires each tile to contain an oil seep.
            // Notice: technically it will be possible to construct one oil pump on two oil seeps if they're nearby,
            // so there should be the oil spawn limitation to avoid that case!
            tileRequirements
            .Clear()
            .Add(ErrorRequiresOilSeep,
                 c => c.Tile.StaticObjects.Any(_ => _.ProtoStaticWorldObject is ObjectDepositOilSeep))
            .Add(ConstructionTileRequirements.BasicRequirements)
            .Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer)
            .Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic)
            .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
                 c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere(
                     c.Tile,
                     o => o.PhysicsBody.IsStatic &&
                     !(o.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject
                       is ObjectDepositOilSeep)))
            .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea)
            .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea);

            build.StagesCount          = 10;
            build.StageDurationSeconds = BuildDuration.Short;
            build.AddStageRequiredItem <ItemIngotSteel>(count: 20);
            build.AddStageRequiredItem <ItemIngotCopper>(count: 15);
            build.AddStageRequiredItem <ItemCement>(count: 25);

            repair.StagesCount          = 10;
            repair.StageDurationSeconds = BuildDuration.Short;
            repair.AddStageRequiredItem <ItemIngotSteel>(count: 5);
            repair.AddStageRequiredItem <ItemIngotCopper>(count: 2);
        }
Example #7
0
        protected override void PrepareConstructionConfig(
            ConstructionTileRequirements tileRequirements,
            ConstructionStageConfig build,
            ConstructionStageConfig repair,
            ConstructionUpgradeConfig upgrade,
            out ProtoStructureCategory category)
        {
            category = GetCategory <StructureCategoryIndustry>();

            // Lithium salt extractor requires each tile to contain a geothermal spring.
            tileRequirements
            .Clear()
            .Add(ErrorRequiresGeothermalSpring,
                 c => c.Tile.StaticObjects.Any(_ => _.ProtoStaticWorldObject is ObjectDepositGeothermalSpring))
            .Add(ConstructionTileRequirements.BasicRequirements)
            .Add(ConstructionTileRequirements.ValidatorClientOnlyNoCurrentPlayer)
            .Add(ConstructionTileRequirements.ValidatorNoPhysicsBodyDynamic)
            .Add(ConstructionTileRequirements.ErrorNoFreeSpace,
                 c => !ConstructionTileRequirements.TileHasAnyPhysicsObjectsWhere(
                     c.Tile,
                     t => t.PhysicsBody.IsStatic &&
                     !(t.PhysicsBody.AssociatedWorldObject?.ProtoWorldObject is
                       ObjectDepositGeothermalSpring)))
            .Add(ConstructionTileRequirements.ValidatorNotRestrictedArea)
            .Add(LandClaimSystem.ValidatorIsOwnedOrFreeArea);

            build.StagesCount          = 10;
            build.StageDurationSeconds = BuildDuration.Short;
            build.AddStageRequiredItem <ItemIngotSteel>(count: 20);
            build.AddStageRequiredItem <ItemIngotCopper>(count: 15);
            build.AddStageRequiredItem <ItemCement>(count: 25);

            repair.StagesCount          = 10;
            repair.StageDurationSeconds = BuildDuration.Short;
            repair.AddStageRequiredItem <ItemIngotSteel>(count: 5);
            repair.AddStageRequiredItem <ItemIngotCopper>(count: 2);
        }