1 /* $Id: World.java 22 2008-12-30 17:33:44Z mihlon $ */
2
3 //////////////////////////////////////////////////////////////////////////////
4 // //
5 // This program is free software: you can redistribute it and/or modify //
6 // it under the terms of the GNU General Public License as published by //
7 // the Free Software Foundation, either version 3 of the License, or //
8 // at your option any later version. //
9 // //
10 // This program is distributed in the hope that it will be useful, //
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
13 // GNU General Public License for more details. //
14 // //
15 // You should have received a copy of the GNU General Public License //
16 // along with this program. If not, see <http://www.gnu.org/licenses/>. //
17 // //
18 //////////////////////////////////////////////////////////////////////////////
19
20 package cs.pancava.caltha.worlds;
21
22 import java.util.ArrayList;
23
24 /**
25 * <p><b>Tato trida obsahuje jednotlive elementy prave vytvoreneho sveta.</b></p>
26 *
27 * @author Milan Vaclavik<br />
28 * @version $Revision: 22 $<br />
29 * $LastChangedBy: mihlon $
30 */
31 public class World
32 {
33 /**
34 * Identifikuje objekt jako mistnost.
35 */
36 public static final int WORLD_ROOM = 1;
37
38 /**
39 * Identifikuje objekt jako trasu mezi dvema objekty (mistnostmi).
40 */
41 public static final int WORLD_ROUTE = 2;
42
43 /**
44 * Seznam vsech mistnosti ve vytvorenem svete.
45 */
46 private ArrayList<GameEntity>roomsAL = new ArrayList<GameEntity>();
47
48 /**
49 * Seznam vsech tras mezi dvema objekty (mistnostmi) ve vytvorenem svete.
50 */
51 private ArrayList<GameEntity>routesAL = new ArrayList<GameEntity>();
52
53 /**
54 * Nazev vytvoreneho sveta.
55 */
56 private String worldNameS;
57
58 /**
59 * Konstruktor.
60 * @param n String : Nazev vytvareneho sveta.
61 */
62 public World(final String n)
63 {
64 this.worldNameS = n;
65
66 // Vynulovani citace -> zacali jsme tvorit novy svet.
67 GameEntity.resetCounter();
68 }
69
70 /**
71 * Vlozi vytvorenou herni instanci sveta do daneho seznamu, obsahuji jednotlive
72 * elementy vytvoreneho sveta.
73 * @param ge GameEntity : Vkladana instance herniho sveta.
74 */
75 public final void addGameEntity(final GameEntity ge)
76 {
77 switch (ge.getType())
78 {
79 case World.WORLD_ROOM:
80 this.roomsAL.add(ge);
81 break;
82 case World.WORLD_ROUTE:
83 this.routesAL.add(ge);
84 break;
85 default:
86 // TODO: Neznamy objekt, proto ho nevlozime do zadneho seznamu, vadi to, kdyz se pouze takto osetri tato udalost ?
87 break;
88 }
89 }
90
91 /**
92 * Vrati pole vsech mistnosti (objektu) ve vytvorenem svete.
93 * @return ArratList : Pole vsech obektu ve vytvorenem svete.
94 */
95 public final ArrayList<GameEntity> getWorldRoomsAL()
96 {
97 return this.roomsAL;
98 }
99
100 /**
101 * Vrati pole vsech spoju (cest) ve vytvorenem svete.
102 * @return ArratList : Pole vsech obektu ve vytvorenem svete.
103 */
104 public final ArrayList<GameEntity> getWorldRoutesAL()
105 {
106 return this.routesAL;
107 }
108
109 /**
110 * Vrati objekt ze seznamu urceny indexem.
111 * @param indexObektu int : Index objektu ze seznamu, ktery budeme vracet.
112 * @return GameEntity : Prvek ze seznamu, ktery vracime
113 */
114 public final GameEntity getWorldRoomsAL(final int indexObektu)
115 {
116 if (!this.roomsAL.isEmpty() && indexObektu > -1 && indexObektu < this.roomsAL.size())
117 {
118 return this.roomsAL.get(indexObektu);
119 }
120
121 // Seznam je prazdny a nebo jsme zadali spatny rozsah indexu.
122 return null;
123 }
124
125 /**
126 * Vrati objekt ze seznamu urceny indexem.
127 * @param indexObektu int : Index objektu ze seznamu, ktery budeme vracet.
128 * @return GameEntity : Prvek ze seznamu, ktery vracime
129 */
130 public final GameEntity getWorldRoutesAL(final int indexObektu)
131 {
132 if (!this.routesAL.isEmpty() && indexObektu > -1 && indexObektu < this.routesAL.size())
133 {
134 return this.routesAL.get(indexObektu);
135 }
136
137 // Seznam je prazdny a nebo jsme zadali spatny rozsah indexu.
138 return null;
139 }
140
141 /**
142 * Aktualizuje lokaci konkretniho objektu.
143 * @param ge GameEntity: Herni objekt, ktery budeme aktualizovat.
144 * @param index : Index obektu, u ktereho provadime aktualizaci lokace.
145 * @param x : X-ova souradnice nove pozice.
146 * @param y : Y-ova souradnice nove pozice.
147 */
148 public final void updateGameEntityLocation(final GameEntity ge, final int index, final int x, final int y)
149 {
150 switch (ge.getType())
151 {
152 case World.WORLD_ROOM:
153 if (!this.roomsAL.isEmpty() && index > -1 && index < this.roomsAL.size())
154 {
155 this.roomsAL.get(index).setLocationX(x);
156 this.roomsAL.get(index).setLocationY(y);
157 }
158 break;
159 default:
160 // TODO: Neznamy objekt, proto ho nevlozime do zadneho seznamu, vadi to, kdyz se pouze takto osetri tato udalost ?
161 break;
162 }
163 }
164
165 /**
166 * Pokud smazeme nejakou mistnost, tak ztratime i index do seznamu mistnost -> do seznamu se take pristupuje primo
167 * s pomoci indexu. Proto posuneme indexy u zbyvajicich mistnosti.
168 * @param odstranenyIndex int : Od jake pozice budeme posouvat indexy.
169 */
170 public void updateRooms(final int odstranenyIndex)
171 {
172 final int pocet = roomsAL.size();
173
174 // Indexy se nebudou posouvat, pokud odstranujeme posledni prvek a nebo kdyz je zadany index mimo interval
175 if (odstranenyIndex < pocet && odstranenyIndex > -1)
176 {
177 for (int i = odstranenyIndex; i < pocet; i = i + 1)
178 {
179 this.getWorldRoomsAL(i).downID();
180 }
181 }
182 }
183 }