mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-11-04 15:53:00 +00:00 
			
		
		
		
	modernized animation parameters
This commit is contained in:
		
							
								
								
									
										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
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user