started research skills
This commit is contained in:
@@ -20,7 +20,7 @@ const BASIC_BUILDING_GROUP = preload("res://data/buildings/basic/basic_building_
|
||||
func _ready() -> void:
|
||||
_add_building_group(BASIC_BUILDING_GROUP)
|
||||
_add_building_group(ADVANCED_BUILDING_GROUP)
|
||||
#building_groups.set_focus()
|
||||
building_groups.grab_focus()
|
||||
|
||||
func _add_building_group(group: BuildingGroup) -> void:
|
||||
building_groups.add_item(group.name, group.atlas_texture)
|
||||
|
||||
@@ -33,6 +33,9 @@ func get_resource() -> GameResource:
|
||||
|
||||
func has_resource() -> bool:
|
||||
return has_layer(Constants.TilemapLayers.ENVIRONMENT)
|
||||
|
||||
func get_building() -> BuildingBase:
|
||||
return layer_info[Constants.TilemapLayers.BUILDINGS] as BuildingBase
|
||||
|
||||
func has_building() -> bool:
|
||||
return has_layer(Constants.TilemapLayers.BUILDINGS)
|
||||
|
||||
@@ -8,6 +8,7 @@ signal gained_resource(res: GameResource)
|
||||
@export var name: String
|
||||
@export var spawn_patterns: Array[SpawnPattern]
|
||||
@export var storage_max: int
|
||||
@export var skills_needed: Array[Skills.ABILITIES] = []
|
||||
|
||||
func _to_string() -> String:
|
||||
return name
|
||||
@@ -17,3 +18,6 @@ func get_spawn_locations() -> Array[Vector2i]:
|
||||
for spawn in spawn_patterns:
|
||||
spawns.append_array(spawn.get_spawn_locations())
|
||||
return spawns
|
||||
|
||||
func can_harvest(skills: Skills) -> bool:
|
||||
return skills.has_skills(skills_needed)
|
||||
|
||||
@@ -9,6 +9,9 @@ var _interaction_options: InteractionWheel
|
||||
var _interacting := false
|
||||
var _attempting_build: Building
|
||||
var _build_placement: Sprite2D
|
||||
var _in_menu := false
|
||||
|
||||
var _skills := Skills.new()
|
||||
|
||||
@onready var sprite: AnimatedSprite2D = $Sprite
|
||||
@onready var interaction_timer: Timer = $InteractionTimer
|
||||
@@ -17,7 +20,7 @@ const BUILD_MENU = preload("res://scene/build_menu.tscn")
|
||||
const BUILDING_BASE = preload("res://data/buildings/building_base.tscn")
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var input_direction := Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||
var input_direction := Input.get_vector("move_left", "move_right", "move_up", "move_down") if not _in_menu else Vector2.ZERO
|
||||
velocity = input_direction * SPEED / delta
|
||||
move_and_slide()
|
||||
|
||||
@@ -39,24 +42,31 @@ func _physics_process(delta: float) -> void:
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("interact"):
|
||||
if _attempting_build and Grid.get_location_data(interaction_location).is_buildable():
|
||||
var interact_data: CellData = Grid.get_location_data(interaction_location)
|
||||
if _attempting_build and interact_data.is_buildable():
|
||||
_build()
|
||||
elif not _interacting and Grid.get_location_data(interaction_location).is_interactable():
|
||||
var interaction = INTERACTION_BAR.instantiate()
|
||||
interaction.interaction_finished.connect(_on_interaction_finished)
|
||||
interaction.grid_position = interaction_location
|
||||
_interacting = true
|
||||
add_sibling(interaction)
|
||||
elif not _interacting and interact_data.is_interactable():
|
||||
if interact_data.has_resource():
|
||||
var interaction = INTERACTION_BAR.instantiate()
|
||||
interaction.interaction_finished.connect(_on_interaction_finished)
|
||||
interaction.grid_position = interaction_location
|
||||
_interacting = true
|
||||
add_sibling(interaction)
|
||||
elif interact_data.has_building():
|
||||
_in_menu = interact_data.get_building().interact(_on_interaction_finished)
|
||||
if event.is_action_pressed("build"):
|
||||
var build_menu = BUILD_MENU.instantiate()
|
||||
build_menu.build.connect(_on_build_menu_build)
|
||||
add_sibling(build_menu)
|
||||
_in_menu = true
|
||||
|
||||
func _on_interaction_finished() -> void:
|
||||
_interacting = false
|
||||
_in_menu = false
|
||||
|
||||
func _on_build_menu_build(building: Building) -> void:
|
||||
print("Building: %s" % building.name)
|
||||
_in_menu = false
|
||||
_attempting_build = building
|
||||
_build_placement = Sprite2D.new()
|
||||
_build_placement.texture = _attempting_build.atlas_texture
|
||||
@@ -66,8 +76,8 @@ func _on_build_menu_build(building: Building) -> void:
|
||||
func _build() -> void:
|
||||
ResourceManager.use_resources(_attempting_build.cost)
|
||||
var build: BuildingBase = BUILDING_BASE.instantiate()
|
||||
build.initialize(_attempting_build, interaction_location)
|
||||
add_sibling(build)
|
||||
build.initialize(_attempting_build, interaction_location)
|
||||
Grid.change_location_building(interaction_location, build)
|
||||
|
||||
if not ResourceManager.has_resources(_attempting_build.cost):
|
||||
|
||||
53
scripts/research_menu.gd
Normal file
53
scripts/research_menu.gd
Normal file
@@ -0,0 +1,53 @@
|
||||
extends CanvasLayer
|
||||
|
||||
signal research(research: Research)
|
||||
|
||||
var researches: Array[Research] = []
|
||||
var selected_research: Research
|
||||
|
||||
const GEM_RESEARCH = preload("res://data/research/gem_research.tres")
|
||||
|
||||
@onready var research_items: ItemList = %ResearchItems
|
||||
|
||||
@onready var title: Label = %Title
|
||||
@onready var description: Label = %Description
|
||||
@onready var research_materials: GridContainer = %ResearchMaterials
|
||||
@onready var research_buttons_container: HBoxContainer = %ResearchButtonsContainer
|
||||
|
||||
func _ready() -> void:
|
||||
_add_research(GEM_RESEARCH)
|
||||
research_items.grab_focus()
|
||||
|
||||
func _add_research(group: Research) -> void:
|
||||
research_items.add_item(group.name, group.atlas_texture)
|
||||
researches.append(group)
|
||||
|
||||
func _on_research_selected(index: int) -> void:
|
||||
selected_research = researches[index]
|
||||
title.text = selected_research.name
|
||||
description.text = selected_research.description
|
||||
|
||||
for child in research_materials.get_children():
|
||||
child.queue_free()
|
||||
for res: GameResource in selected_research.cost.keys():
|
||||
var image = TextureRect.new()
|
||||
var texture = AtlasTexture.new()
|
||||
texture.atlas = preload("res://assets/scifi_tilesheet@2.png")
|
||||
texture.region = Rect2(64 * res.atlas_location, Vector2(64, 64))
|
||||
image.texture = texture
|
||||
research_materials.add_child(image)
|
||||
var label = Label.new()
|
||||
label.text = str(selected_research.cost[res])
|
||||
if not ResourceManager.has_amount(res, selected_research.cost[res]):
|
||||
label.add_theme_color_override("font_color", Color.RED)
|
||||
research_materials.add_child(label)
|
||||
|
||||
description.show()
|
||||
research_materials.show()
|
||||
research_buttons_container.show()
|
||||
|
||||
|
||||
func _on_build_button_pressed() -> void:
|
||||
if selected_research:
|
||||
research.emit(selected_research)
|
||||
queue_free()
|
||||
18
scripts/skills.gd
Normal file
18
scripts/skills.gd
Normal file
@@ -0,0 +1,18 @@
|
||||
class_name Skills
|
||||
extends Resource
|
||||
|
||||
enum ABILITIES { HARVEST_GEM, CORRUPT_RESOURCE, CORRUPT_BUILDING }
|
||||
|
||||
var _aquired_skills: Array[ABILITIES] = []
|
||||
|
||||
func aquire_skill(skill: ABILITIES) -> void:
|
||||
_aquired_skills.append(skill)
|
||||
|
||||
func has_skill(skill: ABILITIES) -> bool:
|
||||
return _aquired_skills.has(skill)
|
||||
|
||||
func has_skills(skills: Array[ABILITIES]) -> bool:
|
||||
var _has_skills = true
|
||||
for skill: ABILITIES in skills:
|
||||
_has_skills = _has_skills and has_skill(skill)
|
||||
return _has_skills
|
||||
Reference in New Issue
Block a user