Skip to content

Commit

Permalink
startgame animations
Browse files Browse the repository at this point in the history
  • Loading branch information
zenorogue committed Feb 6, 2019
1 parent 3f0bda3 commit e2b2629
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 3 deletions.
1 change: 1 addition & 0 deletions graph.cpp
Expand Up @@ -2412,6 +2412,7 @@ void drawaura() {
}
}
glflush();
current_display->set_projection(0, false);
glhr::switch_mode(glhr::gmVarColored, glhr::shader_projection::standard);
glhr::id_modelview();
glhr::prepare(auravertices);
Expand Down
4 changes: 3 additions & 1 deletion hyper.cpp
Expand Up @@ -65,8 +65,10 @@ int main(int argc, char **argv) {
start_game();
#endif
#if !ISWEB
if(showstartmenu && !vid.skipstart)
if(showstartmenu && !vid.skipstart) {
startanims::pick();
pushScreen(showStartMenu);
}
#endif
mainloop();
finishAll();
Expand Down
7 changes: 7 additions & 0 deletions hyper.h
Expand Up @@ -2590,6 +2590,8 @@ extern bool useRangedOrb;

void addaura(hyperpoint h, color_t col, int fd);
void addauraspecial(hyperpoint h, color_t col, int dir);
void drawaura();
void clearaura();

void drawBug(const cellwalker& cw, color_t col);

Expand Down Expand Up @@ -4429,6 +4431,11 @@ namespace anims {
extern ld period, cycle_length, parabolic_length, rug_angle, circle_radius, circle_spins;
}

namespace startanims {
extern reaction_t current;
void pick();
}

extern int animation_lcm;
extern ld animation_factor;
ld parseld(const string& s);
Expand Down
5 changes: 3 additions & 2 deletions menus.cpp
Expand Up @@ -255,7 +255,7 @@ void showMainMenu() {
else if(uni == 'd') pushScreen(showDisplayMode);
else if(uni == 'm') pushScreen(showChangeMode);
else if(uni == 'R') dialog::do_if_confirmed([] {
popScreenAll(), pushScreen(showStartMenu);
popScreenAll(), startanims::pick(), pushScreen(showStartMenu);
});
#if CAP_SAVE
else if(uni == 't') scores::load();
Expand Down Expand Up @@ -602,7 +602,7 @@ void showStartMenu() {
daily_mode = 20;
}

gamescreen(2);
startanims::current();

getcstat = ' ';

Expand Down Expand Up @@ -813,6 +813,7 @@ void showStartMenu() {
clearMessages();
welcomeMessage();
}
else if(sym == SDLK_F5) startanims::pick();
};
}

Expand Down
3 changes: 3 additions & 0 deletions polygons.cpp
Expand Up @@ -1526,6 +1526,7 @@ hpcshape
shWestHat1, shWestHat2, shGunInHand,
shKnightArmor, shKnightCloak, shWightCloak,
shGhost, shEyes, shSlime, shJelly, shJoint, shWormHead, shTentHead, shShark, shWormSegment, shSmallWormSegment, shWormTail, shSmallWormTail,
shMiniGhost, shMiniEyes,
shHedgehogBlade, shHedgehogBladePlayer,
shWolfBody, shWolfHead, shWolfLegs, shWolfEyes,
shWolfFrontLeg, shWolfRearLeg, shWolfFrontPaw, shWolfRearPaw,
Expand Down Expand Up @@ -2356,6 +2357,7 @@ void buildpolys() {

// monsters
bshape(shGhost, PPR::MONSTER_BODY, scalefactor, 69);
bshape(shMiniGhost, PPR::MONSTER_BODY, scalefactor/3, 69);
bshape(shGargoyleWings, PPR::MONSTER_CLOAK, scalefactor, 70);
bshape(shGargoyleBody, PPR::MONSTER_BODY, scalefactor, 71);
bshape(shDogStripes, PPR::MONSTER_ARMOR1, scalefactor, 72);
Expand Down Expand Up @@ -2490,6 +2492,7 @@ void buildpolys() {
bshape(shFlowerHand, PPR::MONSTER_WPN, scalefactor, 133);
bshape(shPFace, PPR::MONSTER_FACE, scalefactor, 134);
bshape(shEyes, PPR::MONSTER_EYE0, scalefactor, 135);
bshape(shMiniEyes, PPR::MONSTER_EYE0, scalefactor/3, 135);
bshape(shShark, PPR::MONSTER_BODY, scalefactor, 136);
bshape(shTinyShark, PPR::MONSTER_BODY, scalefactor / 2, 136);
bshape(shBugBody, PPR::MONSTER_BODY, scalefactor, 137);
Expand Down
120 changes: 120 additions & 0 deletions screenshot.cpp
Expand Up @@ -1006,4 +1006,124 @@ bool center_music() {

}
#endif

namespace startanims {

int ticks_start = 0;

void null_animation() {
gamescreen(2);
}

void joukowsky() {
dynamicval<eModel> dm(pmodel, mdJoukowskyInverted);
dynamicval<ld> dt(conformal::model_orientation, ticks / 25.);
dynamicval<int> dv(vid.use_smart_range, 2);
dynamicval<ld> ds(vid.scale, 1/4.);
conformal::configure();
dynamicval<color_t> dc(ringcolor, 0);
gamescreen(2);
}

void bandspin() {
dynamicval<eModel> dm(pmodel, mdBand);
dynamicval<ld> dt(conformal::model_orientation, ticks / 25.);
dynamicval<int> dv(vid.use_smart_range, 2);
conformal::configure();
gamescreen(2);
}

void perspective() {
ld x = sin(ticks / 1500.);
x += 1;
x /= 2;
x *= 1.5;
x = tan(x);
dynamicval<ld> da(vid.alpha, x);
dynamicval<ld> ds(vid.scale, (1+x)/2);
calcparam();
gamescreen(2);
}

void rug() {
dynamicval<bool> b(rug::rugged, true);
rug::physics();
rug::apply_rotation(rotmatrix(ticks / 3000., 1, 2));
gamescreen(2);
rug::apply_rotation(rotmatrix(-ticks / 3000., 1, 2));
}

void spin_around() {
dynamicval<ld> da(vid.alpha, 999);
dynamicval<ld> ds(vid.scale, 500);
ld alpha = 2 * M_PI * ticks / 10000.;
ld circle_radius = acosh(2.);
dynamicval<transmatrix> dv(View, spin(-cos_auto(circle_radius)*alpha) * xpush(circle_radius) * spin(alpha) * View);
gamescreen(2);
}

reaction_t add_to_frame;

void draw_ghost(const transmatrix V) {
queuepoly(V, shMiniGhost, 0xFFFFFFC0);
queuepoly(V, shMiniEyes, 0xFF);
}

void row_of_ghosts() {
dynamicval<reaction_t> r(add_to_frame, [] {
for(ld x=-5; x<=5; x+=0.2)
for(ld y=-5; y<=5; y+=0.2) {
ld ay = y + (ticks % 1000) / 1000.;
draw_ghost(xpush(x) * spin(M_PI/2) * xpush(ay));
}
});
dynamicval<bool> rd(mapeditor::drawplayer, false);
gamescreen(2);
}

void army_of_ghosts() {
dynamicval<bool> rd(mapeditor::drawplayer, false);
dynamicval<reaction_t> r(add_to_frame, [] {
for(ld x=-3; x<=3; x+=0.5) {
int minv = int(cosh(x) * 3);
for(ld y=-minv; y<=minv; y+=0.5) {
ld ay = y + (ticks % 2000) / 2000.;
draw_ghost(spin(M_PI/2) * xpush(ay / cosh(x)) * spin(-M_PI/2) * xpush(x) * spin(M_PI/2));
}
}
});
gamescreen(2);
}

void ghost_spiral() {
dynamicval<reaction_t> r(add_to_frame, [] {
ld t = (ticks - ticks_start - 2000) / 150000.;
for(ld i=3; i<=40; i++) {
draw_ghost(spin(t * i * 2 * M_PI) * xpush(asinh(15. / i)) * spin(M_PI/2));
}
});
gamescreen(2);
}

// more start animations:
// - fly a ghost around center, in Gans model
// - triangle edges?

reaction_t current = null_animation;

void pick() {
if(((gold() > 0 || tkills() > 0) && canmove) || geometry != gNormal || ISWEB || ISMOBILE) {
current = null_animation;
return;
}
vector<reaction_t> known = { null_animation, perspective, joukowsky, bandspin, rug, spin_around, row_of_ghosts, ghost_spiral, army_of_ghosts };
int id = rand() % 9;
current = known[id];
ticks_start = ticks;
if(id == 4) rug::init(), rug::rugged = false;
}

auto sanimhook = addHook(hooks_frame, 100, []() { if(add_to_frame) add_to_frame(); });

}
}

0 comments on commit e2b2629

Please sign in to comment.