mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-18 03:04:48 +00:00
modernized animation parameters
This commit is contained in:
parent
dc95d4c3e6
commit
b4e280c43f
81
legacy.cpp
81
legacy.cpp
@ -362,7 +362,86 @@ int read_legacy_args() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto ah_legacy = addHook(hooks_args, 0, read_legacy_args);
|
||||
int read_legacy_args_anim() {
|
||||
using namespace anims;
|
||||
using namespace arg;
|
||||
ld movement_angle, shift_angle, rug_angle; /* TODO link to anims::angle's */
|
||||
if(0);
|
||||
else if(argis("-animperiod")) {
|
||||
PHASEFROM(2); shift_arg_formula(period);
|
||||
}
|
||||
else if(argis("-animcircle")) {
|
||||
PHASE(3); start_game();
|
||||
ma = maCircle; ma_reaction();
|
||||
shift_arg_formula(circle_spins);
|
||||
shift_arg_formula(circle_radius);
|
||||
shift(); circle_display_color = argcolor(24);
|
||||
}
|
||||
else if(argis("-animmove")) {
|
||||
ma = maTranslation;
|
||||
shift_arg_formula(cycle_length);
|
||||
shift_arg_formula(shift_angle);
|
||||
shift_arg_formula(movement_angle);
|
||||
}
|
||||
else if(argis("-animmoverot")) {
|
||||
ma = maTranslationRotation;
|
||||
shift_arg_formula(cycle_length);
|
||||
shift_arg_formula(shift_angle);
|
||||
shift_arg_formula(movement_angle);
|
||||
}
|
||||
else if(argis("-wallopt")) {
|
||||
wallopt = true;
|
||||
}
|
||||
else if(argis("-animpar")) {
|
||||
ma = maParabolic;
|
||||
shift_arg_formula(parabolic_length);
|
||||
shift_arg_formula(shift_angle);
|
||||
shift_arg_formula(movement_angle);
|
||||
}
|
||||
else if(argis("-animclear")) { clearup = true; }
|
||||
else if(argis("-animrot")) {
|
||||
ma = maRotation;
|
||||
if(GDIM == 3) {
|
||||
shift_arg_formula(movement_angle);
|
||||
shift_arg_formula(normal_angle);
|
||||
}
|
||||
}
|
||||
else if(argis("-animrotd")) {
|
||||
start_game();
|
||||
ma = maRotation;
|
||||
shift_arg_formula(rotation_distance);
|
||||
}
|
||||
else if(argis("-animrug")) {
|
||||
shift_arg_formula(rug_rotation1);
|
||||
shift_arg_formula(rug_angle);
|
||||
shift_arg_formula(rug_rotation2);
|
||||
}
|
||||
else if(argis("-animenv")) {
|
||||
shift_arg_formula(env_ocean);
|
||||
shift_arg_formula(env_volcano);
|
||||
}
|
||||
else if(argis("-animball")) {
|
||||
shift(); println(hlog, "-animball removed");
|
||||
}
|
||||
else if(argis("-animj")) {
|
||||
shift(); println(hlog, "-animj removed");
|
||||
/* to recreate: if(joukowsky_anim) {
|
||||
ld t = ticks / period;
|
||||
t = t - floor(t);
|
||||
if(pmodel == mdBand) {
|
||||
vpconf.model_transition = t * 4 - 1;
|
||||
}
|
||||
else {
|
||||
vpconf.model_transition = t / 1.1;
|
||||
vpconf.scale = (1 - vpconf.model_transition) / 2.;
|
||||
} */
|
||||
/* skiprope:legacy.cpp pconf.skiprope += skiprope_rotation * t * TAU / period; */
|
||||
}
|
||||
else return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto ah_legacy = addHook(hooks_args, 0, read_legacy_args) + addHook(hooks_args, 0, read_legacy_args_anim);
|
||||
#endif
|
||||
|
||||
|
||||
|
154
screenshot.cpp
154
screenshot.cpp
@ -1131,7 +1131,7 @@ enum eMovementAnimation {
|
||||
|
||||
EX eMovementAnimation ma;
|
||||
|
||||
EX ld shift_angle, movement_angle, movement_angle_2;
|
||||
EX trans23 movement_angle;
|
||||
EX ld normal_angle = 90;
|
||||
EX ld period = 10000;
|
||||
EX int noframes = 30;
|
||||
@ -1142,15 +1142,22 @@ EX string time_formula = "-";
|
||||
|
||||
int lastticks, bak_turncount;
|
||||
|
||||
EX ld rug_rotation1, rug_rotation2, rug_forward, ballangle_rotation, env_ocean, env_volcano, rug_movement_angle, rug_shift_angle;
|
||||
EX ld rug_rotation1, rug_rotation2, rug_forward, env_ocean, env_volcano;
|
||||
EX bool env_shmup;
|
||||
EX ld rug_angle;
|
||||
EX transmatrix rug_angle = Id, rug_movement_angle = cspin(0, 1, 90._deg);
|
||||
|
||||
EX ld rotation_distance;
|
||||
cell *rotation_center;
|
||||
transmatrix rotation_center_View;
|
||||
|
||||
color_t circle_display_color = 0x00FF00FF;
|
||||
EX void ma_reaction() {
|
||||
println(hlog, "ma_reaction called");
|
||||
if(ma == maCircle) start_game();
|
||||
rotation_center = centerover;
|
||||
rotation_center_View = View;
|
||||
}
|
||||
|
||||
EX color_t circle_display_color = 0x00FF00FF;
|
||||
|
||||
EX ld circle_radius = acosh(2.);
|
||||
EX ld circle_spins = 1;
|
||||
@ -1241,14 +1248,14 @@ EX void reflect_view() {
|
||||
}
|
||||
}
|
||||
|
||||
bool clearup;
|
||||
EX 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)
|
||||
rug_movement_angle * xtangent(t)
|
||||
);
|
||||
}
|
||||
|
||||
@ -1280,7 +1287,7 @@ EX void apply() {
|
||||
}
|
||||
}
|
||||
shift_view(
|
||||
cspin(0, GDIM-1, movement_angle * degree) * spin(shift_angle * degree) * xtangent(cycle_length * t / period)
|
||||
movement_angle.get() * xtangent(cycle_length * t / period)
|
||||
);
|
||||
moved();
|
||||
if(clearup) {
|
||||
@ -1291,25 +1298,17 @@ EX void apply() {
|
||||
break;
|
||||
|
||||
case maRotation:
|
||||
shift_view(ztangent(-rotation_distance));
|
||||
if(GDIM == 3) {
|
||||
rotate_view(spin(-movement_angle * degree));
|
||||
rotate_view(cspin(1, 2, normal_angle * degree));
|
||||
rotate_view(spin(-movement_angle_2 * degree));
|
||||
}
|
||||
if(GDIM == 3) shift_view(ztangent(-rotation_distance));
|
||||
rotate_view(movement_angle.get());
|
||||
rotate_view(spin(TAU * t / period));
|
||||
if(GDIM == 3) {
|
||||
rotate_view(spin(movement_angle_2 * degree));
|
||||
rotate_view(cspin(2, 1, normal_angle * degree));
|
||||
rotate_view(spin(movement_angle * degree));
|
||||
}
|
||||
shift_view(ztangent(rotation_distance));
|
||||
rotate_view(rot_inverse(movement_angle.get()));
|
||||
if(GDIM == 3) shift_view(ztangent(rotation_distance));
|
||||
moved();
|
||||
break;
|
||||
|
||||
case maTranslationRotation:
|
||||
shift_view(
|
||||
cspin(0, GDIM-1, movement_angle * degree) * spin(shift_angle * degree) * xtangent(cycle_length * t / period)
|
||||
rot_inverse(movement_angle.get()) * xtangent(cycle_length * t / period)
|
||||
);
|
||||
moved();
|
||||
rotate_view(cspin(0, GDIM-1, TAU * t / period));
|
||||
@ -1321,12 +1320,12 @@ EX void apply() {
|
||||
#if CAP_BT
|
||||
case maParabolic:
|
||||
reflect_view();
|
||||
View = ypush(-shift_angle * degree) * spin(-movement_angle * degree) * View;
|
||||
View = movement_angle.get() * View;
|
||||
if(GDIM == 2)
|
||||
View = bt::parabolic(parabolic_length * t / period) * View;
|
||||
else
|
||||
View = bt::parabolic3(parabolic_length * t / period, 0) * View;
|
||||
View = spin(movement_angle * degree) * ypush(shift_angle * degree) * View;
|
||||
View = rot_inverse(movement_angle.get()) * View;
|
||||
moved();
|
||||
break;
|
||||
#endif
|
||||
@ -1356,7 +1355,7 @@ EX void apply() {
|
||||
if(rug::rugged) {
|
||||
if(rug_rotation1) {
|
||||
rug::using_rugview rv;
|
||||
rotate_view(cspin(1, 2, -rug_angle * degree) * cspin(0, 2, rug_rotation1 * TAU * t / period) * cspin(1, 2, rug_angle * degree));
|
||||
rotate_view(inverse(rug_angle) * cspin(0, 2, rug_rotation1 * TAU * t / period) * rug_angle);
|
||||
}
|
||||
if(rug_rotation2) {
|
||||
rug::using_rugview rv;
|
||||
@ -1515,16 +1514,8 @@ EX ld a, b;
|
||||
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"), "");
|
||||
});
|
||||
add_edit(rug_angle);
|
||||
add_edit(rug_movement_angle);
|
||||
}
|
||||
|
||||
EX void show() {
|
||||
@ -1618,14 +1609,7 @@ EX void show() {
|
||||
}
|
||||
else
|
||||
add_edit(parabolic_length);
|
||||
dialog::addSelItem(XLAT("shift"), fts(shift_angle) + "°", 'C');
|
||||
dialog::add_action([] () {
|
||||
dialog::editNumber(shift_angle, 0, 90, 15, 0, XLAT("shift"), "");
|
||||
});
|
||||
dialog::addSelItem(XLAT("movement angle"), fts(movement_angle) + "°", 'm');
|
||||
dialog::add_action([] () {
|
||||
dialog::editNumber(movement_angle, 0, 360, 15, 0, XLAT("movement angle"), "");
|
||||
});
|
||||
add_edit(movement_angle.get());
|
||||
break;
|
||||
}
|
||||
case maRotation:
|
||||
@ -1634,10 +1618,7 @@ EX void show() {
|
||||
dialog::add_action([] () {
|
||||
dialog::editNumber(normal_angle, 0, 360, 15, 0, XLAT("angle to screen normal"), "");
|
||||
});
|
||||
dialog::addSelItem(XLAT("movement angle"), fts(movement_angle) + "°", 'm');
|
||||
dialog::add_action([] () {
|
||||
dialog::editNumber(movement_angle, 0, 360, 15, 0, XLAT("movement angle"), "");
|
||||
});
|
||||
add_edit(movement_angle);
|
||||
dialog::addBreak(100);
|
||||
dialog::addSelItem(XLAT("distance from rotation center"), fts(rotation_distance), 'r');
|
||||
dialog::add_action([] () {
|
||||
@ -1667,12 +1648,7 @@ EX void show() {
|
||||
#if CAP_RUG
|
||||
if(rug::rugged) {
|
||||
animator(XLAT("screen-relative rotation"), rug_rotation1, 'r');
|
||||
if(rug_rotation1) {
|
||||
dialog::addSelItem(XLAT("angle"), fts(rug_angle) + "°", 'a');
|
||||
dialog::add_action([] () {
|
||||
dialog::editNumber(rug_angle, 0, 360, 15, 0, "Rug angle", "");
|
||||
});
|
||||
}
|
||||
if(rug_rotation1) add_edit(rug_angle);
|
||||
else dialog::addBreak(100);
|
||||
animator(XLAT("model-relative rotation"), rug_rotation2, 'r');
|
||||
animator(XLAT("automatic move speed"), rug_forward, 'M');
|
||||
@ -1766,58 +1742,7 @@ int readArgs() {
|
||||
shift(); videofile = args(); record_video();
|
||||
}
|
||||
#endif
|
||||
else if(argis("-animcircle")) {
|
||||
PHASE(3); start_game();
|
||||
ma = maCircle;
|
||||
rotation_center = centerover;
|
||||
rotation_center_View = View;
|
||||
shift_arg_formula(circle_spins);
|
||||
shift_arg_formula(circle_radius);
|
||||
shift(); circle_display_color = argcolor(24);
|
||||
}
|
||||
else if(argis("-animmove")) {
|
||||
ma = maTranslation;
|
||||
shift_arg_formula(cycle_length);
|
||||
shift_arg_formula(shift_angle);
|
||||
shift_arg_formula(movement_angle);
|
||||
}
|
||||
else if(argis("-animmoverot")) {
|
||||
ma = maTranslationRotation;
|
||||
shift_arg_formula(cycle_length);
|
||||
shift_arg_formula(shift_angle);
|
||||
shift_arg_formula(movement_angle);
|
||||
}
|
||||
else if(argis("-wallopt")) {
|
||||
wallopt = true;
|
||||
}
|
||||
else if(argis("-animpar")) {
|
||||
ma = maParabolic;
|
||||
shift_arg_formula(parabolic_length);
|
||||
shift_arg_formula(shift_angle);
|
||||
shift_arg_formula(movement_angle);
|
||||
}
|
||||
else if(argis("-animclear")) { clearup = true; }
|
||||
else if(argis("-animrot")) {
|
||||
ma = maRotation;
|
||||
if(GDIM == 3) {
|
||||
shift_arg_formula(movement_angle);
|
||||
shift_arg_formula(normal_angle);
|
||||
}
|
||||
}
|
||||
else if(argis("-animrotd")) {
|
||||
start_game();
|
||||
ma = maRotation;
|
||||
shift_arg_formula(rotation_distance);
|
||||
}
|
||||
else if(argis("-animrug")) {
|
||||
shift_arg_formula(rug_rotation1);
|
||||
shift_arg_formula(rug_angle);
|
||||
shift_arg_formula(rug_rotation2);
|
||||
}
|
||||
else if(argis("-animenv")) {
|
||||
shift_arg_formula(env_ocean);
|
||||
shift_arg_formula(env_volcano);
|
||||
}
|
||||
#endif
|
||||
else return 1;
|
||||
return 0;
|
||||
}
|
||||
@ -1834,14 +1759,29 @@ auto animhook = addHook(hooks_frame, 100, display_animation)
|
||||
param_f(anims::cycle_length, "acycle", "animation cycle length");
|
||||
param_f(anims::parabolic_length, "aparabolic", "animation parabolic length")
|
||||
->editable(0, 10, 1, "cells to go", "", 'c');
|
||||
param_f(anims::rug_angle, "arugangle", "animation rug angle");
|
||||
param_matrix(anims::rug_angle, "arugangle", 3)
|
||||
->editable("animation rug angle", "", 'a');
|
||||
param_f(anims::circle_radius, "acradius", "animation circle radius");
|
||||
param_f(anims::circle_spins, "acspins", "animation circle spins");
|
||||
addsaver(anims::rug_movement_angle, "rug forward movement angle", 90);
|
||||
addsaver(anims::rug_shift_angle, "rug forward shift angle", 0);
|
||||
param_matrix(anims::rug_movement_angle, "rug forward movement angle", 3)
|
||||
->editable("rug forward movement angle", "", 'b');
|
||||
param_matrix(anims::movement_angle.v2, "movement_angle", 2)->editable("movement angle", "", 'm');
|
||||
param_matrix(anims::movement_angle.v3, "movement_angle_3", 3)->editable("movement angle", "", 'm');
|
||||
param_f(rug_rotation1, "rug_rotation1");
|
||||
param_f(rug_rotation2, "rug_rotation2");
|
||||
param_f(rotation_distance, "rotation_distance");
|
||||
param_f(cycle_length, "cycle_length");
|
||||
param_f(env_ocean, "env_ocean");
|
||||
param_f(env_volcano, "env_volcano");
|
||||
param_b(wallopt, "wallopt");
|
||||
param_b(clearup, "anim_clearup");
|
||||
param_color(circle_display_color, "circle_display_color", true);
|
||||
param_enum(anims::ma, "ma", "movement_animation", maNone)
|
||||
-> editable({{"none", ""}, {"translation", ""}, {"rotation", ""}, {"circle", ""}, {"parabolic", ""}, {"translation+rotation", ""}}, "movement animation", 'a')
|
||||
-> set_reaction(ma_reaction);
|
||||
|
||||
param_f(anims::a, "a", 0);
|
||||
param_f(anims::b, "b", 0);
|
||||
param_f(anims::movement_angle_2, "movement angle 2", 0);
|
||||
#endif
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user