Skip to content

Commit 3e2efdf

Browse files
committedMay 19, 2013
Add a little animation when changing the wielded item
1 parent bc66f46 commit 3e2efdf

File tree

3 files changed

+58
-13
lines changed

3 files changed

+58
-13
lines changed
 

‎src/camera.cpp

+50-11
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
7171

7272
m_digging_anim(0),
7373
m_digging_button(-1),
74-
m_dummymesh(createCubeMesh(v3f(1,1,1)))
74+
m_dummymesh(createCubeMesh(v3f(1,1,1))),
75+
76+
m_wield_change_timer(0.125),
77+
m_wield_mesh_next(NULL),
78+
m_previous_playeritem(-1),
79+
m_previous_itemname("")
7580
{
7681
//dstream<<__FUNCTION_NAME<<std::endl;
7782

@@ -142,6 +147,21 @@ void Camera::step(f32 dtime)
142147
m_view_bobbing_fall = -1; // Mark the effect as finished
143148
}
144149

150+
if(m_wield_change_timer < 0.125)
151+
m_wield_change_timer += dtime;
152+
if(m_wield_change_timer > 0.125)
153+
m_wield_change_timer = 0.125;
154+
155+
if(m_wield_change_timer >= 0 && m_wield_change_timer - dtime < 0) {
156+
if(m_wield_mesh_next) {
157+
m_wieldnode->setMesh(m_wield_mesh_next);
158+
m_wieldnode->setVisible(true);
159+
} else {
160+
m_wieldnode->setVisible(false);
161+
}
162+
m_wield_mesh_next = NULL;
163+
}
164+
145165
if (m_view_bobbing_state != 0)
146166
{
147167
//f32 offset = dtime * m_view_bobbing_speed * 0.035;
@@ -351,6 +371,10 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize,
351371
v3f wield_position = v3f(55, -35, 65);
352372
//v3f wield_rotation = v3f(-100, 120, -100);
353373
v3f wield_rotation = v3f(-100, 120, -100);
374+
if(m_wield_change_timer < 0)
375+
wield_position.Y -= 40 + m_wield_change_timer*320;
376+
else
377+
wield_position.Y -= 40 - m_wield_change_timer*320;
354378
if(m_digging_anim < 0.05 || m_digging_anim > 0.5){
355379
f32 frac = 1.0;
356380
if(m_digging_anim > 0.5)
@@ -559,18 +583,33 @@ void Camera::setDigging(s32 button)
559583
m_digging_button = button;
560584
}
561585

562-
void Camera::wield(const ItemStack &item)
586+
void Camera::wield(const ItemStack &item, u16 playeritem)
563587
{
564588
IItemDefManager *idef = m_gamedef->idef();
565-
scene::IMesh *wield_mesh = idef->getWieldMesh(item.getDefinition(idef).name, m_gamedef);
566-
if(wield_mesh)
567-
{
568-
m_wieldnode->setMesh(wield_mesh);
569-
m_wieldnode->setVisible(true);
570-
}
571-
else
572-
{
573-
m_wieldnode->setVisible(false);
589+
std::string itemname = item.getDefinition(idef).name;
590+
m_wield_mesh_next = idef->getWieldMesh(itemname, m_gamedef);
591+
if(playeritem != m_previous_playeritem) {
592+
m_previous_playeritem = playeritem;
593+
m_previous_itemname = itemname;
594+
if(m_wield_change_timer >= 0.125)
595+
m_wield_change_timer = -0.125;
596+
else if(m_wield_change_timer > 0) {
597+
m_wield_change_timer = -m_wield_change_timer;
598+
}
599+
} else {
600+
if(m_wield_mesh_next) {
601+
m_wieldnode->setMesh(m_wield_mesh_next);
602+
m_wieldnode->setVisible(true);
603+
} else {
604+
m_wieldnode->setVisible(false);
605+
}
606+
m_wield_mesh_next = NULL;
607+
if(m_previous_itemname != itemname) {
608+
m_previous_itemname = itemname;
609+
m_wield_change_timer = 0;
610+
}
611+
else
612+
m_wield_change_timer = 0.125;
574613
}
575614
}
576615

‎src/camera.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class Camera
117117
void setDigging(s32 button);
118118

119119
// Replace the wielded item mesh
120-
void wield(const ItemStack &item);
120+
void wield(const ItemStack &item, u16 playeritem);
121121

122122
// Draw the wielded tool.
123123
// This has to happen *after* the main scene is drawn.
@@ -178,6 +178,12 @@ class Camera
178178

179179
//dummymesh for camera
180180
irr::scene::IAnimatedMesh* m_dummymesh;
181+
182+
// Animation when changing wielded item
183+
f32 m_wield_change_timer;
184+
scene::IMesh *m_wield_mesh_next;
185+
u16 m_previous_playeritem;
186+
std::string m_previous_itemname;
181187
};
182188

183189
#endif

‎src/game.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3084,7 +3084,7 @@ void the_game(
30843084
ItemStack item;
30853085
if(mlist != NULL)
30863086
item = mlist->getItem(client.getPlayerItem());
3087-
camera.wield(item);
3087+
camera.wield(item, client.getPlayerItem());
30883088
}
30893089

30903090
/*

0 commit comments

Comments
 (0)