P3D-Legacy/P3D/Entites/Enviroment/ModelEntity.vb

74 lines
2.6 KiB
VB.net

Public Class ModelEntity
Inherits Entity
'A private copy of a model, because who needs Inherhitance or OO in general.
'Just... Microsoft... Why make the Model class NotInheritable
Private _model As Model
Public Overrides Sub Initialize()
MyBase.Initialize()
If ModelManager.ModelExist(Me.AdditionalValue) = True Then
Me._model = ModelManager.GetModel(Me.AdditionalValue)
End If
Me.NeedsUpdate = True
ApplyEffect()
End Sub
Public Sub LoadModel(ByVal m As String)
Me._model = ModelManager.GetModel(m)
Me.AdditionalValue = m
ApplyEffect()
End Sub
Private Sub ApplyEffect()
If Not _model Is Nothing Then
For Each mesh As ModelMesh In Me._model.Meshes
For Each part As ModelMeshPart In mesh.MeshParts
If part.Effect.GetType().Name.ToLower() = Screen.Effect.GetType().Name.ToLower() Then
With CType(part.Effect, BasicEffect)
Lighting.UpdateLighting(CType(part.Effect, BasicEffect), True)
.DiffuseColor = Screen.Effect.DiffuseColor
If Not Screen.Level.World Is Nothing Then
If Screen.Level.World.EnvironmentType = P3D.World.EnvironmentTypes.Outside Then
.DiffuseColor *= SkyDome.GetDaytimeColor(True).ToVector3()
End If
End If
.FogEnabled = True
.FogColor = Screen.Effect.FogColor
.FogEnd = Screen.Effect.FogEnd
.FogStart = Screen.Effect.FogStart
End With
End If
Next
Next
End If
End Sub
Public Overrides Sub Update()
ViewBox = New BoundingBox(
Vector3.Transform(New Vector3(-1, -1, -1), Matrix.CreateScale(viewBoxScale) * Matrix.CreateTranslation(Position)),
Vector3.Transform(New Vector3(1, 1, 1), Matrix.CreateScale(viewBoxScale) * Matrix.CreateTranslation(Position)))
ApplyEffect()
End Sub
Public Overrides Sub Render()
If Visible = True Then
If Not _model Is Nothing Then
_model.Draw(Me.World, Screen.Camera.View, Screen.Camera.Projection)
End If
If drawViewBox = True Then
BoundingBoxRenderer.Render(ViewBox, Core.GraphicsDevice, Screen.Camera.View, Screen.Camera.Projection, Color.Red)
End If
End If
End Sub
End Class