Dev pour la béta 1
* ajout des artefacts avec la pile et l'emplacement de graine * affichage des artefacts dans le vaisseau sur une étagère * ajout des distributeurs d'artefacts dans les régions * affichage des attributs de bases de plantes dans le vaisseau * changement de l'affichage du choix des régions * changement des icônes du détecteur
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://b752eqq4cm7ve" path="res://common/icons/building-factory-2.svg" id="11_fwgig"]
|
||||
[ext_resource type="Texture2D" uid="uid://dg00xnpp6ixls" path="res://common/icons/server-2.svg" id="12_mlppq"]
|
||||
[ext_resource type="Texture2D" uid="uid://1ynlp05wj0hm" path="res://common/icons/rocket.svg" id="13_r4e5h"]
|
||||
[ext_resource type="Texture2D" uid="uid://bmersnaoira20" path="res://common/icons/building-store.svg" id="16_0e2h6"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdnee"]
|
||||
shader = ExtResource("2_ktnx3")
|
||||
@@ -116,6 +117,7 @@ camera = NodePath("../../Camera")
|
||||
|
||||
[node name="PassDay" parent="." unique_id=1144772570 instance=ExtResource("3_ktnx3")]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
[node name="RegionGui" type="CanvasLayer" parent="." unique_id=2024485651]
|
||||
layer = 2
|
||||
@@ -144,6 +146,7 @@ position = Vector2(-405, -151)
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
icon = ExtResource("11_fwgig")
|
||||
present = null
|
||||
default_info_title = "ASTRA_FACTORY"
|
||||
default_info_desc = "ASTRA_FACTORY_TEXT"
|
||||
|
||||
@@ -153,6 +156,7 @@ visible = false
|
||||
position = Vector2(91, -177)
|
||||
to_scene_id = "BOREA"
|
||||
icon = ExtResource("12_mlppq")
|
||||
present = null
|
||||
default_interact_text = "ENTER"
|
||||
available = true
|
||||
default_info_title = "BOREA_BASE"
|
||||
@@ -164,10 +168,23 @@ visible = false
|
||||
position = Vector2(91, -177)
|
||||
to_scene_id = "GARAGE"
|
||||
icon = ExtResource("13_r4e5h")
|
||||
present = null
|
||||
default_interact_text = "ENTER"
|
||||
default_info_title = "MYSTERIOUS_DOOR"
|
||||
default_info_desc = "MYSTERIOUS_DOOR_TEXT"
|
||||
|
||||
[node name="VendingMachineDoor" parent="Entities" unique_id=580707365 instance=ExtResource("8_2f6js")]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
position = Vector2(91, -177)
|
||||
to_scene_id = "VENDING_MACHINE_DOOR"
|
||||
icon = ExtResource("16_0e2h6")
|
||||
present = null
|
||||
default_interact_text = "ENTER"
|
||||
available = true
|
||||
default_info_title = "VENDING_MACHINES"
|
||||
default_info_desc = "MYSTERIOUS_DOOR_TEXT"
|
||||
|
||||
[node name="Camera" parent="." unique_id=1399042986 node_paths=PackedStringArray("following") instance=ExtResource("8_fwgig")]
|
||||
following = NodePath("../Entities/Player")
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
@tool
|
||||
extends Node2D
|
||||
class_name Chunk
|
||||
|
||||
@@ -37,18 +36,18 @@ var generation_semaphore : Semaphore
|
||||
var all_tiles : Array[Vector2i]
|
||||
var all_global_tiles : Array[Vector2i]
|
||||
|
||||
@export_tool_button("Update", "Callable") var update_action = func():
|
||||
generation_semaphore.post()
|
||||
for c in get_children():
|
||||
c.queue_free()
|
||||
# @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()
|
||||
# setup_position()
|
||||
# # queue_redraw()
|
||||
# generate()
|
||||
|
||||
@export_tool_button("Clear", "Callable") var clear_action = func():
|
||||
for c in get_children():
|
||||
c.queue_free()
|
||||
# @export_tool_button("Clear", "Callable") var clear_action = func():
|
||||
# for c in get_children():
|
||||
# c.queue_free()
|
||||
|
||||
func _init(
|
||||
_chunk_coord : Vector2i = Vector2i.ZERO,
|
||||
|
||||
@@ -7,8 +7,12 @@ func get_modifier_name() -> String:
|
||||
func get_description() -> String:
|
||||
return tr("ARID_MODIFIER_DESC_TEXT")
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return preload("res://common/icons/droplet-off.svg")
|
||||
|
||||
func modify_decontamination_threshold(decontamination_threshold : float) -> float:
|
||||
return decontamination_threshold * (0.5)
|
||||
|
||||
func modify_start_decontamination_zone_radius(start_decontamination_zone_radius : int) -> int:
|
||||
return max(1,roundi(start_decontamination_zone_radius * (0.5)))
|
||||
return max(1,roundi(start_decontamination_zone_radius * (0.5)))
|
||||
|
||||
|
||||
@@ -7,5 +7,8 @@ func get_modifier_name() -> String:
|
||||
func get_description() -> String:
|
||||
return tr("HARSH_MODIFIER_DESC_TEXT")
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return preload("res://common/icons/wind.svg")
|
||||
|
||||
func modify_objective(objective : int) -> int:
|
||||
return roundi(objective * 1.5)
|
||||
@@ -7,5 +7,8 @@ func get_modifier_name() -> String:
|
||||
func get_description() -> String:
|
||||
return tr("HUMID_MODIFIER_DESC_TEXT")
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return preload("res://common/icons/cloud-rain.svg")
|
||||
|
||||
func modify_charge(charge : int) -> int:
|
||||
return charge - 2
|
||||
@@ -7,5 +7,8 @@ func get_modifier_name() -> String:
|
||||
func get_description() -> String:
|
||||
return tr("POOR_MODIFIER_DESC_TEXT")
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return preload("res://common/icons/cactus.svg")
|
||||
|
||||
func modify_cristal_threshold(cristal_threshold : float) -> float:
|
||||
return cristal_threshold * 0.5
|
||||
@@ -2,20 +2,41 @@
|
||||
extends Resource
|
||||
class_name RegionModifier
|
||||
|
||||
const DEFAULT_MODIFIER_COLOR = Color("ff006eff")
|
||||
const DEFAULT_ICON = preload("res://common/icons/cloud.svg")
|
||||
|
||||
const DOOR_SCENE = preload("res://entities/interactables/door/door.tscn")
|
||||
|
||||
var level : int = 1
|
||||
var modifier_name : String : get = get_modifier_name
|
||||
var description : String : get = get_description
|
||||
var flags : Array[String] : get = get_flags
|
||||
@export var modifier_seed : int = 0
|
||||
|
||||
func _init(_level : int = 1):
|
||||
if modifier_seed == 0:
|
||||
modifier_seed = randi()
|
||||
level = _level
|
||||
|
||||
@abstract func get_modifier_name() -> String
|
||||
|
||||
@abstract func get_description() -> String
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return DEFAULT_ICON
|
||||
|
||||
func get_card_section_color() -> Color:
|
||||
return DEFAULT_MODIFIER_COLOR
|
||||
|
||||
func get_difficulty_score() -> float:
|
||||
return float(level)
|
||||
|
||||
func get_flags() -> Array[String]:
|
||||
return []
|
||||
|
||||
func region_ready(_region : Region) -> void:
|
||||
pass
|
||||
|
||||
func modify_charge(charge : int) -> int:
|
||||
return charge
|
||||
|
||||
@@ -32,4 +53,32 @@ func modify_cristal_threshold(cristal_threshold : float) -> float:
|
||||
return cristal_threshold
|
||||
|
||||
func modify_start_decontamination_zone_radius(start_decontamination_zone_radius : int) -> int:
|
||||
return start_decontamination_zone_radius
|
||||
return start_decontamination_zone_radius
|
||||
|
||||
|
||||
func card_section() -> CardSectionInfo:
|
||||
var section := CardSectionInfo.new(
|
||||
get_modifier_name(),
|
||||
get_description(),
|
||||
)
|
||||
|
||||
section.title_icon = get_icon()
|
||||
section.color = get_card_section_color()
|
||||
|
||||
return section
|
||||
|
||||
func generate_door(
|
||||
title : String,
|
||||
desc : String,
|
||||
scene_id : String,
|
||||
icon : Texture
|
||||
) -> Door:
|
||||
var new_door = DOOR_SCENE.instantiate() as Door
|
||||
new_door.name = "Door%d" % modifier_seed
|
||||
new_door.to_scene_id = scene_id
|
||||
new_door.default_info_title = title
|
||||
new_door.default_info_desc = desc
|
||||
new_door.icon = icon
|
||||
new_door.present = true
|
||||
|
||||
return new_door
|
||||
@@ -0,0 +1,31 @@
|
||||
extends RegionModifier
|
||||
class_name VendingMachineModifier
|
||||
|
||||
const VENDING_MACHINES_ICON = preload("res://common/icons/building-store.svg")
|
||||
|
||||
func get_modifier_name() -> String:
|
||||
return tr("VENDING_MACHINES")
|
||||
|
||||
func get_description() -> String:
|
||||
return tr("VENDING_MACHINES_MODIFIER_DESC_TEXT")
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return preload("res://common/icons/building-store.svg")
|
||||
|
||||
func get_card_section_color() -> Color:
|
||||
return Color("25c147")
|
||||
|
||||
func region_ready(region) -> void:
|
||||
var new_vending_machine_door = generate_door(
|
||||
tr("VENDING_MACHINES"),
|
||||
tr("VENDING_MACHINES_DOOR_DESC_TEXT"),
|
||||
"VENDING_MACHINE_ROOM",
|
||||
VENDING_MACHINES_ICON
|
||||
)
|
||||
new_vending_machine_door.available = region.data.completed_doors.find(new_vending_machine_door.name) == -1
|
||||
|
||||
region.add_entity(new_vending_machine_door)
|
||||
region.random_move_object(new_vending_machine_door,Region.DOORS_RANDOM_MOVEMENT)
|
||||
|
||||
func get_difficulty_score() -> float:
|
||||
return 0
|
||||
@@ -0,0 +1 @@
|
||||
uid://b1k5c8lxkbgby
|
||||
@@ -9,6 +9,7 @@ const TILE_SET : TileSet = preload("res://stages/terrain/region/resources/moss_b
|
||||
const TILE_SCALE = 1
|
||||
const TILE_SIZE : int = roundi(TILE_SET.tile_size.x * TILE_SCALE)
|
||||
const SPAWN_OBJECT_RANDOM_MOVEMENT = 200
|
||||
const DOORS_RANDOM_MOVEMENT = 3000
|
||||
|
||||
const CHUNK_TILE_SIZE : int = 10
|
||||
const CHUNK_SIZE = CHUNK_TILE_SIZE * TILE_SIZE
|
||||
@@ -79,10 +80,11 @@ func _ready():
|
||||
|
||||
generate_near_chunks(player)
|
||||
|
||||
spawn_object_random_move(%RechargeStation)
|
||||
random_move_object(%RechargeStation, SPAWN_OBJECT_RANDOM_MOVEMENT)
|
||||
%RechargeStation.update()
|
||||
spawn_object_random_move(%BoreaDoor)
|
||||
spawn_object_random_move(%ShipGarageDoor)
|
||||
|
||||
for m in data.modifiers:
|
||||
m.region_ready(self)
|
||||
|
||||
if not "tutorial" in data.flags:
|
||||
GameInfo.game_data.player_data.inventory.add_item(Detector.new())
|
||||
@@ -159,33 +161,29 @@ func save():
|
||||
data.player_position = player.global_position
|
||||
GameInfo.save_game_data()
|
||||
|
||||
func spawn_object_random_move(object : Node2D, offset : Vector2 = Vector2.ZERO):
|
||||
func random_move_object(
|
||||
object : Node2D,
|
||||
random_movement: int = SPAWN_OBJECT_RANDOM_MOVEMENT,
|
||||
offset : Vector2 = Vector2.ZERO
|
||||
):
|
||||
var rng := RandomNumberGenerator.new()
|
||||
rng.seed = data.region_seed + object.name.hash()
|
||||
|
||||
object.position = Vector2(
|
||||
rng.randf_range(-SPAWN_OBJECT_RANDOM_MOVEMENT,+SPAWN_OBJECT_RANDOM_MOVEMENT),
|
||||
rng.randf_range(-SPAWN_OBJECT_RANDOM_MOVEMENT,SPAWN_OBJECT_RANDOM_MOVEMENT)
|
||||
rng.randf_range(-random_movement,random_movement),
|
||||
rng.randf_range(-random_movement,random_movement)
|
||||
) + offset
|
||||
|
||||
dig_hole(object.position, 3)
|
||||
|
||||
func setup_flagged_properties():
|
||||
|
||||
%AstraDoor.visible = false
|
||||
%ShipGarageDoor.visible = false
|
||||
%BoreaDoor.visible = false
|
||||
|
||||
%AstraDoor.process_mode = Node.PROCESS_MODE_DISABLED
|
||||
%ShipGarageDoor.process_mode = Node.PROCESS_MODE_DISABLED
|
||||
%BoreaDoor.process_mode = Node.PROCESS_MODE_DISABLED
|
||||
|
||||
for f in data.flags:
|
||||
for i in range(len(data.flags)):
|
||||
var f = data.flags[i]
|
||||
match f:
|
||||
"tutorial":
|
||||
%AstraDoor.visible = true
|
||||
%ShipGarageDoor.visible = true
|
||||
|
||||
%AstraDoor.process_mode = Node.PROCESS_MODE_INHERIT
|
||||
%ShipGarageDoor.process_mode = Node.PROCESS_MODE_INHERIT
|
||||
%AstraDoor.present = true
|
||||
%ShipGarageDoor.present = true
|
||||
random_move_object(%ShipGarageDoor,SPAWN_OBJECT_RANDOM_MOVEMENT)
|
||||
|
||||
%AstraDoor.available = false
|
||||
%ShipGarageDoor.available = data.state == RegionData.State.SUCCEEDED
|
||||
@@ -196,13 +194,12 @@ func setup_flagged_properties():
|
||||
%ShipGarageDoor.available = true
|
||||
)
|
||||
"borea":
|
||||
%BoreaDoor.visible = true
|
||||
%BoreaDoor.present = true
|
||||
random_move_object(%BoreaDoor,SPAWN_OBJECT_RANDOM_MOVEMENT)
|
||||
|
||||
%RechargeStation.visible = false
|
||||
|
||||
%BoreaDoor.process_mode = Node.PROCESS_MODE_INHERIT
|
||||
%RechargeStation.process_mode = Node.PROCESS_MODE_DISABLED
|
||||
|
||||
|
||||
func is_chunk_generated(coord : Vector2i):
|
||||
return generated_chunks.find_custom(
|
||||
func (c: Chunk) : return get_chunk_key(c.chunk_coord) == get_chunk_key(coord)
|
||||
@@ -262,7 +259,6 @@ func is_coords_decontaminated(tiles_coords : Array[Vector2i]):
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
func dig_rocks(tiles_coords : Array[Vector2i], save_tiles_diff := true, loot := true):
|
||||
if save_tiles_diff :
|
||||
data.rock_tiles_data.update_tiles_diff(tiles_coords, TilesDiffData.TileDiff.ABSENT)
|
||||
@@ -277,6 +273,19 @@ func dig_rocks(tiles_coords : Array[Vector2i], save_tiles_diff := true, loot :=
|
||||
|
||||
chunk.rock_layer.remove_rocks([local_coord])
|
||||
|
||||
func dig_hole(game_pos: Vector2, size : int):
|
||||
var hole_tiles : Array[Vector2i] = []
|
||||
var tile_position := Vector2i(
|
||||
roundi(game_pos.x/float(Region.TILE_SIZE)),
|
||||
roundi(game_pos.y/float(Region.TILE_SIZE))
|
||||
)
|
||||
for x in range(-size, size):
|
||||
for y in range(-size, size):
|
||||
var coord = Vector2i(x,y)
|
||||
if coord.distance_to(Vector2.ZERO) < size:
|
||||
hole_tiles.append(coord + tile_position)
|
||||
dig_rocks(hole_tiles,false,false)
|
||||
|
||||
func loot_talion(coord : Vector2i):
|
||||
var new_seed = Seed.generate_random()
|
||||
drop_item(
|
||||
|
||||
@@ -37,14 +37,21 @@ const PLAYER_ROCK_HOLE_RADIUS = 5
|
||||
|
||||
@export var player_spawn : Vector2
|
||||
|
||||
@export var entered_door = ""
|
||||
@export var completed_doors : Array[String] = [] # List of completed doors
|
||||
@export var modifiers : Array[RegionModifier]
|
||||
|
||||
|
||||
@export var charges : int :
|
||||
set(v):
|
||||
charges = v
|
||||
update()
|
||||
if GameInfo:
|
||||
update()
|
||||
@export var objective : int :
|
||||
set(v):
|
||||
objective = v
|
||||
update()
|
||||
if GameInfo:
|
||||
update()
|
||||
|
||||
@export var rock_tiles_data : TilesDiffData
|
||||
@export var decontamination_tiles_data : TilesDiffData
|
||||
@@ -64,6 +71,7 @@ func _init(
|
||||
cristal_threshold = parameter.get_cristal_threshold()
|
||||
start_decontamination_hole_radius = parameter.get_start_decontamination_zone_radius()
|
||||
flags = parameter.get_region_flags()
|
||||
modifiers = parameter.modifiers
|
||||
|
||||
player_spawn = get_random_spawn_position()
|
||||
player_position = player_spawn
|
||||
@@ -176,4 +184,4 @@ func edit_map_origin():
|
||||
|
||||
rock_tiles_data.update_tiles_diff(player_hole_tiles, TilesDiffData.TileDiff.ABSENT)
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
@@ -46,7 +46,12 @@ func get_region_name() -> String:
|
||||
return region_name
|
||||
|
||||
func get_region_flags() -> Array[String]:
|
||||
return region_flags
|
||||
var f := region_flags
|
||||
|
||||
for m in modifiers:
|
||||
f.append_array(m.get_flags())
|
||||
|
||||
return f
|
||||
|
||||
func get_region_level() -> int:
|
||||
return level
|
||||
@@ -102,4 +107,8 @@ func get_start_decontamination_zone_radius() -> int:
|
||||
for m in modifiers:
|
||||
zone_radius = m.modify_start_decontamination_zone_radius(zone_radius)
|
||||
|
||||
return zone_radius
|
||||
return zone_radius
|
||||
|
||||
func card_info() -> CardInfo:
|
||||
return null
|
||||
#TODO
|
||||
Reference in New Issue
Block a user