ajout des graines procédurales et des cinamatiques
This commit is contained in:
@@ -30,7 +30,6 @@ y_sort_enabled = true
|
||||
|
||||
[node name="Player" parent="Entities" unique_id=75851644 instance=ExtResource("5_ovqi1")]
|
||||
z_index = 1
|
||||
position = Vector2(3000, -41)
|
||||
|
||||
[node name="TruckRecharge" parent="Entities" unique_id=2068738444 instance=ExtResource("7_6d8m3")]
|
||||
position = Vector2(-1, -169)
|
||||
@@ -39,11 +38,18 @@ position = Vector2(-1, -169)
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
modulate = Color(1, 0, 0, 1)
|
||||
position = Vector2(-43, 367)
|
||||
available = false
|
||||
default_info_title = "ASTRA_FACTORY"
|
||||
default_info_desc = "ASTRA_FACTORY_TEXT"
|
||||
|
||||
[node name="BoreaDoor" parent="Entities" unique_id=135926916 instance=ExtResource("8_2f6js")]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
to_scene_id = "BOREA"
|
||||
default_interact_text = "ENTER"
|
||||
default_info_title = "BOREA_BASE"
|
||||
default_info_desc = "ASTRA_FACTORY_TEXT"
|
||||
|
||||
[node name="ShipGarageDoor" parent="Entities" unique_id=1073871193 instance=ExtResource("8_2f6js")]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
@@ -29,7 +29,9 @@ var in_passing_day_animation = false
|
||||
var contamination_texture : ImageTexture
|
||||
var rock_layer : RockLayer
|
||||
var ground_layer : GroundLayer
|
||||
var decontamination_layer : DecontaminationLayer
|
||||
var decontamination_layer : DecontaminationLayer
|
||||
|
||||
var score_by_plant : Dictionary[PlantData, int] = {}
|
||||
|
||||
var tile_set = Region.TILE_SET
|
||||
|
||||
@@ -44,6 +46,7 @@ func _input(_e):
|
||||
and Input.is_action_pressed("move_left")
|
||||
and Input.is_action_just_pressed("action")
|
||||
):
|
||||
data.succeded.emit()
|
||||
data.state = RegionData.State.SUCCEEDED
|
||||
data.update()
|
||||
|
||||
@@ -77,8 +80,11 @@ func _ready():
|
||||
decontamination_layer = DecontaminationLayer.new(self)
|
||||
add_child(decontamination_layer)
|
||||
|
||||
%AstraDoor.global_position = data.player_spawn
|
||||
player.global_position = data.player_position
|
||||
|
||||
setup_flagged_properties()
|
||||
|
||||
generate_near_chunks(player)
|
||||
|
||||
edit_map_origin()
|
||||
@@ -157,8 +163,6 @@ func edit_map_origin():
|
||||
player_hole_tiles.append(coord + player_tile_position)
|
||||
rock_layer.remove_rocks(player_hole_tiles, true)
|
||||
|
||||
setup_tutorial_doors()
|
||||
|
||||
func remove_chunk(chunk : Chunk):
|
||||
generated_chunks.erase(get_chunk_key(chunk.data.chunk_coord))
|
||||
chunk.unload()
|
||||
@@ -188,17 +192,25 @@ func save():
|
||||
data.player_position = player.global_position
|
||||
GameInfo.save_game_data()
|
||||
|
||||
func setup_tutorial_doors():
|
||||
%AstraDoor.visible = data.tutorial
|
||||
%ShipGarageDoor.visible = data.tutorial
|
||||
if data.tutorial:
|
||||
%AstraDoor.global_position = data.get_random_spawn_position()
|
||||
%AstraDoor.available = false
|
||||
%ShipGarageDoor.available = data.state == RegionData.State.SUCCEEDED
|
||||
data.succeded.connect(
|
||||
func ():
|
||||
%ShipGarageDoor.available = true
|
||||
)
|
||||
func setup_flagged_properties():
|
||||
|
||||
%AstraDoor.visible = false
|
||||
%ShipGarageDoor.visible = false
|
||||
%BoreaDoor.visible = false
|
||||
|
||||
for f in data.flags:
|
||||
match f:
|
||||
"tutorial":
|
||||
%AstraDoor.visible = true
|
||||
%ShipGarageDoor.visible = true
|
||||
%AstraDoor.available = false
|
||||
%ShipGarageDoor.available = data.state == RegionData.State.SUCCEEDED
|
||||
data.succeded.connect(
|
||||
func ():
|
||||
%ShipGarageDoor.available = true
|
||||
)
|
||||
"borea":
|
||||
%BoreaDoor.visible = true
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ class_name RegionData
|
||||
|
||||
enum State {IN_PROGRESS,FAILED,SUCCEEDED}
|
||||
|
||||
signal plant_changing_score(p : PlantData, amount : int)
|
||||
signal updated(region_data : RegionData)
|
||||
signal failed
|
||||
signal succeded
|
||||
@@ -21,10 +20,10 @@ const MAX_RANDOM_SPAWN_DISTANCE = 3000
|
||||
@export var region_level : int = 0
|
||||
@export var day : int = 1
|
||||
@export var entities_saved_data : Array[EntityData] = []
|
||||
@export var score_by_plant : Dictionary[PlantData, int] = {}
|
||||
@export var generated_chunk_entities : Array[Vector2i]
|
||||
@export var tutorial_step : int = 0
|
||||
@export var tutorial = false
|
||||
@export var flags : Array[String] = []
|
||||
@export var plants : Array[PlantData]
|
||||
|
||||
@export var state : State = State.IN_PROGRESS :
|
||||
set(v):
|
||||
@@ -32,7 +31,9 @@ const MAX_RANDOM_SPAWN_DISTANCE = 3000
|
||||
|
||||
@export var chunks_data : Dictionary[String, ChunkData]
|
||||
|
||||
@export var player_position : Vector2i = Region.CHUNK_SIZE/2. * Vector2.ONE + get_random_spawn_position()
|
||||
@export var player_position : Vector2
|
||||
|
||||
@export var player_spawn : Vector2
|
||||
|
||||
@export var charges : int :
|
||||
set(v):
|
||||
@@ -55,13 +56,13 @@ func _init(
|
||||
region_level = parameter.level
|
||||
region_seed = parameter.region_seed
|
||||
|
||||
tutorial = parameter.tutorial
|
||||
flags = parameter.flags
|
||||
player_spawn = get_random_spawn_position()
|
||||
player_position = player_spawn
|
||||
|
||||
func update():
|
||||
if objective > 0 and get_score() >= objective:
|
||||
if state != State.SUCCEEDED:
|
||||
if tutorial:
|
||||
GameInfo.game_data.tutorial_done = true
|
||||
succeded.emit()
|
||||
state = State.SUCCEEDED
|
||||
if state != State.SUCCEEDED and charges == 0:
|
||||
@@ -100,8 +101,8 @@ func get_or_create_chunk_data(coord : Vector2i) -> ChunkData:
|
||||
|
||||
func get_score():
|
||||
var score = 0
|
||||
for plant_data in score_by_plant:
|
||||
score += score_by_plant[plant_data]
|
||||
for pd in plants:
|
||||
score += pd.get_score()
|
||||
return score
|
||||
|
||||
func is_objective_reached():
|
||||
@@ -129,34 +130,24 @@ func end_pass_day():
|
||||
#region ------------------ Plants ------------------
|
||||
|
||||
func add_plant_data(plant_data : PlantData, with_update = true):
|
||||
score_by_plant[plant_data] = 0
|
||||
plants.append(plant_data)
|
||||
plant_data.disappeared.connect(_on_plant_disappeared)
|
||||
plant_data.updated.connect(_on_plant_updated)
|
||||
plant_data.updated.connect(func (_p : PlantData) : update())
|
||||
if with_update:
|
||||
_on_plant_updated(plant_data)
|
||||
|
||||
func _on_plant_updated(plant_data : PlantData):
|
||||
var old_plant_score = score_by_plant[plant_data]
|
||||
score_by_plant[plant_data] = plant_data.get_score()
|
||||
|
||||
|
||||
if old_plant_score != score_by_plant[plant_data]:
|
||||
plant_changing_score.emit(plant_data, score_by_plant[plant_data] - old_plant_score)
|
||||
update()
|
||||
|
||||
func _on_plant_disappeared(plant_data : PlantData):
|
||||
plant_changing_score.emit(plant_data, - score_by_plant[plant_data])
|
||||
score_by_plant.erase(plant_data)
|
||||
print("disappeared")
|
||||
plants = plants.filter(func (p) : return p.random_seed != plant_data.random_seed)
|
||||
update()
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
func get_random_spawn_position():
|
||||
var rng := RandomNumberGenerator.new()
|
||||
rng.seed = region_seed
|
||||
|
||||
return Vector2(
|
||||
var rand_pos = Vector2(
|
||||
rng.randf_range(-MAX_RANDOM_SPAWN_DISTANCE,MAX_RANDOM_SPAWN_DISTANCE),
|
||||
rng.randf_range(-MAX_RANDOM_SPAWN_DISTANCE,MAX_RANDOM_SPAWN_DISTANCE),
|
||||
)
|
||||
) + Region.CHUNK_SIZE/2. * Vector2.ONE
|
||||
|
||||
return rand_pos
|
||||
|
||||
@@ -4,7 +4,7 @@ class_name RegionParameter
|
||||
@export var charges : int
|
||||
@export var objective : int
|
||||
@export var name : String
|
||||
@export var tutorial : bool
|
||||
@export var flags : Array[String]
|
||||
@export var level : int
|
||||
@export var region_seed : int
|
||||
|
||||
@@ -12,13 +12,13 @@ func _init(
|
||||
_charges : int = 10,
|
||||
_objective : int = 10,
|
||||
_name = Random.generate_random_word(),
|
||||
_tutorial = false,
|
||||
_flags : Array[String] = [],
|
||||
_level = 0,
|
||||
_region_seed = randi(),
|
||||
):
|
||||
charges = _charges
|
||||
objective = _objective
|
||||
name = _name
|
||||
tutorial = _tutorial
|
||||
flags = _flags
|
||||
level = _level
|
||||
region_seed = _region_seed
|
||||
region_seed = _region_seed
|
||||
|
||||
Reference in New Issue
Block a user