@@ -546,12 +546,14 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
546
546
//
547
547
m_smgr(NULL ),
548
548
m_irr(NULL ),
549
+ m_camera(NULL ),
550
+ m_gamedef(NULL ),
549
551
m_selection_box(-BS/3 .,-BS/3 .,-BS/3 ., BS/3 .,BS/3 .,BS/3 .),
550
552
m_meshnode(NULL ),
551
553
m_animated_meshnode(NULL ),
552
554
m_wield_meshnode(NULL ),
553
555
m_spritenode(NULL ),
554
- m_textnode (NULL ),
556
+ m_nametag (NULL ),
555
557
m_position(v3f(0 ,10 *BS,0 )),
556
558
m_velocity(v3f(0 ,0 ,0 )),
557
559
m_acceleration(v3f(0 ,0 ,0 )),
@@ -580,8 +582,11 @@ GenericCAO::GenericCAO(IGameDef *gamedef, ClientEnvironment *env):
580
582
m_last_light(255 ),
581
583
m_is_visible(false )
582
584
{
583
- if (gamedef == NULL )
585
+ if (gamedef == NULL ) {
584
586
ClientActiveObject::registerType (getType (), create);
587
+ } else {
588
+ m_gamedef = gamedef;
589
+ }
585
590
}
586
591
587
592
bool GenericCAO::getCollisionBox (aabb3f *toset)
@@ -667,8 +672,7 @@ void GenericCAO::initialize(const std::string &data)
667
672
668
673
GenericCAO::~GenericCAO ()
669
674
{
670
- if (m_is_player)
671
- {
675
+ if (m_is_player) {
672
676
m_env->removePlayerName (m_name.c_str ());
673
677
}
674
678
removeFromScene (true );
@@ -695,14 +699,15 @@ v3f GenericCAO::getPosition()
695
699
696
700
scene::ISceneNode* GenericCAO::getSceneNode ()
697
701
{
698
- if (m_meshnode)
702
+ if (m_meshnode) {
699
703
return m_meshnode;
700
- if (m_animated_meshnode)
704
+ } else if (m_animated_meshnode) {
701
705
return m_animated_meshnode;
702
- if (m_wield_meshnode)
706
+ } else if (m_wield_meshnode) {
703
707
return m_wield_meshnode;
704
- if (m_spritenode)
708
+ } else if (m_spritenode) {
705
709
return m_spritenode;
710
+ }
706
711
return NULL ;
707
712
}
708
713
@@ -775,56 +780,47 @@ void GenericCAO::removeFromScene(bool permanent)
775
780
}
776
781
}
777
782
778
- if (m_meshnode)
779
- {
783
+ if (m_meshnode) {
780
784
m_meshnode->remove ();
781
785
m_meshnode->drop ();
782
786
m_meshnode = NULL ;
783
- }
784
- if (m_animated_meshnode)
785
- {
787
+ } else if (m_animated_meshnode) {
786
788
m_animated_meshnode->remove ();
787
789
m_animated_meshnode->drop ();
788
790
m_animated_meshnode = NULL ;
789
- }
790
- if (m_wield_meshnode)
791
- {
791
+ } else if (m_wield_meshnode) {
792
792
m_wield_meshnode->remove ();
793
793
m_wield_meshnode->drop ();
794
794
m_wield_meshnode = NULL ;
795
- }
796
- if (m_spritenode)
797
- {
795
+ } else if (m_spritenode) {
798
796
m_spritenode->remove ();
799
797
m_spritenode->drop ();
800
798
m_spritenode = NULL ;
801
799
}
802
- if (m_textnode)
803
- {
804
- m_textnode->remove ();
805
- m_textnode->drop ();
806
- m_textnode = NULL ;
800
+
801
+ if (m_nametag) {
802
+ m_gamedef->getCamera ()->removeNametag (m_nametag);
803
+ m_nametag = NULL ;
807
804
}
808
805
}
809
806
810
- void GenericCAO::addToScene (scene::ISceneManager *smgr, ITextureSource *tsrc,
811
- IrrlichtDevice *irr)
807
+ void GenericCAO::addToScene (scene::ISceneManager *smgr,
808
+ ITextureSource *tsrc, IrrlichtDevice *irr)
812
809
{
813
810
m_smgr = smgr;
814
811
m_irr = irr;
815
812
816
- if (getSceneNode () != NULL )
813
+ if (getSceneNode () != NULL ) {
817
814
return ;
815
+ }
818
816
819
817
m_visuals_expired = false ;
820
818
821
- if (!m_prop.is_visible )
819
+ if (!m_prop.is_visible ) {
822
820
return ;
821
+ }
823
822
824
- // video::IVideoDriver* driver = smgr->getVideoDriver();
825
-
826
- if (m_prop.visual == " sprite" )
827
- {
823
+ if (m_prop.visual == " sprite" ) {
828
824
infostream<<" GenericCAO::addToScene(): single_sprite" <<std::endl;
829
825
m_spritenode = smgr->addBillboardSceneNode (
830
826
NULL , v2f (1 , 1 ), v3f (0 ,0 ,0 ), -1 );
@@ -972,18 +968,9 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
972
968
973
969
scene::ISceneNode *node = getSceneNode ();
974
970
if (node && m_prop.nametag != " " && !m_is_local_player) {
975
- // Add a text node for showing the name
976
- gui::IGUIEnvironment* gui = irr->getGUIEnvironment ();
977
- std::wstring nametag_text = utf8_to_wide (m_prop.nametag );
978
- m_textnode = smgr->addTextSceneNode (gui->getSkin ()->getFont (),
979
- nametag_text.c_str (), m_prop.nametag_color , node);
980
- m_textnode->grab ();
981
- m_textnode->setPosition (v3f (0 , BS*1.1 , 0 ));
982
-
983
- // Enforce hiding nametag,
984
- // because if freetype is enabled, a grey
985
- // shadow can remain.
986
- m_textnode->setVisible (m_prop.nametag_color .getAlpha () > 0 );
971
+ // Add nametag
972
+ m_nametag = m_gamedef->getCamera ()->addNametag (node,
973
+ m_prop.nametag , m_prop.nametag_color );
987
974
}
988
975
989
976
updateNodePos ();
@@ -1785,12 +1772,8 @@ void GenericCAO::processMessage(const std::string &data)
1785
1772
// Deprecated, for backwards compatibility only.
1786
1773
readU8 (is); // version
1787
1774
m_prop.nametag_color = readARGB8 (is);
1788
- if (m_textnode != NULL ) {
1789
- m_textnode->setTextColor (m_prop.nametag_color );
1790
-
1791
- // Enforce hiding nametag,
1792
- // because if freetype is enabled, a grey shadow can remain.
1793
- m_textnode->setVisible (m_prop.nametag_color .getAlpha () > 0 );
1775
+ if (m_nametag != NULL ) {
1776
+ m_nametag->nametag_color = m_prop.nametag_color ;
1794
1777
}
1795
1778
}
1796
1779
}
0 commit comments