summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/directn.h
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-19 23:13:26 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-04-19 23:13:26 +0000
commit9ba57ee3a6f72308ff01263dfe143cf23c1cf321 (patch)
tree968cb123684f700f4a612804f8670b0e8e049a93 /crawl-ref/source/directn.h
parent003c3dc779fbd0ba44bc4fafadafb45db537fda7 (diff)
downloadcrawl-ref-9ba57ee3a6f72308ff01263dfe143cf23c1cf321.tar.gz
crawl-ref-9ba57ee3a6f72308ff01263dfe143cf23c1cf321.zip
Fixes to compile with Visual C++. Moved direct.cc and direct.h to directn.* to avoid conflict with VC++ direct.h header.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4390 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/directn.h')
-rw-r--r--crawl-ref/source/directn.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/crawl-ref/source/directn.h b/crawl-ref/source/directn.h
new file mode 100644
index 0000000000..e968d82926
--- /dev/null
+++ b/crawl-ref/source/directn.h
@@ -0,0 +1,228 @@
+/*
+ * File: directn.h
+ * Summary: Functions used when picking squares.
+ * Written by: Linley Henzell
+ *
+ * Modified for Crawl Reference by $Author$ on $Date$
+ *
+ * Change History (most recent first):
+ *
+ * <1> -/--/-- LRH Created
+ */
+
+
+#ifndef DIRECT_H
+#define DIRECT_H
+
+#include "externs.h"
+#include "enum.h"
+#include "libgui.h"
+#include "ray.h"
+
+class crawl_view_buffer
+{
+public:
+ crawl_view_buffer();
+ ~crawl_view_buffer();
+ void size(const coord_def &size);
+ operator screen_buffer_t * () { return (buffer); }
+
+ void draw();
+private:
+ screen_buffer_t *buffer;
+};
+
+// last updated 12may2000 {dlb}
+/* ***********************************************************************
+ * called from: acr - debug - effects - it_use3 - item_use - spells1 -
+ * spells2 - spells3 - spells4
+ * *********************************************************************** */
+struct crawl_view_geometry
+{
+public:
+ coord_def termp; // Left-top pos of terminal.
+ coord_def termsz; // Size of the terminal.
+ coord_def viewp; // Left-top pos of viewport.
+ coord_def viewsz; // Size of the viewport (play area).
+ coord_def hudp; // Left-top pos of status area.
+ coord_def hudsz; // Size of the status area.
+ coord_def msgp; // Left-top pos of the message pane.
+ coord_def msgsz; // Size of the message pane.
+ coord_def mlistp; // Left-top pos of the monster list.
+ coord_def mlistsz; // Size of the monster list.
+
+ crawl_view_buffer vbuf; // Buffer for drawing the main game map.
+
+ coord_def vgrdc; // What grid pos is at the centre of the view
+ // usually you.pos().
+
+ coord_def viewhalfsz;
+
+ coord_def glos1, glos2; // LOS limit grid coords (inclusive)
+ coord_def vlos1, vlos2; // LOS limit viewport coords (inclusive)
+
+ coord_def mousep; // Where the mouse is.
+
+private:
+ coord_def last_player_pos;
+
+public:
+ crawl_view_geometry();
+ void init_geometry();
+
+ void init_view();
+ void set_player_at(const coord_def &c, bool force_centre = false);
+
+ coord_def view_centre() const
+ {
+ return viewp + viewhalfsz;
+ }
+
+ bool in_grid_los(const coord_def &c) const
+ {
+ return (c.x >= glos1.x && c.x <= glos2.x
+ && c.y >= glos1.y && c.y <= glos2.y);
+ }
+
+ bool in_view_los(const coord_def &c) const
+ {
+ return (c.x >= vlos1.x && c.x <= vlos2.x
+ && c.y >= vlos1.y && c.y <= vlos2.y);
+ }
+
+ bool in_view_viewport(const coord_def &c) const
+ {
+ return (c.x >= viewp.x && c.y >= viewp.y
+ && c.x < viewp.x + viewsz.x
+ && c.y < viewp.y + viewsz.y);
+ }
+
+ bool in_grid_viewport(const coord_def &c) const
+ {
+ return in_view_viewport(c - vgrdc + view_centre());
+ }
+};
+
+extern crawl_view_geometry crawl_view;
+
+// An object that modifies the behaviour of the direction prompt.
+class targeting_behaviour
+{
+public:
+ targeting_behaviour(bool just_looking = false);
+ virtual ~targeting_behaviour();
+
+ // Returns a keystroke for the prompt.
+ virtual int get_key();
+ virtual command_type get_command(int key = -1);
+ virtual bool should_redraw();
+
+public:
+ bool just_looking;
+ bool compass;
+};
+
+// output from direction() function:
+struct dist
+{
+ bool isValid; // valid target chosen?
+ bool isTarget; // target (true), or direction (false)?
+ bool isMe; // selected self (convenience: tx == you.x_pos,
+ // ty == you.y_pos)
+ bool isEndpoint; // Does the player want the attack to stop at (tx,ty)?
+ bool isCancel; // user cancelled (usually <ESC> key)
+ bool choseRay; // user wants a specific beam
+ int tx,ty; // target x,y or logical extension of beam to map edge
+ int dx,dy; // delta x and y if direction - always -1,0,1
+ ray_def ray; // ray chosen if necessary
+
+ // internal use - ignore
+ int prev_target; // previous target
+
+ // target - source (source == you.pos())
+ coord_def target() const
+ {
+ return coord_def(tx, ty);
+ }
+};
+
+void direction( dist &moves, targeting_type restricts = DIR_NONE,
+ targ_mode_type mode = TARG_ANY, int range = -1,
+ bool just_looking = false, bool needs_path = true,
+ const char *prompt = NULL, targeting_behaviour *mod = NULL );
+
+bool in_los_bounds(int x, int y);
+bool in_viewport_bounds(int x, int y);
+bool in_los(int x, int y);
+bool in_vlos(int x, int y);
+bool in_vlos(const coord_def &pos);
+
+void terse_describe_square(const coord_def &c);
+void full_describe_square(const coord_def &c);
+void describe_floor();
+std::string get_monster_desc(const monsters *mon,
+ bool full_desc = true,
+ description_level_type mondtype = DESC_CAP_A);
+
+int dos_direction_unmunge(int doskey);
+
+std::string feature_description(int mx, int my, bool bloody = false,
+ description_level_type dtype = DESC_CAP_A,
+ bool add_stop = true);
+std::string raw_feature_description(dungeon_feature_type grid,
+ trap_type tr = NUM_TRAPS);
+std::string feature_description(dungeon_feature_type grid,
+ trap_type trap = NUM_TRAPS, bool bloody = false,
+ description_level_type dtype = DESC_CAP_A,
+ bool add_stop = true);
+
+std::vector<dungeon_feature_type> features_by_desc(const base_pattern &pattern);
+
+inline int view2gridX(int vx)
+{
+ return (crawl_view.vgrdc.x + vx - crawl_view.view_centre().x);
+}
+
+inline int view2gridY(int vy)
+{
+ return (crawl_view.vgrdc.y + vy - crawl_view.view_centre().y);
+}
+
+inline coord_def view2grid(const coord_def &pos)
+{
+ return pos - crawl_view.view_centre() + crawl_view.vgrdc;
+}
+
+inline int grid2viewX(int gx)
+{
+ return (gx - crawl_view.vgrdc.x + crawl_view.view_centre().x);
+}
+
+inline int grid2viewY(int gy)
+{
+ return (gy - crawl_view.vgrdc.y + crawl_view.view_centre().y);
+}
+
+inline coord_def grid2view(const coord_def &pos)
+{
+ return (pos - crawl_view.vgrdc + crawl_view.view_centre());
+}
+
+inline coord_def view2show(const coord_def &pos)
+{
+ return (pos - crawl_view.vlos1 + coord_def(1, 1));
+}
+
+inline coord_def show2view(const coord_def &pos)
+{
+ return (pos + crawl_view.vlos1 - coord_def(1, 1));
+}
+
+inline coord_def grid2show(const coord_def &pos)
+{
+ return (view2show(grid2view(pos)));
+}
+
+extern const struct coord_def Compass[8];
+
+#endif