OverviewFilesCommitsIssuesDocsReleasesPeers

godot-witchy_world_demo / addons / jc.godot.time-of-day / Code / Sky / SkydomeResources.gd

111 lines · gd ref:
tool
class_name SkydomeResources extends Resource 
"""========================================================
°                         TimeOfDay.
°                   ======================
°
°   Category: Sky.
°   -----------------------------------------------------
°   Description:
°       Skydome resources.
°   -----------------------------------------------------
°   Copyright:
°               J. Cuellar 2021. MIT License.
°                   See: LICENSE File.
========================================================"""

# Mesh.
var _skydome_mesh:= SphereMesh.new()
var _clouds_cumulus_mesh:= SphereMesh.new()
var _full_screen_quad:= QuadMesh.new()

# Materials.
var sky_material:= ShaderMaterial.new()
var fog_material:= ShaderMaterial.new()
var moon_material:= ShaderMaterial.new()
var clouds_cumulus_material:= ShaderMaterial.new()

# Shaders.
const _sky_shader: Shader = preload("res://addons/jc.godot.time-of-day-common/Shaders/Sky.shader")
const _pv_sky_shader: Shader = preload("res://addons/jc.godot.time-of-day-common/Shaders/PerVertexSky.shader")
const _atm_fog_shader: Shader = preload("res://addons/jc.godot.time-of-day-common/Shaders/AtmFog.shader")
const _moon_shader: Shader = preload("res://addons/jc.godot.time-of-day-common/Shaders/SimpleMoon.shader")
const _clouds_cumulus_shader: Shader = preload("res://addons/jc.godot.time-of-day-common/Shaders/CloudsCumulus.shader")

# Scenes.
const _moon_render: PackedScene = preload("res://addons/jc.godot.time-of-day-common/Scenes/Moon/MoonRender.tscn")

# Textures.
const _moon_texture: Texture = preload("res://addons/jc.godot.time-of-day-common/Assets/ThirdParty/Graphics/Textures/MoonMap/MoonMap.png")
const _background_texture: Texture = preload("res://addons/jc.godot.time-of-day-common/Assets/ThirdParty/Graphics/Textures/MilkyWay/Milkyway.jpg")
const _stars_field_texture: Texture = preload("res://addons/jc.godot.time-of-day-common/Assets/ThirdParty/Graphics/Textures/MilkyWay/StarField.jpg")
const _sun_moon_curve_fade: Curve = preload("res://addons/jc.godot.time-of-day-common/Resources/SunMoonLightFade.tres")
const _stars_field_noise: Texture = preload("res://addons/jc.godot.time-of-day-common/Assets/MyAssets/Graphics/Textures/noise.jpg")
const _clouds_texture: Texture = preload("res://addons/jc.godot.time-of-day-common/Resources/SNoise.tres")
const _clouds_cumulus_texture: Texture = preload("res://addons/jc.godot.time-of-day-common/Assets/MyAssets/Graphics/Textures/noiseClouds.png")

enum SkydomeMeshQuality{
	Low, High
}

enum SkyShaderQuality{
	PerPixel, PerVertex
}

## Sky

func __change_skydome_mesh_quality(quality: int) -> void:
	if quality == SkydomeMeshQuality.Low:
		_skydome_mesh.radial_segments = 16
		_skydome_mesh.rings = 8
	else:
		_skydome_mesh.radial_segments = 64
		_skydome_mesh.rings = 64
	
func __set_sky_quality(quality: int) -> void:
	if quality == SkyShaderQuality.PerPixel:
		sky_material.shader = _sky_shader
		__change_skydome_mesh_quality(SkydomeMeshQuality.Low)
	else:
		sky_material.shader = _pv_sky_shader
		__change_skydome_mesh_quality(SkydomeMeshQuality.High)

func setup_sky_resources(quality: int) -> void:
	__set_sky_quality(quality)

func setup_sky_render_priority(value: int) -> void:
	sky_material.render_priority = value

func setup_full_sky_resources(quality: int, renderPriority: int) -> void:
	__set_sky_quality(quality)
	setup_sky_render_priority(renderPriority)


## Moon.
func setup_moon_resources():
	moon_material.shader = _moon_shader
	moon_material.setup_local_to_scene()

## Fog.
func setup_fog_resources():
	var size: Vector2
	size.x = 2.0
	size.y = 2.0
	_full_screen_quad.size = size
	fog_material.shader = _atm_fog_shader
	setup_fog_render_priority(127)

func setup_fog_render_priority(value: int):
	fog_material.render_priority = value

## Clouds Cumulus
func setup_clouds_cumulus_resources(renderPriority: int):
	_clouds_cumulus_mesh.radial_segments = 8
	_clouds_cumulus_mesh.rings = 8
	clouds_cumulus_material.shader = _clouds_cumulus_shader
	setup_clouds_cumulus_priority(renderPriority)


func setup_clouds_cumulus_priority(value: int):
	clouds_cumulus_material.render_priority = value