Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct EdEntMesh : EDGUILayoutRow
- {
- FINLINE void Acquire(){ ++m_refcount; }
- FINLINE void Release(){ --m_refcount; if( m_refcount <= 0 ) delete this; }
- int32_t m_refcount;
- EdEntMesh() :
- m_refcount( 0 ),
- m_group( true, "Mesh properties" ),
- m_ctlPos( V3(0), 2, V3(-8192), V3(8192) ),
- m_ctlAngles( V3(0), 2, V3(0), V3(360) ),
- m_ctlScaleUni( 1, 2, 0.01f, 100.0f ),
- m_ctlScaleSep( V3(1), 2, V3(0.01f), V3(100.0f) )
- {
- tyname = "mesh";
- m_group.caption = "Mesh properties";
- m_ctlPos.caption = "Position";
- m_ctlAngles.caption = "Rotation";
- m_ctlScaleUni.caption = "Scale (uniform)";
- m_ctlScaleSep.caption = "Scale (separate)";
- m_group.Add( &m_ctlPos );
- m_group.Add( &m_ctlAngles );
- m_group.Add( &m_ctlScaleUni );
- m_group.Add( &m_ctlScaleSep );
- Add( &m_group );
- }
- const Vec3& Pos() const { return m_ctlPos.m_value; }
- const Vec3& RotAngles() const { return m_ctlAngles.m_value; }
- float ScaleUni() const { return m_ctlScaleUni.m_value; }
- const Vec3& ScaleSep() const { return m_ctlScaleSep.m_value; }
- void SetPosition( const Vec3& pos ){ m_ctlPos.SetValue( pos ); }
- EdEntMesh& operator = ( const EdEntMesh& o )
- {
- m_ctlPos.SetValue( o.Pos() );
- m_ctlAngles.SetValue( o.RotAngles() );
- m_ctlScaleUni.SetValue( o.ScaleUni() );
- m_ctlScaleSep.SetValue( o.ScaleSep() );
- return *this;
- }
- virtual int OnEvent( EDGUIEvent* e )
- {
- switch( e->type )
- {
- case EDGUI_EVENT_PROPEDIT:
- RegenerateMesh();
- break;
- }
- return EDGUILayoutRow::OnEvent( e );
- }
- void RegenerateMesh()
- {
- if( !cached_mesh )
- cached_mesh = GR_GetMesh( "meshes/test_table.ssm" );
- if( !cached_meshinst )
- {
- cached_meshinst = g_EdScene->CreateMeshInstance();
- cached_meshinst->mesh = cached_mesh;
- cached_meshinst->textures[ 0 ] = GR_GetTexture( "textures/metal0.png" );
- }
- cached_meshinst->matrix = Mat4::CreateSRT( m_ctlScaleSep.m_value * m_ctlScaleUni.m_value, DEG2RAD( m_ctlAngles.m_value ), m_ctlPos.m_value );
- }
- bool RayIntersect( const Vec3& rpos, const Vec3& rdir, float outdst[1] )
- {
- return RaySphereIntersect( rpos, rdir, m_ctlPos.m_value, 1, outdst );
- }
- EDGUIGroup m_group;
- EDGUIPropVec3 m_ctlPos;
- EDGUIPropVec3 m_ctlAngles;
- EDGUIPropFloat m_ctlScaleUni;
- EDGUIPropVec3 m_ctlScaleSep;
- MeshHandle cached_mesh;
- MeshInstHandle cached_meshinst;
- };
- typedef Handle< EdEntMesh > EdEntMeshHandle;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement