1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.irurueta.geometry.io;
17
18 import java.io.IOException;
19
20 public class Chunk3DS {
21 public static final int NULL_CHUNK = 0x0000;
22 public static final int M3DMAGIC = 0x4D4D;
23 public static final int SMAGIC = 0x2D2D;
24 public static final int LMAGIC = 0x2D3D;
25 public static final int MLIBMAGIC = 0x3DAA;
26 public static final int MATMAGIC = 0x3DFF;
27 public static final int CMAGIC = 0xC23D;
28 public static final int M3D_VERSION = 0x0002;
29 public static final int M3D_KFVERSION = 0x0005;
30
31 public static final int COLOR_F = 0x0010;
32 public static final int COLOR_24 = 0x0011;
33 public static final int LIN_COLOR_24 = 0x0012;
34 public static final int LIN_COLOR_F = 0x0013;
35 public static final int INT_PERCENTAGE = 0x0030;
36 public static final int FLOAT_PERCENTAGE = 0x0031;
37
38 public static final int MDATA = 0x3D3D;
39 public static final int MESH_VERSION = 0x3D3E;
40 public static final int MASTER_SCALE = 0x0100;
41 public static final int LO_SHADOW_BIAS = 0x1400;
42 public static final int HI_SHADOW_BIAS = 0x1410;
43 public static final int SHADOW_MAP_SIZE = 0x1420;
44 public static final int SHADOW_SAMPLES = 0x1430;
45 public static final int SHADOW_RANGE = 0x1440;
46 public static final int SHADOW_FILTER = 0x1450;
47 public static final int RAY_BIAS = 0x1460;
48 public static final int O_CONSTS = 0x1500;
49 public static final int AMBIENT_LIGHT = 0x2100;
50 public static final int BIT_MAP = 0x1100;
51 public static final int SOLID_BGND = 0x1200;
52 public static final int V_GRADIENT = 0x1300;
53 public static final int USE_BIT_MAP = 0x1101;
54 public static final int USE_SOLID_BGND = 0x1201;
55 public static final int USE_V_GRADIENT = 0x1301;
56 public static final int FOG = 0x2200;
57 public static final int FOG_BGND = 0x2210;
58 public static final int LAYER_FOG = 0x2302;
59 public static final int DISTANCE_CUE = 0x2300;
60 public static final int DCUE_BGND = 0x2310;
61 public static final int USE_FOG = 0x2201;
62 public static final int USE_LAYER_FOG = 0x2303;
63 public static final int USE_DISTANCE_CUE = 0x2301;
64
65 public static final int MAT_ENTRY = 0xAFFF;
66 public static final int MAT_NAME = 0xA000;
67 public static final int MAT_AMBIENT = 0xA010;
68 public static final int MAT_DIFFUSE = 0xA020;
69 public static final int MAT_SPECULAR = 0xA030;
70 public static final int MAT_SHININESS = 0xA040;
71 public static final int MAT_SHIN2PCT = 0xA041;
72 public static final int MAT_TRANSPARENCY = 0xA050;
73 public static final int MAT_XPFALL = 0xA052;
74 public static final int MAT_USE_XPFALL = 0xA240;
75 public static final int MAT_REFBLUR = 0xA053;
76 public static final int MAT_SHADING = 0xA100;
77 public static final int MAT_USE_REFBLUR = 0xA250;
78 public static final int MAT_SELF_ILLUM = 0xA080;
79 public static final int MAT_TWO_SIDE = 0xA081;
80 public static final int MAT_DECAL = 0xA082;
81 public static final int MAT_ADDITIVE = 0xA083;
82 public static final int MAT_SELF_ILPCT = 0xA084;
83 public static final int MAT_WIRE = 0xA085;
84 public static final int MAT_FACEMAP = 0xA088;
85 public static final int MAT_PHONGSOFT = 0xA08C;
86 public static final int MAT_WIREABS = 0xA08E;
87 public static final int MAT_WIRE_SIZE = 0xA087;
88 public static final int MAT_TEXMAP = 0xA200;
89 public static final int MAT_SXP_TEXT_DATA = 0xA320;
90 public static final int MAT_TEXMASK = 0xA33E;
91 public static final int MAT_SXP_TEXTMASK_DATA = 0xA32A;
92 public static final int MAT_TEX2MAP = 0xA33A;
93 public static final int MAT_SXP_TEXT2_DATA = 0xA321;
94 public static final int MAT_TEX2MASK = 0xA340;
95 public static final int MAT_SXP_TEXT2MASK_DATA = 0xA32C;
96 public static final int MAT_OPACMAP = 0xA210;
97 public static final int MAT_SXP_OPAC_DATA = 0xA322;
98 public static final int MAT_OPACMASK = 0xA342;
99 public static final int MAT_SXP_OPACMASK_DATA = 0xA32E;
100 public static final int MAT_BUMPMAP = 0xA230;
101 public static final int MAT_SXP_BUMP_DATA = 0xA324;
102 public static final int MAT_BUMPMASK = 0xA344;
103 public static final int MAT_SXP_BUMPMASK_DATA = 0xA330;
104 public static final int MAT_SPECMAP = 0xA204;
105 public static final int MAT_SXP_SPEC_DATA = 0xA325;
106 public static final int MAT_SPECMASK = 0xA348;
107 public static final int MAT_SXP_SPECMASK_DATA = 0xA332;
108 public static final int MAT_SHINMAP = 0xA33C;
109 public static final int MAT_SXP_SHIN_DATA = 0xA326;
110 public static final int MAT_SHINMASK = 0xA346;
111 public static final int MAT_SXP_SHINMASK_DATA = 0xA334;
112 public static final int MAT_SELFIMAP = 0xA33D;
113 public static final int MAT_SXP_SELFI_DATA = 0xA328;
114 public static final int MAT_SELFIMASK = 0xA34A;
115 public static final int MAT_SXP_SELFIMASK_DATA = 0xA336;
116 public static final int MAT_REFLMAP = 0xA220;
117 public static final int MAT_REFLMASK = 0xA34C;
118 public static final int MAT_SXP_REFLMASK_DATA = 0xA338;
119 public static final int MAT_ACUBIC = 0xA310;
120 public static final int MAT_MAPNAME = 0xA300;
121 public static final int MAT_MAP_TILING = 0xA351;
122 public static final int MAT_MAP_TEXBLUR = 0xA353;
123 public static final int MAT_MAP_USCALE = 0xA354;
124 public static final int MAT_MAP_VSCALE = 0xA356;
125 public static final int MAT_MAP_UOFFSET = 0xA358;
126 public static final int MAT_MAP_VOFFSET = 0xA35A;
127 public static final int MAT_MAP_ANG = 0xA35C;
128 public static final int MAT_MAP_COL1 = 0xA360;
129 public static final int MAT_MAP_COL2 = 0xA362;
130 public static final int MAT_MAP_RCOL = 0xA364;
131 public static final int MAT_MAP_GCOL = 0xA366;
132 public static final int MAT_MAP_BCOL = 0xA368;
133
134 public static final int NAMED_OBJECT = 0x4000;
135 public static final int N_DIRECT_LIGHT = 0x4600;
136 public static final int DL_OFF = 0x4620;
137 public static final int DL_OUTER_RANGE = 0x465A;
138 public static final int DL_INNER_RANGE = 0x4659;
139 public static final int DL_MULTIPLIER = 0x465B;
140 public static final int DL_EXCLUDE = 0x4654;
141 public static final int DL_ATTENUATE = 0x4625;
142 public static final int DL_SPOTLIGHT = 0x4610;
143 public static final int DL_SPOT_ROLL = 0x4656;
144 public static final int DL_SHADOWED = 0x4630;
145 public static final int DL_LOCAL_SHADOW2 = 0x4641;
146 public static final int DL_SEE_CONE = 0x4650;
147 public static final int DL_SPOT_RECTANGULAR = 0x4651;
148 public static final int DL_SPOT_ASPECT = 0x4657;
149 public static final int DL_SPOT_PROJECTOR = 0x4653;
150 public static final int DL_SPOT_OVERSHOOT = 0x4652;
151 public static final int DL_RAY_BIAS = 0x4658;
152 public static final int DL_RAYSHAD = 0x4627;
153 public static final int N_CAMERA = 0x4700;
154 public static final int CAM_SEE_CONE = 0x4710;
155 public static final int CAM_RANGES = 0x4720;
156 public static final int OBJ_HIDDEN = 0x4010;
157 public static final int OBJ_VIS_LOFTER = 0x4011;
158 public static final int OBJ_DOESNT_CAST = 0x4012;
159 public static final int OBJ_DONT_RCVSHADOW = 0x4017;
160 public static final int OBJ_MATTE = 0x4013;
161 public static final int OBJ_FAST = 0x4014;
162 public static final int OBJ_PROCEDURAL = 0x4015;
163 public static final int OBJ_FROZEN = 0x4016;
164 public static final int N_TRI_OBJECT = 0x4100;
165 public static final int POINT_ARRAY = 0x4110;
166 public static final int POINT_FLAG_ARRAY = 0x4111;
167 public static final int FACE_ARRAY = 0x4120;
168 public static final int MSH_MAT_GROUP = 0x4130;
169 public static final int SMOOTH_GROUP = 0x4150;
170 public static final int MSH_BOXMAP = 0x4190;
171 public static final int TEX_VERTS = 0x4140;
172 public static final int MESH_MATRIX = 0x4160;
173 public static final int MESH_COLOR = 0x4165;
174 public static final int MESH_TEXTURE_INFO = 0x4170;
175
176 public static final int KFDATA = 0xB000;
177 public static final int KFHDR = 0xB00A;
178 public static final int KFSEG = 0xB008;
179 public static final int KFCURTIME = 0xB009;
180 public static final int AMBIENT_NODE_TAG = 0xB001;
181 public static final int OBJECT_NODE_TAG = 0xB002;
182 public static final int CAMERA_NODE_TAG = 0xB003;
183 public static final int TARGET_NODE_TAG = 0xB004;
184 public static final int LIGHT_NODE_TAG = 0xB005;
185 public static final int L_TARGET_NODE_TAG = 0xB006;
186 public static final int SPOTLIGHT_NODE_TAG = 0xB007;
187 public static final int NODE_ID = 0xB030;
188 public static final int NODE_HDR = 0xB010;
189 public static final int PIVOT = 0xB013;
190 public static final int INSTANCE_NAME = 0xB011;
191 public static final int MORPH_SMOOTH = 0xB015;
192 public static final int BOUNDBOX = 0xB014;
193 public static final int POS_TRACK_TAG = 0xB020;
194 public static final int COL_TRACK_TAG = 0xB025;
195 public static final int ROT_TRACK_TAG = 0xB021;
196 public static final int SCL_TRACK_TAG = 0xB022;
197 public static final int MORPH_TRACK_TAG = 0xB026;
198 public static final int FOV_TRACK_TAG = 0xB023;
199 public static final int ROLL_TRACK_TAG = 0xB024;
200 public static final int HOT_TRACK_TAG = 0xB027;
201 public static final int FALL_TRACK_TAG = 0xB028;
202 public static final int HIDE_TRACK_TAG = 0xB029;
203
204 public static final int POLY_2D = 0x5000;
205 public static final int SHAPE_OK = 0x5010;
206 public static final int SHAPE_NOT_OK = 0x5011;
207 public static final int SHAPE_HOOK = 0x5020;
208 public static final int PATH_3D = 0x6000;
209 public static final int PATH_MATRIX = 0x6005;
210 public static final int SHAPE_2D = 0x6010;
211 public static final int M_SCALE = 0x6020;
212 public static final int M_TWIST = 0x6030;
213 public static final int M_TEETER = 0x6040;
214 public static final int M_FIT = 0x6050;
215 public static final int M_BEVEL = 0x6060;
216 public static final int XZ_CURVE = 0x6070;
217 public static final int YZ_CURVE = 0x6080;
218 public static final int INTERPCT = 0x6090;
219 public static final int DEFORM_LIMIT = 0x60A0;
220
221 public static final int USE_CONTOUR = 0x6100;
222 public static final int USE_TWEEN = 0x6110;
223 public static final int USE_SCALE = 0x6120;
224 public static final int USE_TWIST = 0x6130;
225 public static final int USE_TEETER = 0x6140;
226 public static final int USE_FIT = 0x6150;
227 public static final int USE_BEVEL = 0x6160;
228
229 public static final int DEFAULT_VIEW = 0x3000;
230 public static final int VIEW_TOP = 0x3010;
231 public static final int VIEW_BOTTOM = 0x3020;
232 public static final int VIEW_LEFT = 0x3030;
233 public static final int VIEW_RIGHT = 0x3040;
234 public static final int VIEW_FRONT = 0x3050;
235 public static final int VIEW_BACK = 0x3060;
236 public static final int VIEW_USER = 0x3070;
237 public static final int VIEW_CAMERA = 0x3080;
238 public static final int VIEW_WINDOW = 0x3090;
239
240 public static final int VIEWPORT_LAYOUT_OLD = 0x7000;
241 public static final int VIEWPORT_DATA_OLD = 0x7010;
242 public static final int VIEWPORT_LAYOUT = 0x7001;
243 public static final int VIEWPORT_DATA = 0x7011;
244 public static final int VIEWPORT_DATA_3 = 0x7012;
245 public static final int VIEWPORT_SIZE = 0x7020;
246 public static final int NETWORK_VIEW = 0x7030;
247
248
249 private int chunkId;
250
251
252 private long size;
253
254 private long startStreamPosition;
255 private long endStreamPosition;
256
257 public Chunk3DS() {
258 chunkId = -1;
259 size = startStreamPosition = endStreamPosition = -1;
260 }
261
262 public int getChunkId() {
263 return chunkId;
264 }
265
266 public void setChunkId(final int chunkId) {
267 this.chunkId = chunkId;
268 }
269
270 public boolean isChunkIdAvailable() {
271 return chunkId >= 0;
272 }
273
274 public long getSize() {
275 return size;
276 }
277
278 public void setSize(final long size) {
279 this.size = size;
280 }
281
282 public boolean isSizeAvailable() {
283 return size >= 0;
284 }
285
286 public long getStartStreamPosition() {
287 return startStreamPosition;
288 }
289
290 public void setStartStreamPosition(final long startStreamPosition) {
291 this.startStreamPosition = startStreamPosition;
292 }
293
294 public boolean isStartStreamPositionAvailable() {
295 return startStreamPosition >= 0;
296 }
297
298 public long getEndStreamPosition() {
299 return endStreamPosition;
300 }
301
302 public void setEndStreamPosition(final long endStreamPosition) {
303 this.endStreamPosition = endStreamPosition;
304 }
305
306 public boolean isEndStreamPositionAvailable() {
307 return endStreamPosition >= 0;
308 }
309
310 public static Chunk3DS load(final AbstractFileReaderAndWriter reader) throws IOException {
311 final var chunk = new Chunk3DS();
312 chunk.startStreamPosition = reader.getPosition();
313 chunk.chunkId = reader.readUnsignedShort(EndianType.LITTLE_ENDIAN_TYPE);
314 chunk.size = reader.readUnsignedInt(EndianType.LITTLE_ENDIAN_TYPE);
315 chunk.endStreamPosition = chunk.startStreamPosition + chunk.size;
316
317 return chunk;
318 }
319 }