summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/losparam.h
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/losparam.h')
-rw-r--r--crawl-ref/source/losparam.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/crawl-ref/source/losparam.h b/crawl-ref/source/losparam.h
new file mode 100644
index 0000000000..a31fbb46f5
--- /dev/null
+++ b/crawl-ref/source/losparam.h
@@ -0,0 +1,76 @@
+/*
+ * 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;
+};
+
+// 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