Initial commit
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
# Normalize EOL for all files that Git considers text files.
|
||||||
|
* text=auto eol=lf
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Godot 4+ specific ignores
|
||||||
|
.godot/
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b5oukegnirc4m"
|
||||||
|
path="res://.godot/imported/Icon.png-33e63688031d53466d4d656c73cf10ca.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Icon.png"
|
||||||
|
dest_files=["res://.godot/imported/Icon.png-33e63688031d53466d4d656c73cf10ca.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
class_name PlatformData
|
||||||
|
|
||||||
|
const vertices = [
|
||||||
|
Vector3(-1, 0, -1),
|
||||||
|
Vector3(1, 0, -1),
|
||||||
|
Vector3(1, 0.2, -1),
|
||||||
|
Vector3(-1, 0.2, -1),
|
||||||
|
Vector3(-1, 0, 1),
|
||||||
|
Vector3(1, 0, 1),
|
||||||
|
Vector3(1, 0.2, 1),
|
||||||
|
Vector3(-1, 0.2, 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
const triangles = [
|
||||||
|
[3, 7, 2, 6],
|
||||||
|
[0, 3, 1, 2],
|
||||||
|
[5, 6, 4, 7],
|
||||||
|
[1, 5, 0, 4],
|
||||||
|
[4, 7, 0, 3],
|
||||||
|
[1, 2, 5, 6]
|
||||||
|
]
|
||||||
|
|
||||||
|
const normals = [
|
||||||
|
Vector3(0, 0, 1),
|
||||||
|
Vector3(0, -1, 0),
|
||||||
|
Vector3(0, 1, 0),
|
||||||
|
Vector3(0, 0, -1),
|
||||||
|
Vector3(-1, 0, 0),
|
||||||
|
Vector3(1, 0, 0)
|
||||||
|
]
|
||||||
|
|
||||||
|
const color = [
|
||||||
|
Color(0.8705, 0.7254, 0.5254),
|
||||||
|
Color(0.9294, 0.3019, 0.4313),
|
||||||
|
Color(0.8588, 0.4235, 0.8666)
|
||||||
|
]
|
||||||
|
|
||||||
|
static func defaultMat():
|
||||||
|
var tempMaterial = StandardMaterial3D.new()
|
||||||
|
tempMaterial.roughness = 1
|
||||||
|
tempMaterial.specular_mode = BaseMaterial3D.SPECULAR_DISABLED
|
||||||
|
tempMaterial.metallic = 0
|
||||||
|
tempMaterial.metallic_specular = 0
|
||||||
|
return tempMaterial
|
||||||
|
|
||||||
|
static func material1():
|
||||||
|
var tempMaterial = defaultMat()
|
||||||
|
tempMaterial.albedo_color = color[0]
|
||||||
|
return tempMaterial
|
||||||
|
|
||||||
|
static func material2():
|
||||||
|
var tempMaterial = defaultMat()
|
||||||
|
tempMaterial.albedo_color = color[1]
|
||||||
|
return tempMaterial
|
||||||
|
|
||||||
|
static func material3():
|
||||||
|
var tempMaterial = defaultMat()
|
||||||
|
tempMaterial.albedo_color = color[2]
|
||||||
|
return tempMaterial
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bj5w0ki1au4jr"
|
||||||
|
path.s3tc="res://.godot/imported/Sky.png-8c43aacd3d620d81964b518cb41623f6.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://Sky.png"
|
||||||
|
dest_files=["res://.godot/imported/Sky.png-8c43aacd3d620d81964b518cb41623f6.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 949 B |
@@ -0,0 +1,37 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://kqmcbc0qwii1"
|
||||||
|
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://icon.svg"
|
||||||
|
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
svg/scale=1.0
|
||||||
|
editor/scale_with_editor_scale=false
|
||||||
|
editor/convert_colors_with_editor_theme=false
|
||||||
+172
@@ -0,0 +1,172 @@
|
|||||||
|
extends MeshInstance3D
|
||||||
|
|
||||||
|
var isActive = false
|
||||||
|
var inMenu = false
|
||||||
|
|
||||||
|
var randomMaterial : int
|
||||||
|
var randomAxis : int
|
||||||
|
var last : Node3D
|
||||||
|
var vertices : Array
|
||||||
|
var newVerts : Array
|
||||||
|
var speed = 2.0
|
||||||
|
var score = 1
|
||||||
|
|
||||||
|
const maxMoveDistance = 3.0
|
||||||
|
var velocity : Vector3
|
||||||
|
var cam : Camera3D
|
||||||
|
|
||||||
|
var labelScore : Label
|
||||||
|
var rng = RandomNumberGenerator.new()
|
||||||
|
|
||||||
|
func calculate_randoms():
|
||||||
|
randomMaterial = rng.randi_range(0, 2)
|
||||||
|
randomAxis = rng.randi_range(0, 1)
|
||||||
|
|
||||||
|
if last != null:
|
||||||
|
while randomMaterial == last.randomMaterial:
|
||||||
|
randomMaterial = rng.randi_range(0, 2)
|
||||||
|
while randomAxis == last.randomAxis:
|
||||||
|
randomAxis = rng.randi_range(0, 1)
|
||||||
|
if randomAxis == 0:
|
||||||
|
velocity.z = 0
|
||||||
|
velocity.x = speed
|
||||||
|
else:
|
||||||
|
velocity.z = speed
|
||||||
|
velocity.x = 0
|
||||||
|
|
||||||
|
func rebuild_mesh(vertTemplate):
|
||||||
|
var tempVertices = []
|
||||||
|
|
||||||
|
var st = SurfaceTool.new()
|
||||||
|
st.begin(Mesh.PRIMITIVE_TRIANGLES)
|
||||||
|
match randomMaterial:
|
||||||
|
0:
|
||||||
|
st.set_material(PlatformData.material1())
|
||||||
|
1:
|
||||||
|
st.set_material(PlatformData.material2())
|
||||||
|
2:
|
||||||
|
st.set_material(PlatformData.material3())
|
||||||
|
|
||||||
|
var index = 0
|
||||||
|
for i in range(0, 6):
|
||||||
|
st.set_uv(Vector2(0, 0))
|
||||||
|
st.set_normal(PlatformData.normals[i])
|
||||||
|
st.add_vertex(vertTemplate[PlatformData.triangles[i][0]])
|
||||||
|
st.set_uv(Vector2(0, 1))
|
||||||
|
st.set_normal(PlatformData.normals[i])
|
||||||
|
st.add_vertex(vertTemplate[PlatformData.triangles[i][1]])
|
||||||
|
st.set_uv(Vector2(1, 1))
|
||||||
|
st.set_normal(PlatformData.normals[i])
|
||||||
|
st.add_vertex(vertTemplate[PlatformData.triangles[i][2]])
|
||||||
|
st.set_uv(Vector2(1, 0))
|
||||||
|
st.set_normal(PlatformData.normals[i])
|
||||||
|
st.add_vertex(vertTemplate[PlatformData.triangles[i][3]])
|
||||||
|
|
||||||
|
tempVertices.append(vertTemplate[PlatformData.triangles[i][0]])
|
||||||
|
tempVertices.append(vertTemplate[PlatformData.triangles[i][1]])
|
||||||
|
tempVertices.append(vertTemplate[PlatformData.triangles[i][2]])
|
||||||
|
tempVertices.append(vertTemplate[PlatformData.triangles[i][3]])
|
||||||
|
|
||||||
|
st.add_index(index + 2)
|
||||||
|
st.add_index(index + 3)
|
||||||
|
st.add_index(index + 1)
|
||||||
|
st.add_index(index + 2)
|
||||||
|
st.add_index(index + 1)
|
||||||
|
st.add_index(index + 0)
|
||||||
|
|
||||||
|
index += 4
|
||||||
|
|
||||||
|
mesh = st.commit()
|
||||||
|
vertices = tempVertices
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
if name == "Platform1":
|
||||||
|
isActive = true
|
||||||
|
if isActive:
|
||||||
|
last = %Base
|
||||||
|
if not inMenu and name == "Platform1":
|
||||||
|
cam = %Camera3D
|
||||||
|
labelScore = %Score
|
||||||
|
|
||||||
|
calculate_randoms()
|
||||||
|
rebuild_mesh(PlatformData.vertices)
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
if not isActive:
|
||||||
|
return
|
||||||
|
|
||||||
|
if abs(position.x) >= maxMoveDistance || abs(position.z) >= maxMoveDistance:
|
||||||
|
velocity.x *= -1
|
||||||
|
velocity.z *= -1
|
||||||
|
|
||||||
|
translate(velocity * delta)
|
||||||
|
|
||||||
|
if Input.is_action_just_pressed("Click") and not inMenu:
|
||||||
|
isActive = false
|
||||||
|
cam.translate(Vector3(0, 0.1, 0))
|
||||||
|
|
||||||
|
var otherVerts = last.vertices
|
||||||
|
var _newVerts = []
|
||||||
|
|
||||||
|
if len(last.newVerts) == 0:
|
||||||
|
_newVerts = PlatformData.vertices.duplicate()
|
||||||
|
else:
|
||||||
|
_newVerts = last.newVerts.duplicate()
|
||||||
|
|
||||||
|
if randomAxis == 0:
|
||||||
|
var currentX = position.x
|
||||||
|
var lastX = last.position.x
|
||||||
|
|
||||||
|
if vertices[0].x + currentX < otherVerts[0].x + lastX:
|
||||||
|
_newVerts[0].x = otherVerts[0].x - currentX + lastX
|
||||||
|
_newVerts[3].x = otherVerts[0].x - currentX + lastX
|
||||||
|
_newVerts[7].x = otherVerts[0].x - currentX + lastX
|
||||||
|
_newVerts[4].x = otherVerts[0].x - currentX + lastX
|
||||||
|
|
||||||
|
if vertices[3].x + currentX > otherVerts[3].x + lastX:
|
||||||
|
_newVerts[1].x = otherVerts[3].x - currentX + lastX
|
||||||
|
_newVerts[2].x = otherVerts[3].x - currentX + lastX
|
||||||
|
_newVerts[5].x = otherVerts[3].x - currentX + lastX
|
||||||
|
_newVerts[6].x = otherVerts[3].x - currentX + lastX
|
||||||
|
|
||||||
|
if vertices[3].x + currentX < otherVerts[0].x + lastX or vertices[0].x + currentX > otherVerts[3].x + lastX:
|
||||||
|
get_tree().reload_current_scene()
|
||||||
|
else:
|
||||||
|
var currentZ = position.z
|
||||||
|
var lastZ = last.position.z
|
||||||
|
|
||||||
|
if vertices[0].z + currentZ < otherVerts[0].z + lastZ:
|
||||||
|
_newVerts[0].z = otherVerts[0].z - currentZ + lastZ
|
||||||
|
_newVerts[1].z = otherVerts[0].z - currentZ + lastZ
|
||||||
|
_newVerts[2].z = otherVerts[0].z - currentZ + lastZ
|
||||||
|
_newVerts[3].z = otherVerts[0].z - currentZ + lastZ
|
||||||
|
|
||||||
|
if vertices[3].z + currentZ > otherVerts[3].z + lastZ:
|
||||||
|
_newVerts[4].z = otherVerts[3].z - currentZ + lastZ
|
||||||
|
_newVerts[5].z = otherVerts[3].z - currentZ + lastZ
|
||||||
|
_newVerts[6].z = otherVerts[3].z - currentZ + lastZ
|
||||||
|
_newVerts[7].z = otherVerts[3].z - currentZ + lastZ
|
||||||
|
|
||||||
|
if vertices[3].z + currentZ < otherVerts[0].z + lastZ or vertices[0].z + currentZ > otherVerts[3].z + lastZ:
|
||||||
|
get_tree().reload_current_scene()
|
||||||
|
|
||||||
|
|
||||||
|
newVerts = _newVerts
|
||||||
|
rebuild_mesh(_newVerts)
|
||||||
|
|
||||||
|
var inst = load("res://platform.tscn").instantiate()
|
||||||
|
inst.cam = cam
|
||||||
|
inst.labelScore = labelScore
|
||||||
|
get_parent().add_child(inst)
|
||||||
|
|
||||||
|
inst.isActive = false
|
||||||
|
inst.translate(Vector3(0, 0.2, 0) + position)
|
||||||
|
inst.last = self
|
||||||
|
inst.speed = speed + 0.2
|
||||||
|
|
||||||
|
inst.calculate_randoms()
|
||||||
|
inst.rebuild_mesh(newVerts)
|
||||||
|
|
||||||
|
labelScore.text = str(score)
|
||||||
|
inst.score = score + 1
|
||||||
|
inst.isActive = true
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://1t1p7sfwxisv"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://platform.gd" id="1_sqti0"]
|
||||||
|
|
||||||
|
[node name="Platform" type="MeshInstance3D"]
|
||||||
|
script = ExtResource("1_sqti0")
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
; Engine configuration file.
|
||||||
|
; It's best edited using the editor UI and not directly,
|
||||||
|
; since the parameters that go here are not all obvious.
|
||||||
|
;
|
||||||
|
; Format:
|
||||||
|
; [section] ; section goes between []
|
||||||
|
; param=value ; assign values to parameters
|
||||||
|
|
||||||
|
config_version=5
|
||||||
|
|
||||||
|
[application]
|
||||||
|
|
||||||
|
config/name="Stack"
|
||||||
|
config/features=PackedStringArray("4.2", "Forward Plus")
|
||||||
|
boot_splash/image="res://Icon.png"
|
||||||
|
config/icon="res://Icon.png"
|
||||||
|
|
||||||
|
[input]
|
||||||
|
|
||||||
|
Click={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null)
|
||||||
|
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
[rendering]
|
||||||
|
|
||||||
|
anti_aliasing/quality/screen_space_aa=1
|
||||||
|
anti_aliasing/quality/use_taa=true
|
||||||
+44
@@ -0,0 +1,44 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://dpeo5y05nt5mi"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://1t1p7sfwxisv" path="res://platform.tscn" id="1_jquwx"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bj5w0ki1au4jr" path="res://Sky.png" id="2_rqa7j"]
|
||||||
|
|
||||||
|
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_qnpi8"]
|
||||||
|
panorama = ExtResource("2_rqa7j")
|
||||||
|
|
||||||
|
[sub_resource type="Sky" id="Sky_eicqm"]
|
||||||
|
sky_material = SubResource("PanoramaSkyMaterial_qnpi8")
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id="Environment_20yoh"]
|
||||||
|
background_mode = 2
|
||||||
|
sky = SubResource("Sky_eicqm")
|
||||||
|
tonemap_mode = 3
|
||||||
|
volumetric_fog_density = 0.01
|
||||||
|
|
||||||
|
[node name="World" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Overlay" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
|
[node name="Score" type="Label" parent="Overlay"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
offset_right = 40.0
|
||||||
|
offset_bottom = 23.0
|
||||||
|
|
||||||
|
[node name="Camera3D" type="Camera3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(-0.618408, 0.567333, -0.543787, 2.98023e-08, 0.691967, 0.721929, 0.785857, 0.446447, -0.427918, -4.23832, 6.42557, -3.40231)
|
||||||
|
|
||||||
|
[node name="Base" parent="." instance=ExtResource("1_jquwx")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
skeleton = NodePath("../Platform1")
|
||||||
|
|
||||||
|
[node name="Platform1" parent="." instance=ExtResource("1_jquwx")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, 0)
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource("Environment_20yoh")
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
|
transform = Transform3D(0.928376, 0.338154, -0.154177, -3.82119e-09, 0.414852, 0.909889, 0.371643, -0.844719, 0.385139, 0, 0, 0)
|
||||||
|
light_energy = 0.7
|
||||||
|
light_indirect_energy = 0.0
|
||||||
Reference in New Issue
Block a user