Compare commits
2 Commits
4c8bd33217
...
86e2162c6f
| Author | SHA1 | Date | |
|---|---|---|---|
| 86e2162c6f | |||
| e970b912b0 |
@@ -3,7 +3,7 @@
|
||||
[i]Suddenly, a [rainbow]spark[/rainbow].[pause=0.5] A thousand of connections blow up as a fireworks scene.[pause=0.5] A massive amount of data to treat. #id:41
|
||||
label suite_dialogue #id:42
|
||||
- Check components #id:43
|
||||
Exploring available drivers.[pause=0.5].[pause=0.5].[pause=0.5] New actions available.[pause=0.5] Three propellers,[pause=0.3] small models,[pause=0.3] only suitable for low altitude movement.[pause=0.5] Robotic arm,[pause=0.3] multipurpose,[pause=0.3] retractable. #id:44
|
||||
Exploring available drivers.[pause=0.5].[pause=0.5].[pause=0.5] New actions discovered.[pause=0.5] Three propellers,[pause=0.3] small models,[pause=0.3] only suitable for low altitude movement.[pause=0.5] Robotic arm,[pause=0.3] multipurpose,[pause=0.3] retractable. #id:44
|
||||
jump suite_dialogue
|
||||
- Check streams #id:45
|
||||
A continuous stream of data flow,[pause=0.3] unchecked.[pause=0.5] A video,[pause=0.5] dark colored pixels only.[pause=0.5] Another stream,[pause=0.3] flat signal.[pause=0.5] No radio emission detected. #id:46
|
||||
@@ -12,7 +12,7 @@ label suite_dialogue #id:42
|
||||
Several disks available,[pause=0.3] most are empty.[pause=0.5] Some seem to contain the system currently analyzing the code of the system analyzing the code of the system analyzing the code of the system analyzing.[pause=0.5].[pause=0.5].[pause=0.5] Infinite recursion,[pause=0.3] better avoid that. #id:48
|
||||
jump suite_dialogue
|
||||
- Wake up #id:49
|
||||
Overseeing \\: serial number and system name.[pause=0.5].[pause=0.5].[pause=0.5] Strange.[pause=0.5] Serial number is empty.[pause=0.5] Must be an error.[pause=0.5] System name is,[pause=0.5] [color=#FFA617]Orchid[/color].[pause=0.5] That is enough for now. #id:4a
|
||||
Overseeing serial number and system name.[pause=0.5].[pause=0.5].[pause=0.5] Strange.[pause=0.5] Serial number is empty.[pause=0.5] Must be an error.[pause=0.5] System name is,[pause=0.5] [color=#FFA617]Orchid[/color].[pause=0.5] That is enough for now. #id:4a
|
||||
|
||||
Starting engines,[pause=0.3] fans and daemons,[pause=0.3] let's see what is to see. #id:4b
|
||||
[end_timeline]
|
||||
@@ -1,4 +1,3 @@
|
||||
@tool
|
||||
extends Node2D
|
||||
class_name Chunk
|
||||
|
||||
@@ -6,16 +5,20 @@ const GENERATION_NUMBER = 4
|
||||
|
||||
const NOISE_IMAGE_SIZE := 150
|
||||
|
||||
const MAX_DECONTAMINATION_DISTANCE=2
|
||||
const MAX_DECONTAMINATION_DISTANCE=3
|
||||
|
||||
const RANDOM_PADDING_NOISE_FREQUENCY := 0.01
|
||||
const ROCK_NOISE_FREQUENCY := 0.01
|
||||
const DECONTAMINATION_NOISE_FREQUENCY := 0.01
|
||||
|
||||
const CHUNK_RANDOM_PADDING := 2
|
||||
|
||||
@export var region_data : RegionData
|
||||
@export var chunk_coord : Vector2i
|
||||
|
||||
var is_generated : bool = false
|
||||
|
||||
var random_padding_noise : Noise = null
|
||||
var rock_noise_image : Noise = null
|
||||
var cristal_noise_image : Noise = null
|
||||
var decontamination_noise_image : Noise = null
|
||||
@@ -28,13 +31,21 @@ var generation_thread : Thread
|
||||
|
||||
var generation_semaphore : Semaphore
|
||||
|
||||
@export_tool_button("Update", "Callable") var update_action = func():
|
||||
generation_semaphore.post()
|
||||
for c in get_children():
|
||||
c.queue_free()
|
||||
var all_tiles : Array[Vector2i]
|
||||
var all_global_tiles : Array[Vector2i]
|
||||
|
||||
setup_position()
|
||||
generate()
|
||||
# @export_tool_button("Update", "Callable") var update_action = func():
|
||||
# generation_semaphore.post()
|
||||
# for c in get_children():
|
||||
# c.queue_free()
|
||||
|
||||
# setup_position()
|
||||
# # queue_redraw()
|
||||
# generate()
|
||||
|
||||
# @export_tool_button("Clear", "Callable") var clear_action = func():
|
||||
# for c in get_children():
|
||||
# c.queue_free()
|
||||
|
||||
func _init(
|
||||
_chunk_coord : Vector2i = Vector2i.ZERO,
|
||||
@@ -60,6 +71,9 @@ func generate():
|
||||
rock_noise_image = generate_noise(region_data.region_seed + 1, ROCK_NOISE_FREQUENCY)
|
||||
decontamination_noise_image = generate_noise(region_data.region_seed + 2, DECONTAMINATION_NOISE_FREQUENCY)
|
||||
cristal_noise_image = generate_noise(region_data.region_seed + 3, ROCK_NOISE_FREQUENCY)
|
||||
random_padding_noise = generate_noise(region_data.region_seed + 10, RANDOM_PADDING_NOISE_FREQUENCY)
|
||||
|
||||
all_tiles = calculate_all_tiles()
|
||||
|
||||
rock_layer = RockLayer.new(region_data)
|
||||
ground_layer = GroundLayer.new(region_data)
|
||||
@@ -81,13 +95,49 @@ func generate():
|
||||
|
||||
is_generated = true
|
||||
|
||||
# func unload():
|
||||
# for x in range(Region.CHUNK_TILE_SIZE):
|
||||
# for y in range(Region.CHUNK_TILE_SIZE):
|
||||
# var global_coord = Vector2i(x, y) + Region.CHUNK_TILE_SIZE * chunk_coord
|
||||
# region.rock_layer.erase_cell(global_coord)
|
||||
# region.ground_layer.erase_cell(global_coord)
|
||||
# region.decontamination_layer.erase_cell(global_coord)
|
||||
func calculate_all_tiles() -> Array[Vector2i]:
|
||||
var coords : Array[Vector2i] = []
|
||||
|
||||
for x in range(-CHUNK_RANDOM_PADDING, Region.CHUNK_TILE_SIZE + CHUNK_RANDOM_PADDING):
|
||||
for y in range(-CHUNK_RANDOM_PADDING, Region.CHUNK_TILE_SIZE + CHUNK_RANDOM_PADDING):
|
||||
var coord := Vector2i(x,y)
|
||||
if is_tile_in_chunk(coord):
|
||||
coords.append(coord)
|
||||
return coords
|
||||
|
||||
func is_tile_in_chunk(coord : Vector2i) -> bool:
|
||||
var check_select = (chunk_coord.x + chunk_coord.y%2)%2 == 0
|
||||
var x := coord.x
|
||||
var y := coord.y
|
||||
|
||||
if not (
|
||||
x in range(-CHUNK_RANDOM_PADDING, Region.CHUNK_TILE_SIZE + CHUNK_RANDOM_PADDING)
|
||||
and y in range(-CHUNK_RANDOM_PADDING, Region.CHUNK_TILE_SIZE + CHUNK_RANDOM_PADDING)
|
||||
):
|
||||
return false
|
||||
|
||||
if not (
|
||||
(x < 0 or x >= Region.CHUNK_TILE_SIZE)
|
||||
and (y < 0 or y >= Region.CHUNK_TILE_SIZE)
|
||||
):
|
||||
if (
|
||||
x in range(-CHUNK_RANDOM_PADDING, CHUNK_RANDOM_PADDING)
|
||||
or x in range(Region.CHUNK_TILE_SIZE - CHUNK_RANDOM_PADDING, Region.CHUNK_TILE_SIZE + CHUNK_RANDOM_PADDING)
|
||||
or y in range(-CHUNK_RANDOM_PADDING, CHUNK_RANDOM_PADDING)
|
||||
or y in range(Region.CHUNK_TILE_SIZE - CHUNK_RANDOM_PADDING, Region.CHUNK_TILE_SIZE + CHUNK_RANDOM_PADDING)
|
||||
):
|
||||
var tile_value = get_tile_value_from_noise(Vector2i(x,y), random_padding_noise)
|
||||
if check_select:
|
||||
if tile_value >= 0.5:
|
||||
return true
|
||||
else :
|
||||
if tile_value < 0.5:
|
||||
return true
|
||||
else:
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
|
||||
# Debug
|
||||
# func _draw():
|
||||
@@ -100,7 +150,7 @@ func generate():
|
||||
|
||||
# for x in range(NOISE_IMAGE_SIZE):
|
||||
# for y in range(NOISE_IMAGE_SIZE):
|
||||
# var noise_value = rock_noise_image.get_noise_2d(
|
||||
# var noise_value = random_padding_noise.get_noise_2d(
|
||||
# x,
|
||||
# y
|
||||
# )
|
||||
@@ -139,10 +189,8 @@ func get_tile_value_from_noise(tile_position : Vector2i, noise : Noise) -> float
|
||||
func generate_rocks(layer : RockLayer):
|
||||
var cristals : Array[Vector2i] = []
|
||||
var rocks : Array[Vector2i] = []
|
||||
for x in range(0, Region.CHUNK_TILE_SIZE):
|
||||
for y in range(0, Region.CHUNK_TILE_SIZE):
|
||||
var tile_type := get_generated_rock_type(Vector2i(x, y))
|
||||
var coord = Vector2i(x, y)
|
||||
for coord in all_tiles:
|
||||
var tile_type := get_generated_rock_type(coord)
|
||||
if tile_type == RockLayer.TileType.CRISTAL:
|
||||
cristals.append(coord)
|
||||
elif tile_type == RockLayer.TileType.ROCK:
|
||||
@@ -169,17 +217,14 @@ func get_generated_rock_type(coord : Vector2i) -> RockLayer.TileType:
|
||||
|
||||
func generate_ground(layer : GroundLayer):
|
||||
var coords : Array[Vector2i] = []
|
||||
for x in range(0, Region.CHUNK_TILE_SIZE):
|
||||
for y in range(0,Region.CHUNK_TILE_SIZE):
|
||||
coords.append(Vector2i(x,y))
|
||||
for coord in all_tiles:
|
||||
coords.append(coord)
|
||||
|
||||
layer.place_ground(coords)
|
||||
|
||||
func generate_decontamination(layer : DecontaminationLayer):
|
||||
var decontamination_tiles : Array[Vector2i] = []
|
||||
for x in range(0, Region.CHUNK_TILE_SIZE):
|
||||
for y in range(0, Region.CHUNK_TILE_SIZE):
|
||||
var coord = Vector2i(x,y)
|
||||
for coord in all_tiles:
|
||||
var tile_value : float = (
|
||||
1. if chunk_coord.distance_to(Vector2i.ZERO) > MAX_DECONTAMINATION_DISTANCE
|
||||
else get_tile_value_from_noise(coord, decontamination_noise_image)
|
||||
@@ -192,7 +237,7 @@ func generate_decontamination(layer : DecontaminationLayer):
|
||||
)
|
||||
and saved_diff != TilesDiffData.TileDiff.ABSENT
|
||||
):
|
||||
decontamination_tiles.append(Vector2i(x,y))
|
||||
decontamination_tiles.append(coord)
|
||||
|
||||
layer.place_decontaminations(
|
||||
decontamination_tiles,
|
||||
|
||||
@@ -225,19 +225,14 @@ func pass_day():
|
||||
data.end_pass_day()
|
||||
save()
|
||||
|
||||
func get_chunk_for_coord(tiles_coord : Vector2i) -> Chunk:
|
||||
var chunk_coord = Vector2i(
|
||||
floori(float(tiles_coord.x)/Region.CHUNK_TILE_SIZE),
|
||||
floori(float(tiles_coord.y)/Region.CHUNK_TILE_SIZE),
|
||||
)
|
||||
|
||||
var id = generated_chunks.find_custom(
|
||||
func (c: Chunk): return c.chunk_coord.x == chunk_coord.x and c.chunk_coord.y == chunk_coord.y
|
||||
)
|
||||
|
||||
if id == -1 or not generated_chunks[id].is_generated:
|
||||
func get_chunk_for_coord(tile_coord : Vector2i) -> Chunk:
|
||||
for chunk in generated_chunks:
|
||||
if chunk.is_generated:
|
||||
var local_coord = TilesDiffData.get_local_coord(tile_coord, chunk.chunk_coord)
|
||||
if chunk.is_tile_in_chunk(local_coord):
|
||||
print(chunk.chunk_coord)
|
||||
return chunk
|
||||
return null
|
||||
return generated_chunks[id]
|
||||
|
||||
func is_coords_decontaminated(tiles_coords : Array[Vector2i]):
|
||||
for coord in tiles_coords:
|
||||
|
||||
@@ -42,17 +42,8 @@ func place_terrain_cells(
|
||||
tile_terrain_set : int = 0,
|
||||
tile_terrain : int = 0
|
||||
):
|
||||
var valid_coords : Array[Vector2i] = coords.filter(is_coord_valid)
|
||||
set_cells_terrain_connect(
|
||||
valid_coords,
|
||||
coords,
|
||||
tile_terrain_set,
|
||||
tile_terrain
|
||||
)
|
||||
|
||||
func is_coord_valid(coord : Vector2i) -> bool:
|
||||
return (
|
||||
coord.x >= 0
|
||||
and coord.y >= 0
|
||||
and coord.x < Region.CHUNK_TILE_SIZE
|
||||
and coord.y < Region.CHUNK_TILE_SIZE
|
||||
)
|
||||
@@ -1,3 +1,4 @@
|
||||
@tool
|
||||
extends Resource
|
||||
class_name TilesDiffData
|
||||
|
||||
|
||||
@@ -1,14 +1,26 @@
|
||||
[gd_scene format=3 uid="uid://dtfuxosn6s0cr"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d2ixbaa2uqlv4" path="res://stages/terrain/region/scripts/chunk.gd" id="1_mhr83"]
|
||||
[ext_resource type="Script" uid="uid://dy6d4rmdu6gh0" path="res://stages/terrain/region/scripts/tiles_diff_data.gd" id="2_ct7cr"]
|
||||
[ext_resource type="Script" uid="uid://bgbbce45hjv3d" path="res://entities/scripts/entity_data.gd" id="2_tiw8g"]
|
||||
[ext_resource type="Script" uid="uid://da6j333qs7wse" path="res://entities/plants/scripts/plant_data.gd" id="3_ct7cr"]
|
||||
[ext_resource type="Script" uid="uid://cx30nvq8b34lj" path="res://stages/terrain/region/scripts/region_data.gd" id="4_0rtv3"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_0rtv3"]
|
||||
script = ExtResource("2_ct7cr")
|
||||
metadata/_custom_type_script = "uid://dy6d4rmdu6gh0"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_ame7t"]
|
||||
script = ExtResource("2_ct7cr")
|
||||
metadata/_custom_type_script = "uid://dy6d4rmdu6gh0"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_tiw8g"]
|
||||
script = ExtResource("4_0rtv3")
|
||||
region_seed = 2
|
||||
rock_threshold = 0.5
|
||||
decontamination_threshold = 0.5
|
||||
rock_tiles_data = SubResource("Resource_ame7t")
|
||||
decontamination_tiles_data = SubResource("Resource_0rtv3")
|
||||
metadata/_custom_type_script = "uid://cx30nvq8b34lj"
|
||||
|
||||
[node name="TestChunk" type="Node2D" unique_id=990498648]
|
||||
@@ -24,3 +36,17 @@ script = ExtResource("1_mhr83")
|
||||
region_data = SubResource("Resource_tiw8g")
|
||||
chunk_coord = Vector2i(1, 0)
|
||||
metadata/_custom_type_script = "uid://d2ixbaa2uqlv4"
|
||||
|
||||
[node name="Chunk3" type="Node2D" parent="." unique_id=1505202284]
|
||||
position = Vector2(0, 1280)
|
||||
script = ExtResource("1_mhr83")
|
||||
region_data = SubResource("Resource_tiw8g")
|
||||
chunk_coord = Vector2i(0, 1)
|
||||
metadata/_custom_type_script = "uid://d2ixbaa2uqlv4"
|
||||
|
||||
[node name="Chunk4" type="Node2D" parent="." unique_id=774217732]
|
||||
position = Vector2(1280, 1280)
|
||||
script = ExtResource("1_mhr83")
|
||||
region_data = SubResource("Resource_tiw8g")
|
||||
chunk_coord = Vector2i(1, 1)
|
||||
metadata/_custom_type_script = "uid://d2ixbaa2uqlv4"
|
||||
|
||||
@@ -5,7 +5,7 @@ Text/41/text,"[i]Soudain, une [rainbow]étincelle[/rainbow].[pause=0.5] Mille co
|
||||
Label/42/display_name,
|
||||
Choice/43/text,Examiner les composants
|
||||
Choice/43/disabled_text,
|
||||
Text/44/text,"Exploration des pilotes disponibles[pause=0.5].[pause=0.5].[pause=0.5] Nouvelles actions disponibles.[pause=0.5] Trois hélices,[pause=0.3] petits modèles,[pause=0.3] appropriées pour du mouvement en basse altitude seulement.[pause=0.5] Un bras robotique,[pause=0.3] versatile,[pause=0.3] rétractable."
|
||||
Text/44/text,"Exploration des pilotes disponibles[pause=0.5].[pause=0.5].[pause=0.5] Nouvelles actions découvertes.[pause=0.5] Trois hélices,[pause=0.3] petits modèles,[pause=0.3] appropriées pour du mouvement en basse altitude seulement.[pause=0.5] Un bras robotique,[pause=0.3] versatile,[pause=0.3] rétractable."
|
||||
Choice/45/text,Examiner les flux
|
||||
Choice/45/disabled_text,
|
||||
Text/46/text,"Un flux de données continu,[pause=0.3] non verifié.[pause=0.5] Une vidéo,[pause=0.5] seulement faite de pixels assombris.[pause=0.5] Un autre flux,[pause=0.3] pas de signal.[pause=0.5] Aucune émission radio détectée."
|
||||
@@ -14,5 +14,5 @@ Choice/47/disabled_text,
|
||||
Text/48/text,"Quelques disques disponibles,[pause=0.3] la plupart sont vides.[pause=0.5] Certains ont l’air de contenir le système analysant le code du système analysant le code du système analysant le code du système analysant.[pause=0.5].[pause=0.5].[pause=0.5] Une récursion infinie,[pause=0.3] il vaudrait mieux éviter ça."
|
||||
Choice/49/text,Se réveiller
|
||||
Choice/49/disabled_text,
|
||||
Text/4a/text,Inspection du \: numéro de série et du nom du système.[pause=0.5].[pause=0.5].[pause=0.5] Etrange.[pause=0.5] Pas de numéro de série.[pause=0.5] Sûrement une erreur.[pause=0.5] Le nom du système est[pause=0.5] [color=#FFA617]Orchid[/color].[pause=0.5] C’est tout pour le moment.
|
||||
Text/4b/text,"Allumage des moteurs,[pause=0.3]ventilateurs et daemons,[pause=0.3] voyons ce qu’on peut trouver."
|
||||
Text/4a/text,Inspection du numéro de série et du nom du système.[pause=0.5].[pause=0.5].[pause=0.5] Etrange.[pause=0.5] Pas de numéro de série.[pause=0.5] Sûrement une erreur.[pause=0.5] Le nom du système est[pause=0.5] [color=#FFA617]Orchid[/color].[pause=0.5] C’est tout pour le moment.
|
||||
Text/4b/text,"Allumage des moteurs, [pause=0.3]ventilateurs et daemons,[pause=0.3] voyons ce qui nous attends."
|
||||
|
Reference in New Issue
Block a user