mirror of
https://github.com/Steffo99/swear-jar.git
synced 2024-11-25 00:54:19 +00:00
Start work on ShopItem
This commit is contained in:
parent
8b490f9fb8
commit
432d82af55
4 changed files with 49 additions and 31 deletions
31
game/shop_item.gd
Normal file
31
game/shop_item.gd
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
extends Node
|
||||||
|
class_name ShopItem
|
||||||
|
|
||||||
|
|
||||||
|
## The name of the item to display in the shop.
|
||||||
|
@export var title_text: String
|
||||||
|
|
||||||
|
## The description of the item to display in the shop.
|
||||||
|
@export var description_text: String
|
||||||
|
|
||||||
|
## The cost of the item to display in the shop.
|
||||||
|
@export var cost_text: String
|
||||||
|
|
||||||
|
## The item type to collect to purchase the item.
|
||||||
|
##
|
||||||
|
## If null, counts the items' value.
|
||||||
|
@export var cost_tag: StringPath
|
||||||
|
|
||||||
|
## The quantity of items to collect to purchase the item.
|
||||||
|
##
|
||||||
|
## If cost_tag is null, counts the items' value.
|
||||||
|
@export var cost_quantity: int
|
||||||
|
|
||||||
|
## The shape that the ghost should use to determine if the item's placement is valid.
|
||||||
|
##
|
||||||
|
## Concave shapes might have problems interacting with the placeable area.
|
||||||
|
@export var placement_shape: Shape2D
|
||||||
|
|
||||||
|
|
||||||
|
## What to do when this item is purchased.
|
||||||
|
signal on_purchase
|
|
@ -30,47 +30,25 @@ class_name Ghost
|
||||||
## The [Sprite2D] node previewing the scene.
|
## The [Sprite2D] node previewing the scene.
|
||||||
@onready var preview_sprite: Sprite2D = $PlacementShape/PreviewSprite
|
@onready var preview_sprite: Sprite2D = $PlacementShape/PreviewSprite
|
||||||
|
|
||||||
## The collision mask of objects that should prevent this object's placement.
|
|
||||||
@export_flags_2d_physics var collision_mask_prevent_placement: int
|
|
||||||
|
|
||||||
## The collision mask of objects that should be deleted on this object's placement.
|
var can_place: bool = false
|
||||||
@export_flags_2d_physics var collision_mask_delete_placement: int
|
|
||||||
|
|
||||||
## The texture that the preview sprite should display.
|
|
||||||
@export var preview_texture: Texture2D:
|
|
||||||
get:
|
|
||||||
return preview_texture
|
|
||||||
set(value):
|
|
||||||
preview_texture = value
|
|
||||||
# Quick priority fix
|
|
||||||
if preview_sprite:
|
|
||||||
preview_sprite.texture = value
|
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
collision_mask = collision_mask_prevent_placement | collision_mask_delete_placement
|
# Initialize the Area's collision mask
|
||||||
preview_sprite.texture = preview_texture
|
collision_mask = overlap_checker.collision_mask | placeable_area_checker.collision_mask | overlap_freer.collision_mask
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(_delta: float):
|
|
||||||
# Update collision
|
|
||||||
update_can_place()
|
|
||||||
|
|
||||||
|
|
||||||
var can_place: bool:
|
|
||||||
get:
|
|
||||||
return can_place
|
|
||||||
set(value):
|
|
||||||
can_place = value
|
|
||||||
modulate = valid_color if value else invalid_color
|
|
||||||
|
|
||||||
|
|
||||||
## Update the value of [can_place].
|
## Update the value of [can_place].
|
||||||
|
func update_state():
|
||||||
# DIRTY HACK: Relies on the placeable area being perfectly surrounded by solid bodies.
|
# DIRTY HACK: Relies on the placeable area being perfectly surrounded by solid bodies.
|
||||||
func update_can_place() -> void:
|
|
||||||
can_place = overlap_checker.is_overlapping_with == null and placeable_area_checker.is_overlapping_with != null
|
can_place = overlap_checker.is_overlapping_with == null and placeable_area_checker.is_overlapping_with != null
|
||||||
|
|
||||||
|
|
||||||
|
func set_to_shop_item(si: ShopItem):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
func materialize():
|
func materialize():
|
||||||
# Compatibility stub for Instantiator
|
# Compatibility stub for Instantiator
|
||||||
if not can_place:
|
if not can_place:
|
||||||
|
|
|
@ -13,6 +13,8 @@ collision_layer = 0
|
||||||
collision_mask = 4294967295
|
collision_mask = 4294967295
|
||||||
input_pickable = false
|
input_pickable = false
|
||||||
script = ExtResource("1_1bq64")
|
script = ExtResource("1_1bq64")
|
||||||
|
valid_color = null
|
||||||
|
invalid_color = null
|
||||||
collision_mask_prevent_placement = 16
|
collision_mask_prevent_placement = 16
|
||||||
collision_mask_delete_placement = 4
|
collision_mask_delete_placement = 4
|
||||||
|
|
||||||
|
@ -37,3 +39,4 @@ z_index = 10
|
||||||
[connection signal="area_exited" from="." to="PlaceableAreaChecker" method="update_is_overlapping_with"]
|
[connection signal="area_exited" from="." to="PlaceableAreaChecker" method="update_is_overlapping_with"]
|
||||||
[connection signal="body_entered" from="." to="OverlapChecker" method="update_is_overlapping_with"]
|
[connection signal="body_entered" from="." to="OverlapChecker" method="update_is_overlapping_with"]
|
||||||
[connection signal="body_exited" from="." to="OverlapChecker" method="update_is_overlapping_with"]
|
[connection signal="body_exited" from="." to="OverlapChecker" method="update_is_overlapping_with"]
|
||||||
|
[connection signal="overlap_changing" from="OverlapChecker" to="." method="update_state"]
|
||||||
|
|
|
@ -2,6 +2,12 @@ extends Node
|
||||||
class_name PlaceableAreaChecker
|
class_name PlaceableAreaChecker
|
||||||
|
|
||||||
|
|
||||||
|
## Layers to consider when checking overlap with [PhysicBody2D].
|
||||||
|
##
|
||||||
|
## Ignored during the actual collision check, just used to expand it in the Ghost's initialization phase.
|
||||||
|
@export_flags_2d_physics var overlap_mask: int
|
||||||
|
|
||||||
|
|
||||||
## The [Area2D] this script should act on.
|
## The [Area2D] this script should act on.
|
||||||
@onready var target: Area2D = get_parent()
|
@onready var target: Area2D = get_parent()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue