the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2
3#include <assert.h>
4
5//Note - this is meant to be a really simple wrapper round a pointer just to be able to add a length value to arrays.
6// As such, it shouldn't delete its data in a destructor as shallow copies will be made of this and we don't want to
7// free the data just because one of those has gone out of scope
8template <class T> class arrayWithLength
9{
10public:
11 T *data;
12 unsigned int length;
13 arrayWithLength() { data = NULL; length = 0; }
14 arrayWithLength(unsigned int elements, bool bClearArray=true) { assert(elements!=0); data = new T[elements]; if(bClearArray){ memset( data,0,sizeof(T)*elements); } this->length = elements; }
15
16 // 4J Stu Added this ctor so I static init arrays in the Item derivation tree
17 arrayWithLength( T data[], unsigned int elements) { this->data = data; this->length = elements; }
18
19 //~arrayWithLength() { delete[] data; }
20
21 void resize( unsigned int elements )
22 {
23 assert( elements > length );
24 T *temp = new T[elements];
25 memset( temp,0,sizeof(T)*elements);
26
27 if( data != NULL )
28 {
29 std::copy( data, data+length, temp );
30
31 delete[] data;
32 }
33 data = temp;
34 length = elements;
35 }
36
37 T& operator[](unsigned int i) { return data[i]; }
38 T operator[](unsigned int i) const { return data[i]; }
39};
40
41// TODO 4J Stu - This looks right, but is it?
42template <class T> class array2DWithLength
43{
44 typedef arrayWithLength< T >* _parrayWithLength;
45public:
46 _parrayWithLength *data;
47 unsigned int length;
48 array2DWithLength() { data = NULL; length = 0; }
49 array2DWithLength(unsigned int dimA, unsigned int dimB)
50 {
51 data = new _parrayWithLength[dimA];
52 this->length = dimA;
53
54 for( unsigned int i = 0; i < length; i++ )
55 data[i] = new arrayWithLength<T>(dimB);
56 }
57
58 _parrayWithLength& operator[](unsigned int i) { return data[i]; }
59 _parrayWithLength operator[](unsigned int i) const { return data[i]; }
60};
61
62
63class Biome;
64class LevelChunk;
65class Node;
66class Item;
67class Tile;
68class Stat;
69class MobCategory;
70class File;
71class Vertex;
72class _Polygon; // Renaming as have conflict with Windows Polygon fn
73class ServerLevel;
74class MultiPlayerLevel;
75class Level;
76class LevelRenderer;
77class WeighedRandomItem;
78class WeighedTreasure;
79class Layer;
80//class Cube;
81class ModelPart;
82class Enchantment;
83class ClipChunk;
84
85typedef arrayWithLength<double> doubleArray;
86typedef array2DWithLength<double> coords2DArray;
87typedef arrayWithLength<byte> byteArray;
88typedef arrayWithLength<char> charArray;
89typedef arrayWithLength<short> shortArray;
90typedef arrayWithLength<int> intArray;
91typedef arrayWithLength<float> floatArray;
92typedef arrayWithLength<Biome *> BiomeArray;
93typedef arrayWithLength<LevelChunk *> LevelChunkArray;
94typedef array2DWithLength<LevelChunk *> LevelChunk2DArray;
95typedef arrayWithLength<Node *> NodeArray;
96typedef arrayWithLength<Item *> ItemArray;
97typedef arrayWithLength<Tile *> TileArray;
98typedef arrayWithLength<Stat *> StatArray;
99typedef arrayWithLength<MobCategory *> MobCategoryArray;
100typedef arrayWithLength<File *> FileArray;
101typedef arrayWithLength<Vertex *> VertexArray;
102typedef arrayWithLength<_Polygon *> PolygonArray;
103typedef arrayWithLength<ServerLevel *> ServerLevelArray;
104typedef arrayWithLength<MultiPlayerLevel *> MultiPlayerLevelArray;
105typedef arrayWithLength<Level *> LevelArray;
106typedef arrayWithLength<LevelRenderer *> LevelRendererArray;
107typedef arrayWithLength<WeighedRandomItem *> WeighedRandomItemArray;
108typedef arrayWithLength<WeighedTreasure *> WeighedTreasureArray;
109typedef arrayWithLength< shared_ptr<Layer> > LayerArray;
110//typedef arrayWithLength<Cube *> CubeArray;
111typedef arrayWithLength<ModelPart *> ModelPartArray;
112typedef arrayWithLength<Enchantment *> EnchantmentArray;
113typedef arrayWithLength<ClipChunk> ClipChunkArray;
114
115#include "ItemInstance.h"
116typedef arrayWithLength<shared_ptr<ItemInstance> > ItemInstanceArray;