mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-27 14:37:16 +00:00
pointing in 2D modes
This commit is contained in:
parent
3b6071e9fb
commit
e6ff8c041f
@ -4243,7 +4243,12 @@ EX void drawMarkers() {
|
|||||||
|
|
||||||
#if CAP_QUEUE
|
#if CAP_QUEUE
|
||||||
if(lmouseover && vid.drawmousecircle && ok && DEFAULTCONTROL && MOBON && WDIM == 2) {
|
if(lmouseover && vid.drawmousecircle && ok && DEFAULTCONTROL && MOBON && WDIM == 2) {
|
||||||
queuecircleat(lmouseover, .8, darkena(lmouseover->cpdist > 1 ? 0x00FFFF : 0xFF0000, 0, 0xFF));
|
cell *at = lmouseover;
|
||||||
|
#if CAP_VR
|
||||||
|
if(vrhr::state == 2 && vrhr::forward_cell)
|
||||||
|
at = vrhr::forward_cell;
|
||||||
|
#endif
|
||||||
|
queuecircleat(at, .8, darkena(lmouseover->cpdist > 1 ? 0x00FFFF : 0xFF0000, 0, 0xFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(global_pushto && vid.drawmousecircle && ok && DEFAULTCONTROL && MOBON && WDIM == 2) {
|
if(global_pushto && vid.drawmousecircle && ok && DEFAULTCONTROL && MOBON && WDIM == 2) {
|
||||||
|
95
vr.cpp
95
vr.cpp
@ -394,18 +394,45 @@ void move_according_to(vr::ETrackedControllerRole role, bool last, bool cur) {
|
|||||||
int id = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(role);
|
int id = vr::VRSystem()->GetTrackedDeviceIndexForControllerRole(role);
|
||||||
if(id >= 0 && id < int(vr::k_unMaxTrackedDeviceCount)) {
|
if(id >= 0 && id < int(vr::k_unMaxTrackedDeviceCount)) {
|
||||||
hyperpoint h;
|
hyperpoint h;
|
||||||
if(true) {
|
if(in_perspective_v()) {
|
||||||
E4;
|
E4;
|
||||||
transmatrix T = (hsm == eHeadset::none ? hmd_at : hmd_ref_at) * vrdata.pose_matrix[id] * sm;
|
transmatrix T = (hsm == eHeadset::none ? hmd_at : hmd_ref_at) * vrdata.pose_matrix[id] * sm;
|
||||||
vrhr::be_33(T);
|
vrhr::be_33(T);
|
||||||
h = T * point31(0, 0, -0.01);
|
h = T * point31(0, 0, -0.01);
|
||||||
|
if(last && !cur)
|
||||||
|
movevrdir(h);
|
||||||
|
else {
|
||||||
|
movedir md = vectodir(h);
|
||||||
|
cellwalker xc = cwt + md.d + wstep;
|
||||||
|
forward_cell = xc.at;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(last && !cur)
|
|
||||||
movevrdir(h);
|
|
||||||
else {
|
else {
|
||||||
movedir md = vectodir(h);
|
gen_mv();
|
||||||
cellwalker xc = cwt + md.d + wstep;
|
forward_cell = nullptr;
|
||||||
forward_cell = xc.at;
|
ld best = 1e9;
|
||||||
|
dynamicval<int> dvs (vrhr::state, 2);
|
||||||
|
for(auto p: current_display->all_drawn_copies) {
|
||||||
|
for(auto& V: p.second) {
|
||||||
|
hyperpoint hscr;
|
||||||
|
applymodel(V*C0, hscr);
|
||||||
|
bool changed = false;
|
||||||
|
if(1) {
|
||||||
|
E4; hscr[3] = 1;
|
||||||
|
hyperpoint h = inverse(sm * hmd_at * vrdata.pose_matrix[id] * sm) * hmd_mv * hscr;
|
||||||
|
|
||||||
|
if(h[2] > 0.1) continue;
|
||||||
|
ld d = sqhypot_d(2, h);
|
||||||
|
if(d < best) best = d, forward_cell = p.first, changed = true;
|
||||||
|
}
|
||||||
|
if(changed) mouseh = V * C0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(forward_cell && last && !cur) {
|
||||||
|
calcMousedest();
|
||||||
|
if(!canmove) movepcto(mousedest), remission(); else movepcto(mousedest);
|
||||||
|
forward_cell = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -718,6 +745,32 @@ EX void draw_eyes() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX void gen_mv() {
|
||||||
|
transmatrix mu;
|
||||||
|
bool pers = in_perspective();
|
||||||
|
ld sca = pers ? absolute_unit_in_meters : pconf.vr_scale_factor;
|
||||||
|
for(int i=0; i<4; i++)
|
||||||
|
for(int j=0; j<4; j++)
|
||||||
|
mu[i][j] = i!=j ? 0 : i==3 ? 1 : sca;
|
||||||
|
if(!pers) mu[1][1] *= pconf.stretch;
|
||||||
|
|
||||||
|
hmd_mv = Id;
|
||||||
|
bool nlpu = nisot::local_perspective_used();
|
||||||
|
if(1) {
|
||||||
|
E4;
|
||||||
|
if(nlpu) {
|
||||||
|
be_33(NLP);
|
||||||
|
hmd_mv = NLP * hmd_mv;
|
||||||
|
}
|
||||||
|
hmd_mv = sm * hmd_mv;
|
||||||
|
if(pconf.vr_zshift) hmd_mv = euclidean_translate(0, 0, -pconf.vr_zshift) * hmd_mv;
|
||||||
|
hmd_mv = mu * hmd_mv;
|
||||||
|
if(hsm == eHeadset::model_viewing) {
|
||||||
|
hmd_mv = sm * hmd_at * inverse(hmd_ref_at) * sm * hmd_mv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EX void render() {
|
EX void render() {
|
||||||
|
|
||||||
resetbuffer rb;
|
resetbuffer rb;
|
||||||
@ -744,14 +797,6 @@ EX void render() {
|
|||||||
|
|
||||||
calcparam();
|
calcparam();
|
||||||
|
|
||||||
transmatrix mu;
|
|
||||||
bool pers = in_perspective();
|
|
||||||
ld sca = pers ? absolute_unit_in_meters : pconf.vr_scale_factor;
|
|
||||||
for(int i=0; i<4; i++)
|
|
||||||
for(int j=0; j<4; j++)
|
|
||||||
mu[i][j] = i!=j ? 0 : i==3 ? 1 : sca;
|
|
||||||
if(!pers) mu[1][1] *= pconf.stretch;
|
|
||||||
|
|
||||||
if(1) {
|
if(1) {
|
||||||
make_actual_view();
|
make_actual_view();
|
||||||
shiftmatrix Tv = cview();
|
shiftmatrix Tv = cview();
|
||||||
@ -779,27 +824,17 @@ EX void render() {
|
|||||||
// View * inverse(Tv.T);
|
// View * inverse(Tv.T);
|
||||||
// inverse(inverse_shift(cview(), Tv));
|
// inverse(inverse_shift(cview(), Tv));
|
||||||
|
|
||||||
hmd_mvp = Id;
|
|
||||||
bool nlpu = nisot::local_perspective_used();
|
|
||||||
if(1) {
|
if(1) {
|
||||||
|
gen_mv();
|
||||||
E4;
|
E4;
|
||||||
if(nlpu) {
|
if(eyes == eEyes::equidistant) {
|
||||||
be_33(NLP);
|
hmd_mv = inverse(vrdata.eyepos[i]) * hmd_mv;
|
||||||
hmd_mvp = NLP * hmd_mvp;
|
|
||||||
}
|
}
|
||||||
hmd_mvp = sm * hmd_mvp;
|
hmd_mvp = vrdata.proj[i] * hmd_mv;
|
||||||
if(pconf.vr_zshift) hmd_mvp = euclidean_translate(0, 0, -pconf.vr_zshift) * hmd_mvp;
|
|
||||||
hmd_mvp = mu * hmd_mvp;
|
|
||||||
if(hsm == eHeadset::model_viewing) {
|
|
||||||
hmd_mvp = sm * hmd_at * inverse(hmd_ref_at) * sm * hmd_mvp;
|
|
||||||
}
|
|
||||||
if(eyes == eEyes::equidistant) {
|
|
||||||
hmd_mvp = inverse(vrdata.eyepos[i]) * hmd_mvp;
|
|
||||||
}
|
|
||||||
hmd_mv = hmd_mvp;
|
|
||||||
hmd_mvp = vrdata.proj[i] * hmd_mvp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
eyeproj = vrdata.iproj[i];
|
eyeproj = vrdata.iproj[i];
|
||||||
|
|
||||||
drawqueue();
|
drawqueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user