blob: 15f1cc860ad7a1656e5f39a238a23978ca45af36 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
/*
* File: losparam.h
* Summary: Parameters for the LOS algorithm
*/
#ifndef LOSPARAM_H
#define LOSPARAM_H
enum opacity_type
{
OPC_CLEAR,
OPC_HALF, // for opaque clouds; two or more block
OPC_OPAQUE,
NUM_OPACITIES
};
// Subclasses of this are passed to losight() to modify the
// LOS calculation. Implementations will have to translate between
// relative coordinates (-8,-8)..(8,8) and real coordinates,
// specify how opaque the cells are and determine what values
// are written to the visible cells.
struct los_param
{
virtual ~los_param() {}
// Whether the translated coordinate lies in the map (including boundary)
virtual bool map_bounds(const coord_def& p) const = 0;
// appearance(p) will be copied to show(p) for visible p.
virtual unsigned appearance(const coord_def& p) const = 0;
virtual opacity_type opacity(const coord_def& p) const = 0;
};
// Provides translation to given center and bounds checking.
struct los_param_trans : los_param
{
coord_def center;
los_param_trans(const coord_def& c);
coord_def trans(const coord_def& p) const;
bool map_bounds(const coord_def& p) const;
};
// Everything is visible.
struct los_param_permissive : los_param_trans
{
los_param_permissive(const coord_def& c);
unsigned appearance(const coord_def& p) const;
opacity_type opacity(const coord_def& p) const;
};
// A complete base implementation that does standard visibility
// based on env.grid.
struct los_param_base : los_param_trans
{
los_param_base(const coord_def& c);
dungeon_feature_type feature(const coord_def& p) const;
unsigned appearance(const coord_def& p) const;
unsigned short cloud_idx(const coord_def& p) const;
opacity_type opacity(const coord_def& p) const;
};
// Provides a compatible set of parameters for use with the
// legacy losight() function.
struct los_param_compat : los_param_base
{
feature_grid grid;
bool solid_blocks;
bool ignore_clouds;
los_param_compat(const feature_grid& gr, const coord_def& c,
bool sb, bool ic);
dungeon_feature_type feature(const coord_def& p) const;
unsigned appearance(const coord_def& p) const;
opacity_type opacity(const coord_def& p) const;
};
#endif
|