1 // Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
2 // Copyright (C) 2010 Winch Gate Property Limited
4 // This source file has been modified by the following contributors:
5 // Copyright (C) 2013 Laszlo KIS-ADAM (dfighter) <dfighter1985@gmail.com>
7 // This program is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Affero General Public License as
9 // published by the Free Software Foundation, either version 3 of the
10 // License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU Affero General Public License for more details.
17 // You should have received a copy of the GNU Affero General Public License
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #ifndef R2_DISPLAYER_VISUAL_SHAPE_H
21 #define R2_DISPLAYER_VISUAL_SHAPE_H
24 #include "displayer_visual.h"
25 #include "../interface_v3/group_map.h"
26 #include "instance_map_deco.h"
37 class UVisualCollisionEntity
;
45 // Display a scenario object with a 'Shape'
46 class CDisplayerVisualShape
: public CDisplayerVisual
, public CGroupMap::IDeco
49 NLMISC_DECLARE_CLASS(R2::CDisplayerVisualShape
);
51 CDisplayerVisualShape(const std::string
&shapeName
= "", float scale
= 1.f
, bool worldMapDisplay
= true);
53 ~CDisplayerVisualShape();
54 // Init from a lua table. Parms should contain 'ShapeName' as a string
55 virtual bool init(const CLuaObject
¶meters
);
59 virtual void onPreRender();
60 virtual void onPostRender();
61 virtual void onAttrModified(const std::string
&name
, sint32 index
);
62 virtual void onFocus(bool focused
);
63 virtual void onSelect(bool selected
);
65 virtual void onParentDisplayModeChanged();
68 // From ISelectableObject
69 virtual bool getLastClip() const;
70 virtual NLMISC::CAABBox
getSelectBox() const;
71 virtual float preciseIntersectionTest(const NLMISC::CVector
&worldRayStart
, const NLMISC::CVector
&worldRayDir
) const;
72 const NLMISC::CMatrix
&getInvertedMatrix() const;
73 virtual void snapToGround();
75 virtual NLMISC::CVector
evalLinkPoint(bool leader
= false);
77 // from CDisplayerVisual
78 void setDisplayMode(sint32 mode
);
80 // get current instance being displayed
81 NL3D::UInstance
&getMesh() { return _Instance
; }
85 std::string _ShapeName
;
87 mutable NLMISC::CMatrix _InvertedMatrix
;
90 bool _WorldMapDisplay
;
92 NL3D::UInstance _Instance
;
93 CInstanceMapDeco _MapDeco
;
94 bool _VisualSnapToGroundDone
;
96 NLMISC::CMatrix _BBoxMatrix
;
97 NL3D::UVisualCollisionEntity
*_VisualCollisionEntity
;
99 void drawBBox(NLMISC::CRGBA color
) const;
102 // from CDisplayerVisual
103 virtual void setActive(bool active
);
104 virtual bool getActive() const;
105 virtual void updateWorldPos();
106 // from CGroupMap::IDeco
107 virtual void onAdd(CGroupMap
&owner
);
108 virtual void onRemove(CGroupMap
&owner
);
109 virtual void onPreRender(CGroupMap
&owner
);
110 virtual void onUpdate(CGroupMap
&owner
);
112 void visualSnapToGround();
113 void updateMapDeco();
114 void deleteVisualCollisionEntity();