TileSet.h
1 /************************************************************
2 * (C) Voxel Farm Inc. 2015
3 */
4 
5 #pragma once
6 
7 #include "ResourceIO.h"
8 
9 namespace VoxelFarm
10 {
11  class ITileSet
12  {
13  public:
14  typedef unsigned short HeightData;
15  public:
17  virtual unsigned int getValue(int x, int y) = 0;
19  virtual double getValue(double x, double y) = 0;
21  virtual double getValue(double x, double y, double& filteredMinValue, double& filteredMaxValue) = 0;
22  virtual void tileCoords(double x, double y, unsigned int& xi, unsigned int& yi, unsigned int& sizeX, unsigned int& sizeY) = 0;
23  };
24 
26  class CTileSet : public ITileSet
27  {
28  public:
29  static const int North = 0;
30  static const int West = 1;
31  static const int South = 2;
32  static const int East = 3;
33  typedef int Tile[4];
34  public:
35  CTileSet(void);
36  virtual ~CTileSet(void);
37  public:
39  void loadTiles(char* filename, int colorCount, int tileSizeBits);
41  void loadTiles(VoxelFarm::IInputStream* reader, int colorCount, int tileSizeBits);
43  void init(int sizeBits);
45  virtual unsigned int getValue(int x, int y) override;
47  virtual double getValue(double x, double y) override;
49  virtual double getValue(double x, double y, double& filteredMinValue, double& filteredMaxValue) override;
50  virtual void tileCoords(double x, double y, unsigned int& xi, unsigned int& yi, unsigned int& sizeX, unsigned int& sizeY);
51  private:
52  Tile* tiles;
53  HeightData** tileData;
54  HeightData** tileDataMinFiltered;
55  HeightData** tileDataMaxFiltered;
56  int sizeBits;
57  int tileSizeBits;
58  int size;
59  int colorCount;
60  int tileSize;
61  int tileCount;
62  int* tileIndex;
63  unsigned int globalCoordMask;
64  unsigned int localCoordMask;
65 
66  private:
67  inline HeightData getTileValue(int x, int y);
68  inline HeightData getTileValue(int x, int y, double& filteredMinValue, double& filteredMaxValue);
69  };
70 
73  {
74  public:
75  CCornerTileSet(void);
76  ~CCornerTileSet(void);
77  public:
78  static const int North = 0;
79  static const int West = 1;
80  static const int South = 2;
81  static const int East = 3;
82  typedef int Tile[4];
83  typedef unsigned char HeightData;
84  public:
86  void loadTiles(const char* filename, int colorCount, int tileSizeBits);
88  void loadTiles(VoxelFarm::IInputStream* reader, int colorCount, int tileSizeBits);
90  void init(int sizeBits);
92  void getValue(double x, double y, double& channelA, double& channelB);
93  private:
94  Tile* tiles;
95  HeightData** tileDataA;
96  HeightData** tileDataB;
97  int sizeBits;
98  int tileSizeBits;
99  int size;
100  int colorCount;
101  int tileSize;
102  int tileCount;
103  int* tileIndex;
104  int* candidateCount;
105  int* candidateIndex;
106  unsigned int globalCoordMask;
107  unsigned int localCoordMask;
108 
109  private:
110  inline void getTileValue(int x, int y, double& channelA, double& channelB);
111  };
112 
114  class CPeriodicTileSet : public ITileSet
115  {
116  public:
118  CPeriodicTileSet(int filterFreq);
119  virtual ~CPeriodicTileSet();
120  public:
122  bool load(const char* filename, int size);
124  bool load(VoxelFarm::IInputStream* reader, int size);
126  virtual unsigned int getValue(int x, int y) override;
128  virtual double getValue(double x, double y) override;
130  virtual double getValue(double x, double y, double& filteredMinValue, double& filteredMaxValue) override;
131  virtual void tileCoords(double x, double y, unsigned int& xi, unsigned int& yi, unsigned int& sizeX, unsigned int& sizeY) override;
132  private:
133  HeightData* data;
134  HeightData* dataMin;
135  HeightData* dataMax;
136  int size;
137  int sizeMask;
138  int filterFreq;
139  };
140 }
Periodic tileset.
Definition: TileSet.h:114
virtual unsigned int getValue(int x, int y) override
Get value for a specific location.
Contains all classes and functions for the VoxelFarm engine.
void init(int sizeBits)
Initializes the tileboard.
bool load(const char *filename, int size)
Loads from disk.
virtual unsigned int getValue(int x, int y)=0
Get value for a specific location.
void loadTiles(const char *filename, int colorCount, int tileSizeBits)
Loads a tileset from disk.
Implement an aperiodic tiling set.
Definition: TileSet.h:26
virtual unsigned int getValue(int x, int y) override
Get value for a specific location.
A tileset with matching corners and two data channels.
Definition: TileSet.h:72
void loadTiles(char *filename, int colorCount, int tileSizeBits)
Loads a tileset from disk.
An interface to abstract reading resource data.
Definition: ResourceIO.h:6
void init(int sizeBits)
Initializes the tileboard.
void getValue(double x, double y, double &channelA, double &channelB)
Get value for a specific location with floating point input.