/** * 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; }