Exemplo n.º 1
0
 /**
  * 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;
 }