From dffcd397018abde5a962b0b20577968f671c794e Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 5 Feb 2009 08:41:16 +0000 Subject: [PATCH] improved the shot origin adjuster: - now can load bone positions (in case this works in DP) - displays coordinates above the adjuster git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5752 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/Main.qc | 28 ++++++++++++++++++++++------ data/qcsrc/client/miscfunctions.qc | 13 +++++++++++++ data/qcsrc/client/waypointsprites.qc | 13 ------------- data/qcsrc/server/gamecommand.qc | 28 +++++++++++++++++++++++++--- data/shotorigin_adjuster.cfg | 4 ++++ 5 files changed, 64 insertions(+), 22 deletions(-) diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index b047f9a92..49a2ea276 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -364,17 +364,37 @@ void ShotOrg_Draw() self.angles_x = -self.angles_x; R_AddEntity(self); } +void ShotOrg_Draw2D() +{ + vector coord2d_topleft, coord2d_topright, coord2d; + string s; + vector fs; + + s = vtos(self.view_ofs); + s = substring(s, 1, strlen(s) - 2); + if(tokenize_sane(s) == 3) + s = strcat(argv(0), " ", argv(1), " ", argv(2)); + + coord2d_topleft = project_3d_to_2d(self.origin + view_up * 4 - view_right * 4); + coord2d_topright = project_3d_to_2d(self.origin + view_up * 4 + view_right * 4); + + fs = '1 1 0' * ((coord2d_topright_x - coord2d_topleft_x) / stringwidth(s, FALSE)); + + coord2d = coord2d_topleft - '0 1 0' * fs_y; + coord2d_z = 0; + drawstring(coord2d, s, fs, '1 1 1', 1, 0); +} void ShotOrg_Spawn() { debug_shotorg = spawn(); debug_shotorg.draw = ShotOrg_Draw; + debug_shotorg.draw2d = ShotOrg_Draw2D; debug_shotorg.renderflags = RF_VIEWMODEL; debug_shotorg.effects = EF_FULLBRIGHT; precache_model("models/shotorg_adjuster.md3"); setmodel(debug_shotorg, "models/shotorg_adjuster.md3"); - debug_shotorg.scale = 3; - debug_shotorg.alpha = 0.7; + debug_shotorg.scale = 2; debug_shotorg.view_ofs = '25 8 -8'; } @@ -426,7 +446,6 @@ void GameCommand(string msg) ShotOrg_Spawn(); else debug_shotorg.view_ofs = debug_shotorg.view_ofs + stov(argv(1)); - print(vtos(debug_shotorg.view_ofs), "\n"); localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n"); } else if(cmd == "shotorg_movez") { @@ -434,7 +453,6 @@ void GameCommand(string msg) ShotOrg_Spawn(); else debug_shotorg.view_ofs = debug_shotorg.view_ofs + stof(argv(1)) * (debug_shotorg.view_ofs * (1 / debug_shotorg.view_ofs_x)); // closer/farther, same xy pos - print(vtos(debug_shotorg.view_ofs), "\n"); localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n"); } else if(cmd == "shotorg_set") { @@ -442,7 +460,6 @@ void GameCommand(string msg) ShotOrg_Spawn(); else debug_shotorg.view_ofs = stov(argv(1)); - print(vtos(debug_shotorg.view_ofs), "\n"); localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n"); } else if(cmd == "shotorg_setz") { @@ -450,7 +467,6 @@ void GameCommand(string msg) ShotOrg_Spawn(); else debug_shotorg.view_ofs = debug_shotorg.view_ofs * (stof(argv(1)) / debug_shotorg.view_ofs_x); // closer/farther, same xy pos - print(vtos(debug_shotorg.view_ofs), "\n"); localcmd("sv_cmd debug_shotorg \"", vtos(debug_shotorg.view_ofs), "\"\n"); } else if(cmd == "shotorg_end") { diff --git a/data/qcsrc/client/miscfunctions.qc b/data/qcsrc/client/miscfunctions.qc index 78aaa3468..86a640b6b 100644 --- a/data/qcsrc/client/miscfunctions.qc +++ b/data/qcsrc/client/miscfunctions.qc @@ -395,3 +395,16 @@ float cvar_or(string cv, float v) else return stof(s); } + +vector project_3d_to_2d(vector vec) +{ + vec = cs_project(vec); + if(cs_project_is_b0rked) + { + vec_x += vid_width / 2; + vec_y += vid_height / 2; + } + vec_x *= vid_conwidth / vid_width; + vec_y *= vid_conheight / vid_height; + return vec; +} diff --git a/data/qcsrc/client/waypointsprites.qc b/data/qcsrc/client/waypointsprites.qc index 010f0aaeb..de6b005e2 100644 --- a/data/qcsrc/client/waypointsprites.qc +++ b/data/qcsrc/client/waypointsprites.qc @@ -1,16 +1,3 @@ -vector project_3d_to_2d(vector vec) -{ - vec = cs_project(vec); - if(cs_project_is_b0rked) - { - vec_x += vid_width / 2; - vec_y += vid_height / 2; - } - vec_x *= vid_conwidth / vid_width; - vec_y *= vid_conheight / vid_height; - return vec; -} - float waypointsprite_initialized; float waypointsprite_fadedistance; float waypointsprite_normdistance; diff --git a/data/qcsrc/server/gamecommand.qc b/data/qcsrc/server/gamecommand.qc index c1192840b..ef843c4c8 100644 --- a/data/qcsrc/server/gamecommand.qc +++ b/data/qcsrc/server/gamecommand.qc @@ -577,8 +577,8 @@ void make_mapinfo_Think() void GameCommand(string command) { float argc; - entity client; - float entno; + entity client, e; + float entno, i; argc = tokenize_sane(command); if(argv(0) == "help" || argc == 0) @@ -621,7 +621,6 @@ void GameCommand(string command) if(argv(0) == "make_mapinfo") { - entity e; e = spawn(); e.classname = "make_mapinfo"; e.think = make_mapinfo_Think; @@ -832,6 +831,29 @@ void GameCommand(string command) return; } + if(argv(0) == "gettaginfo") if(argc >= 4) + { + e = spawn(); + if(argv(1) == "w") + setmodel(e, (nextent(world)).weaponentity.model); + else + setmodel(e, argv(1)); + e.frame = stof(argv(2)); + i = gettagindex(e, argv(3)); + if(i) + { + print("model ", e.model, " frame ", ftos(e.frame), " tag ", argv(3)); + print(" index = ", ftos(i)); + print(" vector = ", vtos(gettaginfo(e, i)), "\n"); + if(argc >= 6) + localcmd(strcat(argv(4), vtos(gettaginfo(e, i)), argv(5), "\n")); + } + else + print("bone not found\n"); + remove(e); + return; + } + print("Invalid command. For a list of supported commands, try sv_cmd help.\n"); } diff --git a/data/shotorigin_adjuster.cfg b/data/shotorigin_adjuster.cfg index c48f4292b..9640e7355 100644 --- a/data/shotorigin_adjuster.cfg +++ b/data/shotorigin_adjuster.cfg @@ -20,4 +20,8 @@ bind KP_MULTIPLY "cl_cmd shotorg_set \"25 8 -8\"" bind KP_DIVIDE "cl_cmd shotorg_end" +bind KP_ENTER "commandmode _load_shotorigin_from_bone" + +alias _load_shotorigin_from_bone "sv_cmd gettaginfo w 0 $1 \"cl_cmd shotorg_set \\\"\" \"\\\"\"" + prvm_edictset server 1 alpha 0.8 -- 2.39.2