Rewritten quest base
This commit is contained in:
parent
1ea6c2d296
commit
37cd28d611
4 changed files with 84 additions and 26 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=10 format=3 uid="uid://crq284yed2if5"]
|
[gd_scene load_steps=11 format=3 uid="uid://crq284yed2if5"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scripts/Base/base_menu.gd" id="1_3hgu4"]
|
[ext_resource type="Script" path="res://scripts/Base/base_menu.gd" id="1_3hgu4"]
|
||||||
[ext_resource type="Theme" uid="uid://dmb8bcdghdjd" path="res://main_theme.tres" id="1_p1gsn"]
|
[ext_resource type="Theme" uid="uid://dmb8bcdghdjd" path="res://main_theme.tres" id="1_p1gsn"]
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
[ext_resource type="Resource" uid="uid://2ohcxoor22hr" path="res://menus/Base Menu/root_menu.tres" id="6_78in3"]
|
[ext_resource type="Resource" uid="uid://2ohcxoor22hr" path="res://menus/Base Menu/root_menu.tres" id="6_78in3"]
|
||||||
[ext_resource type="Script" path="res://scripts/Base/Menu/close_button.gd" id="8_1k57w"]
|
[ext_resource type="Script" path="res://scripts/Base/Menu/close_button.gd" id="8_1k57w"]
|
||||||
[ext_resource type="Script" path="res://scripts/Base/Menu/buy_sell.gd" id="9_u6g71"]
|
[ext_resource type="Script" path="res://scripts/Base/Menu/buy_sell.gd" id="9_u6g71"]
|
||||||
|
[ext_resource type="Script" path="res://scripts/Base/Menu/quest.gd" id="10_3dg7h"]
|
||||||
|
|
||||||
[node name="BaseMenu" type="Control"]
|
[node name="BaseMenu" type="Control"]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
|
|
@ -188,4 +189,7 @@ script = ExtResource("8_1k57w")
|
||||||
[node name="BuySell" type="Node" parent="."]
|
[node name="BuySell" type="Node" parent="."]
|
||||||
script = ExtResource("9_u6g71")
|
script = ExtResource("9_u6g71")
|
||||||
|
|
||||||
|
[node name="Quest" type="Node" parent="."]
|
||||||
|
script = ExtResource("10_3dg7h")
|
||||||
|
|
||||||
[connection signal="button_up" from="MenuBackground/CloseButtonBack/CloseButton" to="MenuBackground/CloseButtonBack/CloseButton" method="_on_button_up"]
|
[connection signal="button_up" from="MenuBackground/CloseButtonBack/CloseButton" to="MenuBackground/CloseButtonBack/CloseButton" method="_on_button_up"]
|
||||||
|
|
|
||||||
12
scripts/Base/Menu/quest.gd
Normal file
12
scripts/Base/Menu/quest.gd
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var base: Base
|
||||||
|
|
||||||
|
var quest: Quest
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
get_tree().create_timer(0.05).timeout.connect(fetch_quest)
|
||||||
|
|
||||||
|
func fetch_quest():
|
||||||
|
base = get_parent().base
|
||||||
|
quest = base.quest
|
||||||
|
|
@ -25,6 +25,9 @@ signal dock_requested
|
||||||
## List of items that this base buys
|
## List of items that this base buys
|
||||||
@export var items_on_buy: Array[Item]
|
@export var items_on_buy: Array[Item]
|
||||||
|
|
||||||
|
## Quest that is given on this base
|
||||||
|
@export var quest: Quest
|
||||||
|
|
||||||
## List of prices for items that this base sells
|
## List of prices for items that this base sells
|
||||||
var sell_prices: Array[float]
|
var sell_prices: Array[float]
|
||||||
## List of prices for items that this base buys
|
## List of prices for items that this base buys
|
||||||
|
|
|
||||||
|
|
@ -1,41 +1,80 @@
|
||||||
|
extends Resource
|
||||||
|
|
||||||
class_name Quest
|
class_name Quest
|
||||||
|
|
||||||
enum TYPE {ELIMINATION, DELIVERY, ESCORT, RACE, DIVERSE}
|
## Type of quest
|
||||||
enum RESTRICTIONS{NO_DEATHS,NO_WEAPON,TIMER}
|
enum Type {
|
||||||
|
## eliminate N amount of targets
|
||||||
|
Elimination,
|
||||||
|
## reach another base without deaths
|
||||||
|
Delivery,
|
||||||
|
## Escort ship to another base
|
||||||
|
Escort,
|
||||||
|
## Finish race on 1st place
|
||||||
|
Race,
|
||||||
|
## Successfully complete minigame
|
||||||
|
Diverse
|
||||||
|
}
|
||||||
|
|
||||||
var type : Quest.TYPE = Quest.TYPE.ELIMINATION
|
## Quest will fail if player breaks restrictions
|
||||||
var progress_max : int = 1
|
enum Restriction{
|
||||||
var progress : int = 0
|
## Fails if player gets destroyed
|
||||||
var reward_money : float
|
NoDeaths,
|
||||||
var restrictions : Array[RESTRICTIONS] = []
|
## Fails if player uses weapon
|
||||||
var data : Dictionary = {}
|
NoWeapon,
|
||||||
var new : bool = true
|
## Fails if timer reaches zero
|
||||||
|
Timer
|
||||||
|
}
|
||||||
|
|
||||||
|
## Quest status
|
||||||
|
enum Status{
|
||||||
|
## Quest is not given to player
|
||||||
|
Idle,
|
||||||
|
## Quest is given to player
|
||||||
|
Taken,
|
||||||
|
## Player can take reward for this quest
|
||||||
|
Reward
|
||||||
|
}
|
||||||
|
|
||||||
|
@export var type : Type = Type.Elimination
|
||||||
|
@export var progress_max : int = 1
|
||||||
|
var progress : int = 0:
|
||||||
|
set(value):
|
||||||
|
if value >= progress_max:
|
||||||
|
quest_ended.emit(true)
|
||||||
|
@export var reward_money : float
|
||||||
|
@export var restrictions : Array[Restriction] = []
|
||||||
|
@export var data : Dictionary = {}
|
||||||
|
@export var status: Status
|
||||||
|
|
||||||
|
## Emits when quest was given to player
|
||||||
signal quest_added
|
signal quest_added
|
||||||
|
## Emits when quest ends succesfully
|
||||||
signal quest_ended
|
signal quest_ended
|
||||||
|
## Emits when quest fails
|
||||||
signal quest_failed
|
signal quest_failed
|
||||||
|
|
||||||
func create(type : TYPE, progress_max : int, reward_money : float, restrictions : Array[RESTRICTIONS] = [], data : Dictionary = {}) -> void:
|
## Creates quest with given parameters
|
||||||
self.type = type
|
static func create(type : Type, progress_max : int, reward_money : float, restrictions : Array[Restriction] = [], data : Dictionary = {}) -> void:
|
||||||
self.progress_max = progress_max
|
var quest = Quest.new()
|
||||||
self.reward_money = reward_money
|
quest.type = type
|
||||||
self.restrictions = restrictions
|
quest.progress_max = progress_max
|
||||||
self.data = data
|
quest.reward_money = reward_money
|
||||||
quest_added.emit(self)
|
quest.restrictions = restrictions
|
||||||
self.new = false
|
quest.data = data
|
||||||
|
quest.status = Status.Taken
|
||||||
|
quest.quest_added.emit(quest)
|
||||||
|
|
||||||
|
## Progress by quest
|
||||||
func do_progress() -> void:
|
func do_progress() -> void:
|
||||||
progress += 1
|
progress += 1
|
||||||
if progress >= progress_max:
|
|
||||||
quest_ended.emit(true)
|
|
||||||
|
|
||||||
|
## Fail quest
|
||||||
func fail() -> void:
|
func fail() -> void:
|
||||||
quest_failed.emit(false)
|
quest_failed.emit(false)
|
||||||
|
status = Status.Idle
|
||||||
|
|
||||||
func _restriction_no_deaths() -> void:
|
## Trigger restriction
|
||||||
if restrictions.has(RESTRICTIONS.NO_DEATHS):
|
func trigger_restriction(restriction: Restriction) -> void:
|
||||||
fail()
|
if restrictions.has(restriction):
|
||||||
|
|
||||||
func _restriction_no_weapon() -> void:
|
|
||||||
if restrictions.has(RESTRICTIONS.NO_WEAPON):
|
|
||||||
fail()
|
fail()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue