tree_map.h
author celestar
Wed, 29 Mar 2006 16:30:26 +0000
changeset 3355 a653b8e47f27
parent 3145 349b745dfbf4
child 3369 00c2ca209a89
permissions -rw-r--r--
(svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
2981
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     1
/* $Id$ */
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     2
3145
349b745dfbf4 (svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents: 3144
diff changeset
     3
#ifndef TREE_MAP_H
349b745dfbf4 (svn r3765) Fix some naming glitches in r3763 and add missing svn properties
tron
parents: 3144
diff changeset
     4
#define TREE_MAP_H
2981
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     5
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     6
#include "macros.h"
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     7
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     8
typedef enum TreeType {
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
     9
	TR_INVALID      = -1,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    10
	TR_TEMPERATE    = 0,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    11
	TR_SUB_ARCTIC   = 12,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    12
	TR_RAINFOREST   = 20,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    13
	TR_CACTUS       = 27,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    14
	TR_SUB_TROPICAL = 28,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    15
	TR_TOYLAND      = 32
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    16
} TreeType;
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    17
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    18
enum {
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    19
	TR_COUNT_TEMPERATE    = TR_SUB_ARCTIC   - TR_TEMPERATE,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    20
	TR_COUNT_SUB_ARCTIC   = TR_RAINFOREST   - TR_SUB_ARCTIC,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    21
	TR_COUNT_RAINFOREST   = TR_CACTUS       - TR_RAINFOREST,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    22
	TR_COUNT_SUB_TROPICAL = TR_SUB_TROPICAL - TR_CACTUS,
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    23
	TR_COUNT_TOYLAND      = 9
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    24
};
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    25
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    26
/* ground type, m2 bits 4...5
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    27
 * valid densities (bits 6...7) in comments after the enum */
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    28
typedef enum TreeGround {
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    29
	TR_GRASS       = 0, // 0
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    30
	TR_ROUGH       = 1, // 0
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    31
	TR_SNOW_DESERT = 2  // 0-3 for snow, 3 for desert
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    32
} TreeGround;
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    33
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    34
static inline TreeType GetTreeType(TileIndex t) { return _m[t].m3; }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    35
static inline void SetTreeType(TileIndex t, TreeType r) { _m[t].m3 = r; }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    36
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    37
static inline TreeGround GetTreeGround(TileIndex t) { return GB(_m[t].m2, 4, 2); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    38
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    39
static inline uint GetTreeDensity(TileIndex t) { return GB(_m[t].m2, 6, 2); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    40
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    41
static inline void SetTreeGroundDensity(TileIndex t, TreeGround g, uint d)
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    42
{
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    43
	SB(_m[t].m2, 4, 2, g);
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    44
	SB(_m[t].m2, 6, 2, d);
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    45
}
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    46
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    47
static inline void AddTreeCount(TileIndex t, int c) { _m[t].m5 += c << 6; }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    48
static inline uint GetTreeCount(TileIndex t) { return GB(_m[t].m5, 6, 2); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    49
static inline void SetTreeCount(TileIndex t, uint c) { SB(_m[t].m5, 6, 2, c); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    50
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    51
static inline void AddTreeGrowth(TileIndex t, int a) { _m[t].m5 += a; }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    52
static inline uint GetTreeGrowth(TileIndex t) { return GB(_m[t].m5, 0, 3); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    53
static inline void SetTreeGrowth(TileIndex t, uint g) { SB(_m[t].m5, 0, 3, g); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    54
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    55
static inline void AddTreeCounter(TileIndex t, int a) { _m[t].m2 += a; }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    56
static inline uint GetTreeCounter(TileIndex t) { return GB(_m[t].m2, 0, 4); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    57
static inline void SetTreeCounter(TileIndex t, uint c) { SB(_m[t].m2, 0, 4, c); }
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    58
3079
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    59
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    60
static inline void MakeTree(TileIndex t, TreeType type, uint count, uint growth, TreeGround ground, uint density)
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    61
{
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    62
	SetTileType(t, MP_TREES);
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    63
	SetTileOwner(t, OWNER_NONE);
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    64
	_m[t].m2 = density << 6 | ground << 4 | 0;
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    65
	_m[t].m3 = type;
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    66
	_m[t].m4 = 0 << 5 | 0 << 2;
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    67
	_m[t].m5 = count << 6 | growth;
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    68
}
d6541c027250 (svn r3668) Add a function to turn a tile into a tree tile
tron
parents: 2981
diff changeset
    69
2981
31760b6a88aa (svn r3556) Add accessors for handling tree tiles
tron
parents:
diff changeset
    70
#endif