Global LoD_Dist_Lv0# = 32, LoD_Dist_Lv1# = 64, LoD_Dist_Lv2# = 128, LoD_Dist_Lv3# = 256, LoD_Dist_Lv4# = 512 Global LoD_Range# = 8 Type LoDEntity Field Pivot% = 0 ; Levels Field LoDs%[5] ; Temporary Values Field Visible%[5] Field Fade#[5] End Type Function LoD_Initialize(Dist_Range# = 8, Dist_Lv0# = 32, Dist_Lv1# = 64, Dist_Lv2# = 128, Dist_Lv3# = 256, Dist_Lv4# = 512) LoD_Range = Dist_Range ; Distance Limits LoD_Dist_Lv0 = Dist_Lv0 LoD_Dist_Lv1 = Dist_Lv1 LoD_Dist_Lv2 = Dist_Lv2 LoD_Dist_Lv3 = Dist_Lv3 LoD_Dist_Lv4 = Dist_Lv4 End Function Function LoD_Create.LoDEntity(Lv0, Lv1, Lv2, Lv3, Lv4) Local tInstance.LoDEntity = New LoDEntity tInstance\Pivot = CreatePivot() ; Copy Entities tInstance\LoDs[0] = CopyEntity(Lv0, tInstance\Pivot):HideEntity tInstance\LoDs[0] tInstance\LoDs[1] = CopyEntity(Lv1, tInstance\Pivot):HideEntity tInstance\LoDs[1] tInstance\LoDs[2] = CopyEntity(Lv2, tInstance\Pivot):HideEntity tInstance\LoDs[2] tInstance\LoDs[3] = CopyEntity(Lv3, tInstance\Pivot):HideEntity tInstance\LoDs[3] tInstance\LoDs[4] = CopyEntity(Lv4, tInstance\Pivot):HideEntity tInstance\LoDs[4] Return tInstance End Function Function LoD_EntityAlpha(tInstance.LoDEntity, Alpha#, Level=-1) If (Level = -1) Then EntityAlpha tInstance\LoDs[0], Alpha EntityAlpha tInstance\LoDs[1], Alpha EntityAlpha tInstance\LoDs[2], Alpha EntityAlpha tInstance\LoDs[3], Alpha EntityAlpha tInstance\LoDs[4], Alpha Else EntityAlpha tInstance\LoDs[Level], Alpha EndIf End Function Function LoD_EntityBlend(tInstance.LoDEntity, Mode%, Level=-1) If (Level = -1) Then EntityBlend tInstance\LoDs[0], Mode EntityBlend tInstance\LoDs[1], Mode EntityBlend tInstance\LoDs[2], Mode EntityBlend tInstance\LoDs[3], Mode EntityBlend tInstance\LoDs[4], Mode Else EntityBlend tInstance\LoDs[Level], Mode EndIf End Function Function LoD_EntityColor(tInstance.LoDEntity, Red#, Green#, Blue#, Level=-1) If (Level = -1) Then EntityColor tInstance\LoDs[0], Red, Green, Blue EntityColor tInstance\LoDs[1], Red, Green, Blue EntityColor tInstance\LoDs[2], Red, Green, Blue EntityColor tInstance\LoDs[3], Red, Green, Blue EntityColor tInstance\LoDs[4], Red, Green, Blue Else EntityColor tInstance\LoDs[Level], Red, Green, Blue EndIf End Function Function LoD_EntityFX(tInstance.LoDEntity, FX%, Level=-1) If (Level = -1) Then EntityFX tInstance\LoDs[0], FX EntityFX tInstance\LoDs[1], FX EntityFX tInstance\LoDs[2], FX EntityFX tInstance\LoDs[3], FX EntityFX tInstance\LoDs[4], FX Else EntityFX tInstance\LoDs[Level], FX EndIf End Function Function LoD_EntityShininess(tInstance.LoDEntity, Shininess#, Level=-1) If (Level = -1) Then EntityShininess tInstance\LoDs[0], Shininess EntityShininess tInstance\LoDs[1], Shininess EntityShininess tInstance\LoDs[2], Shininess EntityShininess tInstance\LoDs[3], Shininess EntityShininess tInstance\LoDs[4], Shininess Else EntityShininess tInstance\LoDs[Level], Shininess EndIf End Function Function LoD_EntityTexture(tInstance.LoDEntity, Texture%, Frame%=0, Index%=0, Level=-1) If (Level = -1) Then EntityTexture tInstance\LoDs[0], Texture, Frame, Index EntityTexture tInstance\LoDs[1], Texture, Frame, Index EntityTexture tInstance\LoDs[2], Texture, Frame, Index EntityTexture tInstance\LoDs[3], Texture, Frame, Index EntityTexture tInstance\LoDs[4], Texture, Frame, Index Else EntityTexture tInstance\LoDs[Level], Texture, Frame, Index EndIf End Function Function LoD_EntityLoD(tInstance.LoDEntity) For Level = 0 To 4 If (tInstance\Visible[Level]) Then Return Level Next Return 5 End Function Function LoD_Update(eCamera, bDoFadeOut=False) For tInstance.LoDEntity = Each LoDEntity Local Dist# = EntityDistance(eCamera, tInstance\Pivot) ; LoD Level 1 (Very High) If (Dist > 0) And ((bDoFadeOut And (Dist < LoD_Dist_Lv0 + LoD_Range)) Or (bDoFadeOut = False And (Dist < LoD_Dist_Lv0))) Then If tInstance\Visible[0] = False Then tInstance\Visible[0] = True:ShowEntity tInstance\LoDs[0] If bDoFadeOut = True And (Dist > LoD_Dist_Lv0) Then EntityAlpha tInstance\LoDs[0], 1.0 - (Dist - LoD_Dist_Lv0) / LoD_Range Else If tInstance\Visible[0] = True Then tInstance\Visible[0] = False:HideEntity tInstance\LoDs[0] EndIf ; LoD Level 2 (High) If (Dist > LoD_Dist_Lv0) And ((bDoFadeOut And (Dist < LoD_Dist_Lv1 + LoD_Range)) Or (bDoFadeOut = False And (Dist < LoD_Dist_Lv1))) Then If tInstance\Visible[1] = False Then tInstance\Visible[1] = True:ShowEntity tInstance\LoDs[1] If bDoFadeOut = True And (Dist > LoD_Dist_Lv1) Then EntityAlpha tInstance\LoDs[1], 1.0 - (Dist - LoD_Dist_Lv1) / LoD_Range Else If tInstance\Visible[1] = True Then tInstance\Visible[1] = False:HideEntity tInstance\LoDs[1] EndIf ; LoD Level 3 (Normal) If (Dist > LoD_Dist_Lv1) And ((bDoFadeOut And (Dist < LoD_Dist_Lv2 + LoD_Range)) Or (bDoFadeOut = False And (Dist < LoD_Dist_Lv2))) Then If tInstance\Visible[2] = False Then tInstance\Visible[2] = True:ShowEntity tInstance\LoDs[2] If bDoFadeOut = True And (Dist > LoD_Dist_Lv2) Then EntityAlpha tInstance\LoDs[2], 1.0 - (Dist - LoD_Dist_Lv2) / LoD_Range Else If tInstance\Visible[2] = True Then tInstance\Visible[2] = False:HideEntity tInstance\LoDs[2] EndIf ; LoD Level 4 (Low) If (Dist > LoD_Dist_Lv2) And ((bDoFadeOut And (Dist < LoD_Dist_Lv3 + LoD_Range)) Or (bDoFadeOut = False And (Dist < LoD_Dist_Lv3))) Then If tInstance\Visible[3] = False Then tInstance\Visible[3] = True:ShowEntity tInstance\LoDs[3] If bDoFadeOut = True And (Dist > LoD_Dist_Lv3) Then EntityAlpha tInstance\LoDs[3], 1.0 - (Dist - LoD_Dist_Lv3) / LoD_Range Else If tInstance\Visible[3] = True Then tInstance\Visible[3] = False:HideEntity tInstance\LoDs[3] EndIf ; LoD Level 5 (Very Low) (Usually a Sprite) If (Dist > LoD_Dist_Lv3) And ((bDoFadeOut And (Dist < LoD_Dist_Lv4 + LoD_Range)) Or (bDoFadeOut = False And (Dist < LoD_Dist_Lv4))) Then If tInstance\Visible[4] = False Then tInstance\Visible[4] = True:ShowEntity tInstance\LoDs[4] If bDoFadeOut = True And (Dist > LoD_Dist_Lv4) Then EntityAlpha tInstance\LoDs[4], 1.0 - (Dist - LoD_Dist_Lv4) / LoD_Range Else If tInstance\Visible[4] = True Then tInstance\Visible[4] = False:HideEntity tInstance\LoDs[4] EndIf Next End Function