Example #1
0
 public static void SetProto(BldgProtoDef def)
 {
     BB.AssertNotNull(def);
     BB.AssertNull(protoInternal,
                   $"building prototype def <{def.defName}, {def.protoDefType.defName}> declared twice");
     protoInternal = def;
 }
Example #2
0
        public static BldgProtoDef Create <TProto, TDef>()
            where TDef : BldgDefG <TDef>
        {
            var def = new BldgProtoDef(TypeDef.Create <TProto>(), TypeDef.Create <TDef>());

            BldgDefG <TDef> .SetProto(def);

            return(def);
        }
Example #3
0
        public void LoadTypes(Game game)
        {
            List <IGameSystem> systemList = new List <IGameSystem>();

            InstantiateTypes(game, systemList, "game system");
            foreach (var s in systemList)
            {
                gameSystems.Add(s.GetType(), s);
            }

            InstantiateTypes(game, contextProviders, "context provider");

            // TODO: more evidence that these suck
            foreach (var def in defs.GetDefs <BldgDef>())
            {
                BldgProtoDef protoDef  = def.proto;
                Type         typeProto = protoDef.protoType;
                Type         typeDef   = protoDef.protoDefType;
                if (typeDef != def.GetType())
                {
                    BB.Assert(false, $"{def.GetType().Name}{def} registered with mismatched prototype (expected a {typeDef.Name}).");
                    continue;
                }

                var proto = TryInstantiate <IBuildingProto>("prototype", typeProto, game, def);
                if (proto != null)
                {
                    buildings.Add(def, proto);
                }
            }

            BB.LogInfo($"Found {buildings.Count} buildings:");
            foreach (var def in buildings.Keys)
            {
                BB.LogInfo($"    {def}");
            }
        }
Example #4
0
        public Defs()
        {
            // TODO: something neat where these are loaded dynamically
            agentMinion = new AgentTypeDef("BB:Minion");

            var tileset32 = Register(new AtlasDef("BB:tileset32", "tileset32", 16, 32));
            var tileset64 = Register(new AtlasDef("BB:tileset64", "tileset64", 32, 64));
            var sprites32 = Register(new AtlasDef("BB:sprites32", "sprites32", 8, 32));
            var sprites64 = Register(new AtlasDef("BB:sprites64", "sprites64", 16, 64));
            var arrow     = Register(new AtlasDef("BB:arrow", "character/arrow/arrow", 1, 37));

            Register(new TerrainDef("BB:Grass", "Grass", tileset32, new Vec2I(0, 29)));
            Register(new TerrainDef("BB:Dirt", "Dirt", tileset32, new Vec2I(0, 0)));
            Register(new TerrainDef("BB:Mud", "Mud", tileset32, new Vec2I(0, 26)));
            Register(new TerrainDef("BB:Path", "Path", tileset32, new Vec2I(0, 23)));
            Register(new TerrainDef("BB:Water", "Water", tileset32, new Vec2I[] {
                new Vec2I(26, 29),
                new Vec2I(26, 26),
                new Vec2I(26, 23),
                new Vec2I(26, 20),
                new Vec2I(26, 17),
                new Vec2I(26, 14),
                new Vec2I(26, 11),
                new Vec2I(26, 8),
            }, false));

            Register(new SpriteDef("BB:Stone", sprites32, Vec2I.zero, new Vec2I(2, 2), Vec2I.one));
            Register(new SpriteDef("BB:Wood", sprites32, new Vec2I(2, 0), new Vec2I(2, 2), Vec2I.one));
            Register(new SpriteDef("BB:Plank", sprites64, new Vec2I(0, 0), new Vec2I(2, 2), Vec2I.one));
            Register(new SpriteDef("BB:BldgRock", sprites32, new Vec2I(0, 18), new Vec2I(4, 4), Vec2I.zero));
            Register(new SpriteDef("BB:BldgTree", sprites32, new Vec2I(0, 4), new Vec2I(8, 14), new Vec2I(2, 0)));
            Register(new SpriteDef("BB:WoodcuttingTableD", sprites32, new Vec2I(10, 26), new Vec2I(12, 5), new Vec2I(4, 0)));
            Register(new SpriteDef("BB:WoodcuttingTableR", sprites32, new Vec2I(3, 26), new Vec2I(6, 12), new Vec2I(1, 4)));
            Register(new SpriteDef("BB:MineIcon", sprites32, new Vec2I(0, 62), new Vec2I(2, 2), Vec2I.one));
            Register(new SpriteDef("BB:BuildIcon", sprites64, new Vec2I(0, 30), new Vec2I(2, 2), Vec2I.one));
            Register(new SpriteDef("BB:CancelIcon", sprites64, new Vec2I(2, 30), new Vec2I(2, 2), Vec2I.one));
            Register(new SpriteDef("BB:PlayIcon", sprites64, new Vec2I(8, 28), new Vec2I(4, 4), Vec2I.zero));
            Register(new SpriteDef("BB:PauseIcon", sprites64, new Vec2I(12, 28), new Vec2I(4, 4), Vec2I.zero));
            Register(new SpriteDef("BB:PlayFFIcon", sprites64, new Vec2I(16, 28), new Vec2I(6, 4), Vec2I.zero));
            Register(new SpriteDef("BB:PlaySFFIcon", sprites64, new Vec2I(22, 28), new Vec2I(10, 4), Vec2I.zero));
            Register(new SpriteDef("BB:ProjArrow", arrow, new Vec2I(776, 210), new Vec2I(32, 8), new Vec2I(16, 4)));

            Register(new ItemDef("BB:Stone", "Stone", Get <SpriteDef>("BB:Stone"), 5));
            Register(new ItemDef("BB:Wood", "Wood", Get <SpriteDef>("BB:Wood"), 5));
            Register(new ItemDef("BB:Plank", "Planks", Get <SpriteDef>("BB:Plank"), 10));

            Register(BldgProtoDef.Create <BuildingProtoResource, BldgMineableDef>());
            Register(new BldgMineableDef("BB:Rock", "Rock", Tool.Pickaxe,
                                         new ItemInfo(Get <ItemDef>("BB:Stone"), 36),
                                         Get <SpriteDef>("BB:BldgRock")));

            Register(new BldgMineableDef("BB:Tree", "Tree", Tool.Axe,
                                         new ItemInfo(Get <ItemDef>("BB:Wood"), 25),
                                         Get <SpriteDef>("BB:BldgTree")));

            Register(BldgProtoDef.Create <BuildingProtoFloor, BldgFloorDef>());
            Register(new BldgFloorDef("BB:StoneBrick", "Stone Brick Floor",
                                      new[] { new ItemInfo(Get <ItemDef>("BB:Stone"), 5) },
                                      tileset64, new Vec2I(0, 9)));

            Register(BldgProtoDef.Create <BuildingProtoWall, BldgWallDef>());
            Register(new BldgWallDef("BB:StoneBrick", "Stone Brick Wall",
                                     new[] { new ItemInfo(Get <ItemDef>("BB:Stone"), 10) },
                                     tileset64, new Vec2I(0, 12)));

            Register(BldgProtoDef.Create <BuildingProtoWorkbench, BldgWorkbenchDef>());
            Register(new BldgWorkbenchDef("BB:Woodcutter", "Woodcutting Table",
                                          new BuildingBounds(new Vec2I(3, 1), new Vec2I(1, 0)), new Vec2I(0, -1),
                                          Get <SpriteDef>("BB:WoodcuttingTableD"),
                                          Get <SpriteDef>("BB:WoodcuttingTableR"),
                                          new[] { new ItemInfo(Get <ItemDef>("BB:Wood"), 10) },
                                          new[] { Register(new RecipeDef("BB:CutLogs", "Saw Planks", 4,
                                                                         new[] { new ItemInfo(Get <ItemDef>("BB:Wood"), 1) },
                                                                         new[] { new ItemInfo(Get <ItemDef>("BB:Plank"), 10) }
                                                                         )) }
                                          ));
        }