public static void SetProto(BldgProtoDef def) { BB.AssertNotNull(def); BB.AssertNull(protoInternal, $"building prototype def <{def.defName}, {def.protoDefType.defName}> declared twice"); protoInternal = def; }
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); }
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}"); } }
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) } )) } )); }