mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-27 14:37:16 +00:00
curses thrown are now animated
This commit is contained in:
parent
4a4a0fc217
commit
f94163bb78
@ -2698,7 +2698,15 @@ void celldrawer::draw() {
|
|||||||
|
|
||||||
draw_item_full();
|
draw_item_full();
|
||||||
draw_monster_full();
|
draw_monster_full();
|
||||||
|
|
||||||
|
if(animations[LAYER_THROW].count(c)) {
|
||||||
|
shiftmatrix Vthrow = V;
|
||||||
|
ld footphase;
|
||||||
|
applyAnimation(c, Vthrow, footphase, LAYER_THROW);
|
||||||
|
eItem it = animations[LAYER_THROW][c].thrown_item;
|
||||||
|
drawItemType(it, c, Vthrow, iinf[it].color, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
#if CAP_TEXTURE
|
#if CAP_TEXTURE
|
||||||
if(!texture::using_aura())
|
if(!texture::using_aura())
|
||||||
#endif
|
#endif
|
||||||
|
23
graph.cpp
23
graph.cpp
@ -5477,14 +5477,16 @@ struct animation {
|
|||||||
int attacking; /** 0 = no attack animation, 1 = first phase, 2 = second phase, 3 = hugging */
|
int attacking; /** 0 = no attack animation, 1 = first phase, 2 = second phase, 3 = hugging */
|
||||||
transmatrix attackat;
|
transmatrix attackat;
|
||||||
bool mirrored;
|
bool mirrored;
|
||||||
|
eItem thrown_item; /** for thrown items */
|
||||||
};
|
};
|
||||||
|
|
||||||
// we need separate animation layers for Orb of Domination and Tentacle+Ghost,
|
// we need separate animation layers for Orb of Domination and Tentacle+Ghost,
|
||||||
// and also to mark Boats
|
// and also to mark Boats
|
||||||
#define ANIMLAYERS 3
|
#define ANIMLAYERS 4
|
||||||
#define LAYER_BIG 0 // for worms and krakens
|
#define LAYER_BIG 0 // for worms and krakens
|
||||||
#define LAYER_SMALL 1 // for others
|
#define LAYER_SMALL 1 // for others
|
||||||
#define LAYER_BOAT 2 // mark that a boat has moved
|
#define LAYER_BOAT 2 // mark that a boat has moved
|
||||||
|
#define LAYER_THROW 3 // for thrown items
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EX array<map<cell*, animation>, ANIMLAYERS> animations;
|
EX array<map<cell*, animation>, ANIMLAYERS> animations;
|
||||||
@ -5527,6 +5529,25 @@ EX void animateMovement(const movei& m, int layer) {
|
|||||||
a.mirrored = !a.mirrored;
|
a.mirrored = !a.mirrored;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX void animate_item_throw(cell *from, cell *to, eItem it) {
|
||||||
|
|
||||||
|
bool steps = false;
|
||||||
|
again:
|
||||||
|
if(from != to) {
|
||||||
|
forCellIdEx(c1, i, from) if(celldistance(c1, to) < celldistance(from, to)) {
|
||||||
|
animateMovement(movei(from, i), LAYER_THROW);
|
||||||
|
from = c1;
|
||||||
|
steps = true;
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(steps) {
|
||||||
|
animation& a = animations[LAYER_THROW][to];
|
||||||
|
a.thrown_item = it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EX void animateAttackOrHug(const movei& m, int layer, int phase, ld ratio, ld delta) {
|
EX void animateAttackOrHug(const movei& m, int layer, int phase, ld ratio, ld delta) {
|
||||||
LATE( animateAttack(m, layer); )
|
LATE( animateAttack(m, layer); )
|
||||||
if(vid.mspeed >= 5) return; // no animations!
|
if(vid.mspeed >= 5) return; // no animations!
|
||||||
|
@ -1912,6 +1912,7 @@ EX void specialMoves() {
|
|||||||
int d = celldistance(c,t);
|
int d = celldistance(c,t);
|
||||||
if(d <= firerange) {
|
if(d <= firerange) {
|
||||||
addMessage(XLAT("%The1 curses you with %the2!", m, c->item));
|
addMessage(XLAT("%The1 curses you with %the2!", m, c->item));
|
||||||
|
animate_item_throw(c, t, c->item);
|
||||||
items[c->item] += orbcharges(c->item);
|
items[c->item] += orbcharges(c->item);
|
||||||
c->item = itNone;
|
c->item = itNone;
|
||||||
c->stuntime = 1;
|
c->stuntime = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user