@@ -71,7 +71,12 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
71
71
72
72
m_digging_anim(0 ),
73
73
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(" " )
75
80
{
76
81
// dstream<<__FUNCTION_NAME<<std::endl;
77
82
@@ -142,6 +147,21 @@ void Camera::step(f32 dtime)
142
147
m_view_bobbing_fall = -1 ; // Mark the effect as finished
143
148
}
144
149
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
+
145
165
if (m_view_bobbing_state != 0 )
146
166
{
147
167
// f32 offset = dtime * m_view_bobbing_speed * 0.035;
@@ -351,6 +371,10 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize,
351
371
v3f wield_position = v3f (55 , -35 , 65 );
352
372
// v3f wield_rotation = v3f(-100, 120, -100);
353
373
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 ;
354
378
if (m_digging_anim < 0.05 || m_digging_anim > 0.5 ){
355
379
f32 frac = 1.0 ;
356
380
if (m_digging_anim > 0.5 )
@@ -559,18 +583,33 @@ void Camera::setDigging(s32 button)
559
583
m_digging_button = button;
560
584
}
561
585
562
- void Camera::wield (const ItemStack &item)
586
+ void Camera::wield (const ItemStack &item, u16 playeritem )
563
587
{
564
588
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 ;
574
613
}
575
614
}
576
615
0 commit comments