/** * Metoda wczytuje szablony obiektow i modeli z pliku * * @see #OBJECTS_TEMPLATES_DIR */ public void LoadObjectsTemplates() { // TODO wczytywanie z pliku // wczytaj surowce _resources.add("wood"); _resources.add("stone"); ArrayList skills = new ArrayList(); skills.add("construction"); skills.add("lumberjack"); CSkillManager.GetInstance().SetSkills(skills); // wczytaj obiekty CUnit newTemplate = new CUnit(); newTemplate.CreateTemplate( "man", "human", 2, 2, 2, 2, 10, "man", 1, false, new CPosition(1, 1)); _objectsTemplates.add(newTemplate); ArrayList reqResources = new ArrayList(); reqResources.add(new CPosition(0, 20)); CBuilding newBuildingTemplate = new CBuilding(_resources.size()); newBuildingTemplate.CreateTemplate( "warehouse", "building", 1000, "warehouse", false, new CPosition(4, 2), new CPosition(1, 2), reqResources); _objectsTemplates.add(newBuildingTemplate); CStaticObject newStaticTemplate = new CStaticObject(0); newStaticTemplate.CreateTemplate("tree1", "tree", 100, "tree1", false, new CPosition(1, 1)); _objectsTemplates.add(newStaticTemplate); newStaticTemplate = new CStaticObject(0); newStaticTemplate.CreateTemplate("tree2", "tree", 100, "tree2", false, new CPosition(1, 1)); _objectsTemplates.add(newStaticTemplate); newStaticTemplate = new CStaticObject(0); newStaticTemplate.CreateTemplate("tree3", "tree", 100, "tree3", false, new CPosition(1, 1)); _objectsTemplates.add(newStaticTemplate); CRoad newRoad = new CRoad(); newRoad.CreateTemplate("dirtroad", 100, "dirtroad", true, new CPosition(0, 0)); _objectsTemplates.add(newRoad); // wczytaj modele CModel newModel = new CModel(); newModel.CreateTemplate("man", new CPosition(0, -32), "unit1", 2, 2, 2, G_UNITS, 32, 64); CModelManager.GetInstance().LoadModel(newModel); newModel = new CStaticModel(); newModel.CreateTemplate( "warehouse", new CPosition(0, -32), "building1", 0, 0, 0, G_BUILDINGS, 128, 96); CModelManager.GetInstance().LoadModel(newModel); newModel = new CStaticModel(); newModel.CreateTemplate( "tree1", new CPosition(-14, -66), "static1", 0, 0, 0, G_STATICS, 66, 96); ((CStaticModel) newModel).SetAnimOffset(new CPosition(0, 0)); CModelManager.GetInstance().LoadModel(newModel); newModel = new CStaticModel(); newModel.CreateTemplate( "tree2", new CPosition(-14, -66), "static1", 0, 0, 0, G_STATICS, 66, 96); ((CStaticModel) newModel).SetAnimOffset(new CPosition(0, 1)); CModelManager.GetInstance().LoadModel(newModel); newModel = new CStaticModel(); newModel.CreateTemplate( "tree3", new CPosition(-14, -66), "static1", 0, 0, 0, G_STATICS, 66, 96); ((CStaticModel) newModel).SetAnimOffset(new CPosition(0, 2)); CModelManager.GetInstance().LoadModel(newModel); newModel = new CStaticModel(); newModel.CreateTemplate("dirtroad", new CPosition(0, 0), "static2", 0, 0, 0, G_STATICS, 64, 64); ((CStaticModel) newModel).SetAnimOffset(new CPosition(0, 0)); CModelManager.GetInstance().LoadModel(newModel); }
/** * Tworzy nowy obiekt w grze * * @param game Referencja do obiektu rozgrywanej partii CGame * @param type Typ obiektu który chcemy utworzyć * @param X współrzędna X pola, w którym tworzymy obiekt * @param Y współrzędna Y pola, w którym tworzymy obiekt * @param owner gracz będący właścicielem tworzonego obiektu */ public int CreateObject(CGame game, String type, int X, int Y, CPlayer owner, int classType) { // przejrzyj szablony w poszukiwaniu obiektu typu "type" Iterator<CObject> iterator = _objectsTemplates.iterator(); while (iterator.hasNext()) { CObject object = iterator.next(); if (classType == CT_UNIT) { if (object.CheckType(type)) { // po znalezieniu obiektu utworz nową instancję obiektu CUnit newUnit = new CUnit(); // skopiuj do niej dane z szablonu newUnit.CopyTemplate((CUnit) object); // utwórz model na podstawie szablonu obiektu CModel newModel = CModelManager.GetInstance().CreateModelFromTemplate(newUnit.GetModelName()); if (newModel == null) return -1; // anuluj tworzenie obiektu jeśli nie znaleziono modelu // zainicjuj model przydzielając go do utworzonego obiektu i // nadając mu początkową pozycję newModel.Initialize(newUnit, new CPosition(X, Y)); // ustaw właściciela tworzonego obiektu newUnit.SetPlayer(owner); owner.AddUnemployed(newUnit); // dodaj model do obiektu newUnit.ApllyModel(newModel); // stwórz kolizje dla obiektu CPosition colSize = newUnit.GetCollisionSize(); CCollision newCollision; for (int y = 0; y < colSize.Y(); ++y) { for (int x = 0; x < colSize.X(); ++x) { newCollision = new CCollision(newUnit, X + x, Y + y, COLLISION_DYNAMIC); // dodaj kolizję do obiektu newUnit.ApllyCollision(newCollision); // umieść kolizję na mapie game.GetMapTileFromField(X + x, Y + y).AddCollision(newCollision); } } // umieść obiekt na mapie game.GetMapTileFromField(X, Y).AddObject(newUnit); // dodaj obiekt do listy obiektów w grze _objects.add(newUnit); // ożyw obiekt newUnit.SetAlive(true); System.out.print("CObjectManager: Stworzylem jednostke: " + type + "\n"); return newUnit.GetID(); } } else if (classType == CT_BUILDING) { if (object.CheckType(type)) { CBuilding newBuilding = new CBuilding(_resources.size()); // skopiuj do niej dane z szablonu newBuilding.CopyTemplate((CBuilding) object); // utwórz model na podstawie szablonu obiektu CStaticModel newModel = CModelManager.GetInstance().CreateModelFromTemplateStatic(newBuilding.GetModelName()); if (newModel == null) return -1; // anuluj tworzenie obiektu jeśli nie znaleziono modelu // zainicjuj model przydzielając go do utworzonego obiektu i // nadając mu początkową pozycję newModel.Initialize(newBuilding, new CPosition(X, Y)); // ustaw właściciela tworzonego obiektu newBuilding.SetPlayer(owner); owner.AddObject(newBuilding); // dodaj model do obiektu newBuilding.ApllyModel(newModel); // stwórz kolizje dla obiektu CPosition colSize = newBuilding.GetCollisionSize(); CCollision newCollision; for (int y = 0; y < colSize.Y(); ++y) { for (int x = 0; x < colSize.X(); ++x) { newCollision = new CCollision(newBuilding, X + x, Y + y, COLLISION_STATIC); // dodaj kolizję do obiektu newBuilding.ApllyCollision(newCollision); // umieść kolizję na mapie game.GetMapTileFromField(X + x, Y + y).AddCollision(newCollision); } } // umieść obiekt na mapie game.GetMapTileFromField(X, Y).AddObject(newBuilding); // dodaj obiekt do listy obiektów w grze _objects.add(newBuilding); CPosition entr = newBuilding.GetEntrance(); CreateObject(game, "dirtroad", X + entr.X(), Y + entr.Y(), null, CT_ROAD); // ożyw obiekt newBuilding.SetAlive(true); System.out.print("CObjectManager: Stworzylem budynek: " + type + "\n"); return newBuilding.GetID(); } } else if (classType == CT_STATIC) { if (object.CheckType(type)) { CStaticObject newStatic = new CStaticObject(0); // skopiuj do niej dane z szablonu newStatic.CopyTemplate((CStaticObject) object); // utwórz model na podstawie szablonu obiektu CStaticModel newModel = CModelManager.GetInstance().CreateModelFromTemplateStatic(newStatic.GetModelName()); if (newModel == null) return -1; // anuluj tworzenie obiektu jeśli nie znaleziono modelu // zainicjuj model przydzielając go do utworzonego obiektu i // nadając mu początkową pozycję newModel.Initialize(newStatic, new CPosition(X, Y)); // ustaw właściciela tworzonego obiektu newStatic.SetPlayer(owner); if (owner != null) owner.AddObject(newStatic); // dodaj model do obiektu newStatic.ApllyModel(newModel); // stwórz kolizje dla obiektu CPosition colSize = newStatic.GetCollisionSize(); CCollision newCollision; for (int y = 0; y < colSize.Y(); ++y) { for (int x = 0; x < colSize.X(); ++x) { newCollision = new CCollision(newStatic, X + x, Y + y, COLLISION_STATIC); // dodaj kolizję do obiektu newStatic.ApllyCollision(newCollision); // umieść kolizję na mapie game.GetMapTileFromField(X + x, Y + y).AddCollision(newCollision); } } // umieść obiekt na mapie game.GetMapTileFromField(X, Y).AddObject(newStatic); // dodaj obiekt do listy obiektów w grze _objects.add(newStatic); // ożyw obiekt newStatic.SetAlive(true); System.out.print("CObjectManager: Stworzylem budynek: " + type + "\n"); return newStatic.GetID(); } } else if (classType == CT_ROAD) { if (object.CheckType(type)) { CRoad newRoad = new CRoad(); // skopiuj do niej dane z szablonu newRoad.CopyTemplate((CRoad) object); // utwórz model na podstawie szablonu obiektu CStaticModel newModel = CModelManager.GetInstance().CreateModelFromTemplateStatic(newRoad.GetModelName()); if (newModel == null) return -1; // anuluj tworzenie obiektu jeśli nie znaleziono modelu // zainicjuj model przydzielając go do utworzonego obiektu i // nadając mu początkową pozycję newModel.Initialize(newRoad, new CPosition(X, Y)); // ustaw właściciela tworzonego obiektu newRoad.SetPlayer(owner); if (owner != null) owner.AddObject(newRoad); // dodaj model do obiektu newRoad.ApllyModel(newModel); // stwórz kolizje dla obiektu CPosition colSize = newRoad.GetCollisionSize(); CCollision newCollision; for (int y = 0; y < colSize.Y(); ++y) { for (int x = 0; x < colSize.X(); ++x) { newCollision = new CCollision(newRoad, X + x, Y + y, COLLISION_STATIC); // dodaj kolizję do obiektu newRoad.ApllyCollision(newCollision); // umieść kolizję na mapie game.GetMapTileFromField(X + x, Y + y).AddCollision(newCollision); } } // umieść obiekt na mapie game.GetMapTileFromField(X, Y).AddRoad(newRoad); // dodaj obiekt do listy obiektów w grze _objects.add(newRoad); newRoad.UpdateRoad(game, true); // ożyw obiekt newRoad.SetAlive(true); System.out.print("CObjectManager: Stworzylem droge: " + type + "\n"); return newRoad.GetID(); } } } return -1; }