mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 01:58:19 +00:00
Merged in lost hand changeset.
This commit is contained in:
parent
42d519e893
commit
3856db4b8b
|
@ -568,6 +568,8 @@ sprites {
|
||||||
tee_body_outline 4 0 4 4
|
tee_body_outline 4 0 4 4
|
||||||
tee_foot 8 3 2 1
|
tee_foot 8 3 2 1
|
||||||
tee_foot_outline 13 2 2 1
|
tee_foot_outline 13 2 2 1
|
||||||
|
tee_hand 8 0 2 2
|
||||||
|
tee_hand_outline 13 0 2 2
|
||||||
|
|
||||||
tee_eye_normal 10 2 1 1
|
tee_eye_normal 10 2 1 1
|
||||||
tee_eye_pain 11 3 1 1
|
tee_eye_pain 11 3 1 1
|
||||||
|
|
|
@ -796,6 +796,51 @@ static void anim_eval_add(animstate *state, animation *anim, float time, float a
|
||||||
anim_add(state, &add, amount);
|
anim_add(state, &add, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void render_hand(int skin, vec2 center_pos, vec2 dir, float angle_offset, vec2 post_rot_offset)
|
||||||
|
{
|
||||||
|
// for drawing hand
|
||||||
|
int shift = charids[skin%16];
|
||||||
|
float basesize = 10.0f;
|
||||||
|
//dir = normalize(hook_pos-pos);
|
||||||
|
|
||||||
|
vec2 hand_pos = center_pos + dir;
|
||||||
|
float angle = get_angle(dir);
|
||||||
|
if (dir.x < 0)
|
||||||
|
angle -= angle_offset;
|
||||||
|
else
|
||||||
|
angle += angle_offset;
|
||||||
|
|
||||||
|
vec2 dirx = dir;
|
||||||
|
vec2 diry(-dir.y,dir.x);
|
||||||
|
|
||||||
|
if (dir.x < 0)
|
||||||
|
diry = -diry;
|
||||||
|
|
||||||
|
hand_pos += dirx * post_rot_offset.x;
|
||||||
|
hand_pos += diry * post_rot_offset.y;
|
||||||
|
|
||||||
|
// don't draw if it's almost straight down
|
||||||
|
//if (abs(get_angle(dir) - 3*pi/2) > 10)
|
||||||
|
{
|
||||||
|
gfx_texture_set(data->images[IMAGE_CHAR_DEFAULT].id);
|
||||||
|
gfx_quads_begin();
|
||||||
|
|
||||||
|
// two passes
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
bool outline = i == 0;
|
||||||
|
|
||||||
|
// draw hook hand
|
||||||
|
select_sprite(outline?SPRITE_TEE_HAND_OUTLINE:SPRITE_TEE_HAND, 0, 0, shift*4);
|
||||||
|
gfx_quads_setrotation(angle);
|
||||||
|
gfx_quads_draw(hand_pos.x, hand_pos.y, 2*basesize, 2*basesize);
|
||||||
|
}
|
||||||
|
|
||||||
|
gfx_quads_setrotation(0);
|
||||||
|
gfx_quads_end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void render_tee(animstate *anim, int skin, int emote, vec2 dir, vec2 pos)
|
static void render_tee(animstate *anim, int skin, int emote, vec2 dir, vec2 pos)
|
||||||
{
|
{
|
||||||
vec2 direction = dir;
|
vec2 direction = dir;
|
||||||
|
@ -916,7 +961,8 @@ static void render_player(const obj_player *prev, const obj_player *player)
|
||||||
{
|
{
|
||||||
if(player->health < 0) // dont render dead players
|
if(player->health < 0) // dont render dead players
|
||||||
return;
|
return;
|
||||||
|
int skin = gametype == GAMETYPE_TDM ? skinseed + player->team : player->clientid;
|
||||||
|
|
||||||
vec2 direction = get_direction(player->angle);
|
vec2 direction = get_direction(player->angle);
|
||||||
float angle = player->angle/256.0f;
|
float angle = player->angle/256.0f;
|
||||||
vec2 position = mix(vec2(prev->x, prev->y), vec2(player->x, player->y), client_intratick());
|
vec2 position = mix(vec2(prev->x, prev->y), vec2(player->x, player->y), client_intratick());
|
||||||
|
@ -949,10 +995,9 @@ static void render_player(const obj_player *prev, const obj_player *player)
|
||||||
float a = clamp((client_tick()-player->attacktick+client_intratick())/40.0f, 0.0f, 1.0f);
|
float a = clamp((client_tick()-player->attacktick+client_intratick())/40.0f, 0.0f, 1.0f);
|
||||||
anim_eval_add(&state, &data->animations[ANIM_NINJA_SWING], a, 1.0f);
|
anim_eval_add(&state, &data->animations[ANIM_NINJA_SWING], a, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// draw hook
|
// draw hook
|
||||||
if(player->hook_active)
|
if (prev->hook_active && player->hook_active)
|
||||||
{
|
{
|
||||||
gfx_texture_set(data->images[IMAGE_GAME].id);
|
gfx_texture_set(data->images[IMAGE_GAME].id);
|
||||||
gfx_quads_begin();
|
gfx_quads_begin();
|
||||||
|
@ -977,9 +1022,11 @@ static void render_player(const obj_player *prev, const obj_player *player)
|
||||||
vec2 p = hook_pos + dir*f;
|
vec2 p = hook_pos + dir*f;
|
||||||
gfx_quads_draw(p.x, p.y,24,16);
|
gfx_quads_draw(p.x, p.y,24,16);
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx_quads_setrotation(0);
|
gfx_quads_setrotation(0);
|
||||||
gfx_quads_end();
|
gfx_quads_end();
|
||||||
|
|
||||||
|
render_hand(skin, vec2(position.x+state.body.x, position.y+state.body.y), normalize(hook_pos-pos), -pi/2, vec2(20, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw gun
|
// draw gun
|
||||||
|
@ -1097,10 +1144,17 @@ static void render_player(const obj_player *prev, const obj_player *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gfx_quads_end();
|
gfx_quads_end();
|
||||||
|
|
||||||
|
switch (player->weapon)
|
||||||
|
{
|
||||||
|
case WEAPON_GUN: render_hand(skin, p, direction, -3*pi/4, vec2(-15, 4)); break;
|
||||||
|
case WEAPON_SHOTGUN: render_hand(skin, p, direction, -pi/2, vec2(-5, 4)); break;
|
||||||
|
case WEAPON_ROCKET: render_hand(skin, p, direction, -pi/2, vec2(-4, 7)); break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// render the tee
|
// render the tee
|
||||||
int skin = gametype == GAMETYPE_TDM ? skinseed + player->team : player->clientid;
|
|
||||||
render_tee(&state, skin, player->emote, direction, position);
|
render_tee(&state, skin, player->emote, direction, position);
|
||||||
|
|
||||||
if(player->state == STATE_CHATTING)
|
if(player->state == STATE_CHATTING)
|
||||||
|
|
Loading…
Reference in a new issue