Premier commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
// Stolen here https://godotshaders.com/shader/parallax-mapping-2/
|
||||
shader_type spatial;
|
||||
render_mode unshaded;
|
||||
|
||||
uniform sampler2D noise_texture;
|
||||
uniform sampler2D gradient;
|
||||
|
||||
group_uniforms depth;
|
||||
uniform int layers : hint_range(0, 64, 1) = 8;
|
||||
uniform float depth_amount = 1.0;
|
||||
uniform float fade_amount : hint_range(0.0, 16.0, 0.01) = 1.0;
|
||||
|
||||
vec2 to_polar(vec2 uv) {
|
||||
uv = uv * 2.0 - 1.0;
|
||||
float radius = length(uv);
|
||||
float angle = atan(uv.x, uv.y);
|
||||
return vec2(angle / PI, radius) / 2.0;
|
||||
}
|
||||
|
||||
float overlay(float a, float b){
|
||||
float limit = step(0.5, a);
|
||||
return mix(2.0 * a * b, 1.0 - 2.0 * (1.0 - a) * (1.0 - b), limit);
|
||||
}
|
||||
|
||||
vec2 parallax(float depth, vec3 n, vec3 t, vec3 v) {
|
||||
vec3 normal = normalize(n);
|
||||
vec3 tangent = normalize(t);
|
||||
vec3 bitangent = cross(normal, tangent);
|
||||
vec3 view = normalize(v);
|
||||
vec3 view_tangent = vec3(dot(view, tangent), dot(view, bitangent), dot(view, normal));
|
||||
vec2 offset = (view_tangent.xy / max(view_tangent.z, 0.001)) * depth;
|
||||
offset = vec2(-offset.x, offset.y);
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
float value = 0.0;
|
||||
|
||||
for(int i = 0; i < layers; i++){
|
||||
float t = float(i) / float(layers);
|
||||
float depth = t * depth_amount;
|
||||
|
||||
vec2 circle_uv = UV + parallax(depth, NORMAL, TANGENT, VIEW);
|
||||
float circle = length(circle_uv * 2.0 - 1.0);
|
||||
|
||||
circle = clamp((circle - 0.2) / 0.8, 0.0, 1.0);
|
||||
|
||||
vec2 noise_uv = UV + parallax(depth, NORMAL, TANGENT, VIEW);
|
||||
noise_uv = to_polar(noise_uv);
|
||||
noise_uv.y += TIME * 0.1;
|
||||
noise_uv += t;
|
||||
float noise = texture(noise_texture, noise_uv).r;
|
||||
|
||||
float layer_value = overlay(circle, noise);
|
||||
layer_value = step(0.5, layer_value);
|
||||
|
||||
layer_value *= pow(1.0 - t, fade_amount);
|
||||
|
||||
value = max(value, layer_value);
|
||||
}
|
||||
vec4 color = texture(gradient, vec2(value));
|
||||
ALBEDO = color.xyz;
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://boy8idm1nge7n
|
||||
@@ -0,0 +1,45 @@
|
||||
extends Node3D
|
||||
|
||||
const SPAWN_RANDOM_POSITION_RANGE = 10
|
||||
const SPAWN_RANDOM_ANGLE_RANGE = PI/8
|
||||
|
||||
@export var delay : float = 5.
|
||||
@export var duration : float = 10.
|
||||
@export var spawn_rate : float = 30.
|
||||
@export var horde_manager : AlienHordeManager
|
||||
|
||||
var current_frame : int = 0
|
||||
|
||||
var aliens : Array[Alien] = []
|
||||
var clusters := []
|
||||
var clusters_coords : Array[Vector2i] = []
|
||||
|
||||
var time_elapsed = 0.
|
||||
var time_spawning = 0.
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
if delay > 0:
|
||||
delay -= delta
|
||||
else:
|
||||
spawn_aliens(delta)
|
||||
|
||||
func spawn_aliens(delta):
|
||||
if time_elapsed < duration:
|
||||
time_elapsed += delta
|
||||
time_spawning += delta
|
||||
|
||||
for i in range(roundi(spawn_rate * time_spawning)):
|
||||
time_spawning -= 1/spawn_rate
|
||||
spawn_alien()
|
||||
|
||||
func spawn_alien() -> Alien:
|
||||
var alien_position : Vector3 = Vector3(
|
||||
%SpawnPoint.global_position.x + randf_range(-SPAWN_RANDOM_POSITION_RANGE, SPAWN_RANDOM_POSITION_RANGE),
|
||||
0,
|
||||
%SpawnPoint.global_position.z + randf_range(-SPAWN_RANDOM_POSITION_RANGE, SPAWN_RANDOM_POSITION_RANGE)
|
||||
)
|
||||
|
||||
var alien_rotation : float = rotation.y + randf_range(-SPAWN_RANDOM_ANGLE_RANGE, SPAWN_RANDOM_ANGLE_RANGE)
|
||||
|
||||
return horde_manager.spawn_alien(alien_position, alien_rotation)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bkljflytckumm
|
||||
@@ -0,0 +1,77 @@
|
||||
[gd_scene format=3 uid="uid://c50w214ctcjc7"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://boy8idm1nge7n" path="res://objects/spawner/assets/shaders/portal.gdshader" id="1_jjtoq"]
|
||||
[ext_resource type="Script" uid="uid://bkljflytckumm" path="res://objects/spawner/spawner.gd" id="1_y68vg"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_s17ww"]
|
||||
resource_name = "Appear"
|
||||
length = 0.4
|
||||
|
||||
[sub_resource type="Animation" id="Animation_y68vg"]
|
||||
length = 0.001
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_d6t07"]
|
||||
_data = {
|
||||
&"Appear": SubResource("Animation_s17ww"),
|
||||
&"RESET": SubResource("Animation_y68vg")
|
||||
}
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_d6t07"]
|
||||
radius = 0.4
|
||||
height = 0.8
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_y68vg"]
|
||||
offsets = PackedFloat32Array(0, 0.043333333, 0.98333335)
|
||||
colors = PackedColorArray(0, 0, 0, 1, 0.22352941, 0.03529412, 0.2784314, 1, 0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_fx0gv"]
|
||||
gradient = SubResource("Gradient_y68vg")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_fcnqv"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_vf7ls"]
|
||||
width = 300
|
||||
height = 300
|
||||
noise = SubResource("FastNoiseLite_fcnqv")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yf5fn"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_jjtoq")
|
||||
shader_parameter/noise_texture = SubResource("NoiseTexture2D_vf7ls")
|
||||
shader_parameter/gradient = SubResource("GradientTexture1D_fx0gv")
|
||||
shader_parameter/layers = 8
|
||||
shader_parameter/depth_amount = 1.34
|
||||
shader_parameter/fade_amount = 1.08999997563632
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_w02y4"]
|
||||
radius = 0.8
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ahe7j"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0.10980392, 0.050980393, 0.12941177, 1)
|
||||
|
||||
[node name="Spawner" type="Node3D" unique_id=695896823]
|
||||
script = ExtResource("1_y68vg")
|
||||
duration = 1.0
|
||||
spawn_rate = 200.0
|
||||
|
||||
[node name="SpawnPoint" type="Node3D" parent="." unique_id=949382199]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1684067, 0, 0)
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=2140330107]
|
||||
libraries/ = SubResource("AnimationLibrary_d6t07")
|
||||
autoplay = &"Appear"
|
||||
|
||||
[node name="Aliens" type="Node" parent="." unique_id=1083817569]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=1379665069]
|
||||
transform = Transform3D(26.585, 0, 0, 0, 26.585, 0, 0, 0, 26.585, 0, 1.429512, 2.0852394)
|
||||
mesh = SubResource("SphereMesh_d6t07")
|
||||
surface_material_override/0 = SubResource("ShaderMaterial_yf5fn")
|
||||
|
||||
[node name="MeshInstance3D3" type="MeshInstance3D" parent="." unique_id=655614315]
|
||||
transform = Transform3D(15.39, 0, 0, 0, -6.727183e-07, 15.39, 0, -15.39, -6.727183e-07, -0.12734604, 1.4227005, 3.4225216)
|
||||
mesh = SubResource("SphereMesh_w02y4")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_ahe7j")
|
||||
Reference in New Issue
Block a user