''' ''' A class to handle entity lighting. ''' Public Class Lighting #Region "Enums" #End Region #Region "Fields and Constants" #End Region #Region "Properties" #End Region #Region "Delegates" #End Region #Region "Constructors" #End Region #Region "Methods" ''' ''' Updates the lighting values of a BasicEffect instance. ''' ''' A reference to the BasicEffect that should receive the lighting update. ''' Checks, if the lighting update on the effect should be forced. Public Shared Sub UpdateLighting(ByRef refEffect As BasicEffect, Optional ByVal ForceLighting As Boolean = False) If Core.GameOptions.LightingEnabled = True Or ForceLighting = True Then ' Only update the lighting if either the currently loaded level instance allows this, or it's getting forced. ' Set default parameters: refEffect.LightingEnabled = True ' Enable lighting (gets disabled later, if not used) refEffect.PreferPerPixelLighting = True ' Yes. Please. refEffect.SpecularPower = 2000.0F ' LightType results: ' 0 = Night ' 1 = Morning ' 2 = Day ' 3 = Evening ' Anything higher than 3 = No Lighting Select Case GetLightingType() Case 0 ' Night refEffect.AmbientLightColor = New Vector3(0.8F) refEffect.DirectionalLight0.DiffuseColor = New Vector3(0.4F, 0.4F, 0.6F) refEffect.DirectionalLight0.Direction = Vector3.Normalize(New Vector3(-1.0F, 0.0F, 1.0F)) refEffect.DirectionalLight0.SpecularColor = New Vector3(0.0F) refEffect.DirectionalLight0.Enabled = True Case 1 ' Morning refEffect.AmbientLightColor = New Vector3(0.7F) refEffect.DirectionalLight0.DiffuseColor = Color.Orange.ToVector3() refEffect.DirectionalLight0.Direction = Vector3.Normalize(New Vector3(1.0F, -1.0F, 1.0F)) refEffect.DirectionalLight0.SpecularColor = New Vector3(0.0F) refEffect.DirectionalLight0.Enabled = True Case 2 ' Day refEffect.AmbientLightColor = New Vector3(1.0F) refEffect.DirectionalLight0.DiffuseColor = New Vector3(-0.3F) refEffect.DirectionalLight0.Direction = Vector3.Normalize(New Vector3(1.0F, 1.0F, 1.0F)) refEffect.DirectionalLight0.SpecularColor = New Vector3(0.0F) refEffect.DirectionalLight0.Enabled = True Case 3 ' Evening refEffect.AmbientLightColor = New Vector3(1.0F) refEffect.DirectionalLight0.DiffuseColor = New Vector3(-0.45F) refEffect.DirectionalLight0.Direction = Vector3.Normalize(New Vector3(1.0F, 0.0F, 1.0F)) refEffect.DirectionalLight0.SpecularColor = New Vector3(0.0F) refEffect.DirectionalLight0.Enabled = True Case Else 'Disable lighting on the effect refEffect.LightingEnabled = False End Select Else ' Disable lighting if the effect isn't supposed to have light. refEffect.LightingEnabled = False End If End Sub Public Shared Function GetLightingType() As Integer Dim LightType As Integer = CInt(World.GetTime()) ' Determine default lighting type by the world time. ' Level's lighttype values: ' 0 = Get lighting from the current time of day. ' 1 = Disable lighting ' 2 = Always Night ' 3 = Always Morning ' 4 = Always Day ' 5 = Always Evening If Screen.Level.LightingType = 1 Then ' If the level lighting type is 1, disable lighting (set index to 99). LightType = 99 End If If Screen.Level.LightingType > 1 And Screen.Level.LightingType < 6 Then ' If the level's lighting type is 2, 3, 4 or 5, set to the respective LightType (set time of day). LightType = Screen.Level.LightingType - 2 End If Return LightType End Function Public Shared Function GetLightingColor(ByVal LightType As Integer) As Vector3 Select Case LightType Case 0 Return New Vector3(0.4F, 0.4F, 0.6F) Case 1 Return Color.Orange.ToVector3() Case 2 Return New Vector3(-0.3F) Case 3 Return New Vector3(-0.45F) End Select End Function #End Region End Class