newgrf_spritegroup.h
author peter1138
Sun, 01 Oct 2006 12:00:32 +0000
changeset 4694 c917a3ad0dd2
parent 4057 863fce30596d
child 4817 116374e1a5f1
permissions -rw-r--r--
(svn r6601) - Codechange: Support cargo subtypes in the refit window. The refit window has been altered to support resizing and scrolling. Note that the cargo subtype isn't yet passed for actual refitting yet. (Based on mart3p's patch)
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     1
/* $Id$ */
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     2
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     3
#ifndef NEWGRF_SPRITEGROUP_H
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     4
#define NEWGRF_SPRITEGROUP_H
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
     5
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
     6
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
     7
typedef struct SpriteGroup SpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
     8
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
     9
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    10
/* 'Real' sprite groups contain a list of other result or callback sprite
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    11
 * groups. */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    12
typedef struct RealSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    13
	// Loaded = in motion, loading = not moving
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    14
	// Each group contains several spritesets, for various loading stages
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    15
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    16
	// XXX: For stations the meaning is different - loaded is for stations
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    17
	// with small amount of cargo whilst loading is for stations with a lot
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    18
	// of da stuff.
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    19
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    20
	byte num_loaded;       ///< Number of loaded groups
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    21
	byte num_loading;      ///< Number of loading groups
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    22
	SpriteGroup **loaded;  ///< List of loaded groups (can be SpriteIDs or Callback results)
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    23
	SpriteGroup **loading; ///< List of loading groups (can be SpriteIDs or Callback results)
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    24
} RealSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    25
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    26
/* Shared by deterministic and random groups. */
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    27
typedef enum VarSpriteGroupScopes {
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    28
	VSG_SCOPE_SELF,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    29
	// Engine of consists for vehicles, city for stations.
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    30
	VSG_SCOPE_PARENT,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    31
} VarSpriteGroupScope;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    32
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    33
typedef enum DeterministicSpriteGroupSizes {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    34
	DSG_SIZE_BYTE,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    35
	DSG_SIZE_WORD,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    36
	DSG_SIZE_DWORD,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    37
} DeterministicSpriteGroupSize;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    38
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    39
typedef enum DeterministicSpriteGroupAdjustTypes {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    40
	DSGA_TYPE_NONE,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    41
	DSGA_TYPE_DIV,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    42
	DSGA_TYPE_MOD,
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    43
} DeterministicSpriteGroupAdjustType;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    44
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    45
typedef enum DeterministicSpriteGroupAdjustOperations {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    46
	DSGA_OP_ADD,  // a + b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    47
	DSGA_OP_SUB,  // a - b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    48
	DSGA_OP_SMIN, // (signed) min(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    49
	DSGA_OP_SMAX, // (signed) max(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    50
	DSGA_OP_UMIN, // (unsigned) min(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    51
	DSGA_OP_UMAX, // (unsigned) max(a, b)
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    52
	DSGA_OP_SDIV, // (signed) a / b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    53
	DSGA_OP_SMOD, // (signed) a % b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    54
	DSGA_OP_UDIV, // (unsigned) a / b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    55
	DSGA_OP_UMOD, // (unsigned) a & b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    56
	DSGA_OP_MUL,  // a * b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    57
	DSGA_OP_AND,  // a & b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    58
	DSGA_OP_OR,   // a | b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    59
	DSGA_OP_XOR,  // a ^ b
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    60
} DeterministicSpriteGroupAdjustOperation;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    61
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    62
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    63
typedef struct DeterministicSpriteGroupAdjust {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    64
	DeterministicSpriteGroupAdjustOperation operation;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    65
	DeterministicSpriteGroupAdjustType type;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    66
	byte variable;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    67
	byte parameter; ///< Used for variables between 0x60 and 0x7F inclusive.
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    68
	byte shift_num;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    69
	uint32 and_mask;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    70
	uint32 add_val;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    71
	uint32 divmod_val;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    72
} DeterministicSpriteGroupAdjust;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    73
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    74
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    75
typedef struct DeterministicSpriteGroupRange {
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    76
	SpriteGroup *group;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    77
	uint32 low;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    78
	uint32 high;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    79
} DeterministicSpriteGroupRange;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    80
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    81
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    82
typedef struct DeterministicSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    83
	VarSpriteGroupScope var_scope;
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    84
	DeterministicSpriteGroupSize size;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    85
	byte num_adjusts;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    86
	byte num_ranges;
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    87
	DeterministicSpriteGroupAdjust *adjusts;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    88
	DeterministicSpriteGroupRange *ranges; // Dynamically allocated
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    89
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    90
	// Dynamically allocated, this is the sole owner
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    91
	SpriteGroup *default_group;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    92
} DeterministicSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    93
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
    94
typedef enum RandomizedSpriteGroupCompareModes {
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    95
	RSG_CMP_ANY,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    96
	RSG_CMP_ALL,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    97
} RandomizedSpriteGroupCompareMode;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    98
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
    99
typedef struct RandomizedSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   100
	// Take this object:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   101
	VarSpriteGroupScope var_scope;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   102
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   103
	// Check for these triggers:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   104
	RandomizedSpriteGroupCompareMode cmp_mode;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   105
	byte triggers;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   106
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   107
	// Look for this in the per-object randomized bitmask:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   108
	byte lowest_randbit;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   109
	byte num_groups; // must be power of 2
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   110
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   111
	// Take the group with appropriate index:
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   112
	SpriteGroup **groups;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   113
} RandomizedSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   114
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   115
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   116
/* This contains a callback result. A failed callback has a value of
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   117
 * CALLBACK_FAILED */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   118
typedef struct CallbackResultSpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   119
	uint16 result;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   120
} CallbackResultSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   121
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   122
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   123
/* A result sprite group returns the first SpriteID and the number of
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   124
 * sprites in the set */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   125
typedef struct ResultSpriteGroup {
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   126
	SpriteID sprite;
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   127
	byte num_sprites;
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   128
} ResultSpriteGroup;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   129
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   130
/* List of different sprite group types */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   131
typedef enum SpriteGroupType {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   132
	SGT_INVALID,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   133
	SGT_REAL,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   134
	SGT_DETERMINISTIC,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   135
	SGT_RANDOMIZED,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   136
	SGT_CALLBACK,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   137
	SGT_RESULT,
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   138
} SpriteGroupType;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   139
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3664
diff changeset
   140
/* Common wrapper for all the different sprite group types */
3664
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   141
struct SpriteGroup {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   142
	SpriteGroupType type;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   143
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   144
	union {
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   145
		RealSpriteGroup real;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   146
		DeterministicSpriteGroup determ;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   147
		RandomizedSpriteGroup random;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   148
		CallbackResultSpriteGroup callback;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   149
		ResultSpriteGroup result;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   150
	} g;
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   151
};
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   152
4f810b1ea216 (svn r4579) - NewGRF: move sprite group struct to newgrf_spritegroup.h. Temporary include in sprite.h until new spritegroup code is in place.
peter1138
parents: 3595
diff changeset
   153
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   154
SpriteGroup *AllocateSpriteGroup(void);
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   155
void InitializeSpriteGroupPool(void);
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   156
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   157
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   158
typedef struct ResolverObject {
3724
1b2d907fbd33 (svn r4697) - NewGRF: callback IDs can now be 16 bit values.
peter1138
parents: 3720
diff changeset
   159
	uint16 callback;
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   160
	uint32 callback_param1;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   161
	uint32 callback_param2;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   162
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   163
	byte trigger;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   164
	uint32 last_value;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   165
	uint32 reseed;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   166
	VarSpriteGroupScope scope;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   167
4056
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3893
diff changeset
   168
	bool info_view; ///< Indicates if the item is being drawn in an info window
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3893
diff changeset
   169
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   170
	union {
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   171
		struct {
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   172
			const struct Vehicle *self;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   173
			const struct Vehicle *parent;
4057
863fce30596d (svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents: 4056
diff changeset
   174
			EngineID self_type;
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   175
		} vehicle;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   176
		struct {
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   177
			TileIndex tile;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   178
			const struct Station *st;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   179
			const struct StationSpec *statspec;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   180
		} station;
3720
8a82d64ea485 (svn r4691) - Codechange: don't use unnamed unions as GCC 2.95.ancient won't compile it. Needed for our MorphOS user ;)
peter1138
parents: 3677
diff changeset
   181
	} u;
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   182
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   183
	uint32 (*GetRandomBits)(const struct ResolverObject*);
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   184
	uint32 (*GetTriggers)(const struct ResolverObject*);
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   185
	void (*SetTriggers)(const struct ResolverObject*, int);
3893
ced26054ee00 (svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents: 3734
diff changeset
   186
	uint32 (*GetVariable)(const struct ResolverObject*, byte, byte, bool*);
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3724
diff changeset
   187
	const SpriteGroup *(*ResolveReal)(const struct ResolverObject*, const SpriteGroup*);
3677
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   188
} ResolverObject;
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   189
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   190
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   191
/* Base sprite group resolver */
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   192
const SpriteGroup *Resolve(const SpriteGroup *group, ResolverObject *object);
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   193
526d6243241a (svn r4594) - NewGRF: introduce the basic sprite group resolver. This code isn't used yet.
peter1138
parents: 3668
diff changeset
   194
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
diff changeset
   195
#endif /* NEWGRF_SPRITEGROUP_H */