mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 13:07:16 +00:00
zoom_or_fov takes panini limits into account
This commit is contained in:
parent
d7351d169a
commit
56164ab172
@ -558,6 +558,12 @@ EX void initConfig() {
|
||||
addsaver(anims::rug_angle, "animation rug angle");
|
||||
addsaver(anims::circle_radius, "animation circle radius");
|
||||
addsaver(anims::circle_spins, "animation circle spins");
|
||||
addsaver(anims::rug_movement_angle, "rug forward movement angle", 90);
|
||||
addsaver(anims::rug_shift_angle, "rug forward shift angle", 0);
|
||||
#endif
|
||||
|
||||
#if CAP_RUG
|
||||
addsaver(rug::move_on_touch, "rug move on touch");
|
||||
#endif
|
||||
|
||||
#if CAP_CRYSTAL
|
||||
|
@ -306,9 +306,11 @@ transmatrix zforward_push(ld z) {
|
||||
|
||||
EX void zoom_or_fov(ld t) {
|
||||
if(in_perspective_v()) {
|
||||
vid.fov *= 180 / max_fov_angle();
|
||||
auto tanfov = tan(vid.fov * degree / 2);
|
||||
tanfov *= t;
|
||||
vid.fov = atan(tanfov) * 2 / degree;
|
||||
vid.fov *= max_fov_angle() / 180;
|
||||
}
|
||||
else
|
||||
vpconf.scale *= t;
|
||||
|
@ -350,9 +350,9 @@ EX void mobile_draw(MOBPAR_FORMAL) {
|
||||
}
|
||||
}
|
||||
|
||||
#if CAP_RUG
|
||||
if(andmode == 1 && normal_reaction && rug::rugged && clicked)
|
||||
rug::finger_on(2, (ticks - lticks_rug) / 2500.);
|
||||
#if CAP_RUG && CAP_ANIMATIONS
|
||||
if(andmode == 1 && normal_reaction && rug::rugged && clicked && rug::move_on_touch)
|
||||
anims::animate_rug_movement(rug::move_on_touch * (ticks - lticks_rug) / 2500.);
|
||||
#endif
|
||||
|
||||
lticks_rug = ticks;
|
||||
|
18
rug.cpp
18
rug.cpp
@ -123,7 +123,6 @@ EX int renderlate = 0;
|
||||
EX bool rendernogl = false;
|
||||
EX int texturesize = 1024;
|
||||
EX ld scale = 1;
|
||||
EX ld ruggo = 0;
|
||||
|
||||
EX ld anticusp_factor = 1;
|
||||
EX ld anticusp_dist;
|
||||
@ -1272,7 +1271,7 @@ EX void finger_on(int coord, ld val) {
|
||||
|
||||
transmatrix last_orientation;
|
||||
|
||||
EX ld ruggospeed = 1;
|
||||
EX ld move_on_touch = 1;
|
||||
|
||||
EX void actDraw() {
|
||||
try {
|
||||
@ -1291,8 +1290,6 @@ EX void actDraw() {
|
||||
double alpha = (ticks - lastticks) / 1000.0;
|
||||
lastticks = ticks;
|
||||
|
||||
// if(ruggo) move_forward(ruggo * alpha);
|
||||
|
||||
#if CAP_HOLDKEYS
|
||||
Uint8 *keystate = SDL_GetKeyState(NULL);
|
||||
if(keystate[SDLK_LALT]) alpha /= 10;
|
||||
@ -1496,7 +1493,9 @@ EX void show() {
|
||||
if(rug::rugged)
|
||||
dialog::lastItem().value += " (" + fts(err_zero_current) + ")";
|
||||
}
|
||||
dialog::addSelItem(XLAT("automatic move speed"), fts(ruggo), 'G');
|
||||
#if ISMOBILE
|
||||
dialog::addSelItem(XLAT("move on touch"), fts(move_on_touch), 'G');
|
||||
#endif
|
||||
dialog::addSelItem(XLAT("anti-crossing"), fts(anticusp_factor), 'A');
|
||||
dialog::addBoolItem(XLAT("3D monsters/walls on the surface"), spatial_rug, 'S');
|
||||
dialog::add_action([] () { spatial_rug = !spatial_rug; });
|
||||
@ -1539,9 +1538,8 @@ EX void show() {
|
||||
else if(uni == 'o')
|
||||
renderonce = !renderonce;
|
||||
else if(uni == 'G') {
|
||||
dialog::editNumber(ruggo, -1, 1, .1, 0, XLAT("automatic move speed"),
|
||||
XLAT("Move automatically without pressing any keys.")
|
||||
);
|
||||
dialog::editNumber(move_on_touch, -1, 1, .1, 0, XLAT("move on touch"), "");
|
||||
dialog::extra_options = anims::rug_angle_options;
|
||||
}
|
||||
else if(uni == 'A') {
|
||||
dialog::editNumber(anticusp_factor, 0, 1.5, .1, 0, XLAT("anti-crossing"),
|
||||
@ -1787,10 +1785,6 @@ int rugArgs() {
|
||||
shift_arg_formula(lwidth);
|
||||
}
|
||||
|
||||
else if(argis("-rugauto")) {
|
||||
shift_arg_formula(ruggo);
|
||||
}
|
||||
|
||||
else if(argis("-rugorth")) {
|
||||
rconf.model = mdEquidistant;
|
||||
}
|
||||
|
@ -1085,7 +1085,7 @@ EX ld skiprope_rotation;
|
||||
|
||||
int lastticks, bak_turncount;
|
||||
|
||||
EX ld rug_rotation1, rug_rotation2, ballangle_rotation, env_ocean, env_volcano;
|
||||
EX ld rug_rotation1, rug_rotation2, rug_forward, ballangle_rotation, env_ocean, env_volcano, rug_movement_angle, rug_shift_angle;
|
||||
EX bool env_shmup;
|
||||
EX ld rug_angle;
|
||||
|
||||
@ -1180,6 +1180,13 @@ bool clearup;
|
||||
|
||||
EX purehookset hooks_anim;
|
||||
|
||||
EX void animate_rug_movement(ld t) {
|
||||
rug::using_rugview urv;
|
||||
shift_view(
|
||||
cspin(0, GDIM-1, rug_movement_angle * degree) * spin(rug_shift_angle * degree) * xtangent(t)
|
||||
);
|
||||
}
|
||||
|
||||
EX void apply() {
|
||||
int t = ticks - lastticks;
|
||||
lastticks = ticks;
|
||||
@ -1283,6 +1290,8 @@ EX void apply() {
|
||||
if(rug_rotation2) {
|
||||
rug::rugView = rug::rugView * cspin(0, 1, rug_rotation2 * 2 * M_PI * t / period);
|
||||
}
|
||||
if(rug_forward)
|
||||
animate_rug_movement(rug_forward * t / period);
|
||||
}
|
||||
#endif
|
||||
pconf.skiprope += skiprope_rotation * t * 2 * M_PI / period;
|
||||
@ -1451,6 +1460,19 @@ void list_animated_parameters() {
|
||||
|
||||
ld animation_period;
|
||||
|
||||
EX void rug_angle_options() {
|
||||
dialog::addSelItem(XLAT("shift"), fts(rug_shift_angle) + "°", 'C');
|
||||
dialog::add_action([] () {
|
||||
popScreen();
|
||||
dialog::editNumber(rug_shift_angle, 0, 90, 15, 0, XLAT("shift"), "");
|
||||
});
|
||||
dialog::addSelItem(XLAT("movement angle"), fts(rug_movement_angle) + "°", 'M');
|
||||
dialog::add_action([] () {
|
||||
popScreen();
|
||||
dialog::editNumber(rug_movement_angle, 0, 360, 15, 0, XLAT("movement angle"), "");
|
||||
});
|
||||
}
|
||||
|
||||
EX void show() {
|
||||
cmode = sm::SIDE; needs_highqual = false;
|
||||
animation_lcm = 1;
|
||||
@ -1609,13 +1631,15 @@ EX void show() {
|
||||
}
|
||||
else dialog::addBreak(100);
|
||||
animator(XLAT("model-relative rotation"), rug_rotation2, 'r');
|
||||
animator(XLAT("automatic move speed"), rug::ruggo, 'M');
|
||||
animator(XLAT("automatic move speed"), rug_forward, 'M');
|
||||
dialog::add_action([] () {
|
||||
dialog::editNumber(rug::ruggo, 0, 10, 1, 1, XLAT("automatic move speed"), XLAT("Move automatically without pressing any keys."));
|
||||
if(among(rug::gwhere, gSphere, gElliptic))
|
||||
dialog::editNumber(rug_forward, 0, 10, 1, 1, XLAT("automatic move speed"), XLAT("Move automatically without pressing any keys."));
|
||||
dialog::extra_options = [] () {
|
||||
if(among(rug::gwhere, gSphere, gElliptic)) {
|
||||
dialog::addItem(XLAT("synchronize"), 'S');
|
||||
dialog::add_action([] () { rug::ruggo = 2 * M_PI * 1000 / period; popScreen(); });
|
||||
dialog::add_action([] () { rug_forward = 2 * M_PI; popScreen(); });
|
||||
}
|
||||
rug_angle_options();
|
||||
};
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user