start of tossing system

This commit is contained in:
Haze Weathers 2024-09-22 14:17:54 -04:00
parent f5999da412
commit dc2a1a78f3
12 changed files with 193 additions and 38 deletions

View file

@ -0,0 +1,17 @@
shader_type canvas_item;
uniform bool outline_enabled = false;
uniform vec3 outline_color : source_color = vec3(1.0);
void fragment() {
COLOR = texture(TEXTURE, UV);
if (outline_enabled) {
float border = texture(TEXTURE, UV + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
border += texture(TEXTURE, UV - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
border += texture(TEXTURE, UV + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
border += texture(TEXTURE, UV - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
float final = step(sign(border), sign(COLOR.a));
COLOR = vec4(vec3(mix(outline_color, COLOR.rgb, final)), step(final, COLOR.a));
}
}

View file

@ -0,0 +1,81 @@
[gd_resource type="VisualShader" load_steps=4 format=3 uid="uid://cyfnxkbtd6ehn"]
[sub_resource type="VisualShaderNodeExpression" id="VisualShaderNodeExpression_pnln1"]
size = Vector2(400, 260)
expression = "float base = texture(tex, uv).a;
border = texture(tex, uv + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
border += texture(tex, uv - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
border += texture(tex, uv + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
border += texture(tex, uv - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
if (base < 0.5 && border > 0.5) {
border = 1.0;
} else {
border = 0.0;
}"
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_dxtqj"]
input_name = "texture"
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_ebc8y"]
output_port_for_preview = 0
input_name = "uv"
[resource]
code = "shader_type canvas_item;
render_mode blend_mix;
void fragment() {
// Input:4
vec2 n_out4p0 = UV;
float n_out2p0;
// Expression:2
n_out2p0 = 0.0;
{
float base = texture(TEXTURE, n_out4p0).a;
n_out2p0 = texture(TEXTURE, n_out4p0 + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
n_out2p0 += texture(TEXTURE, n_out4p0 - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
n_out2p0 += texture(TEXTURE, n_out4p0 + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
n_out2p0 += texture(TEXTURE, n_out4p0 - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
if (base < 0.5 && n_out2p0 > 0.5) {
n_out2p0 = 1.0;
} else {
n_out2p0 = 0.0;
}
}
// Output:0
COLOR.rgb = vec3(n_out2p0);
}
"
graph_offset = Vector2(29.7429, 470.485)
mode = 1
flags/light_only = false
nodes/fragment/0/position = Vector2(500, 360)
nodes/fragment/2/node = SubResource("VisualShaderNodeExpression_pnln1")
nodes/fragment/2/position = Vector2(80, 380)
nodes/fragment/2/size = Vector2(400, 260)
nodes/fragment/2/input_ports = "0,8,tex;1,3,uv;"
nodes/fragment/2/output_ports = "0,0,border;"
nodes/fragment/2/expression = "float base = texture(tex, uv).a;
border = texture(tex, uv + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
border += texture(tex, uv - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a;
border += texture(tex, uv + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
border += texture(tex, uv - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a;
if (base < 0.5 && border > 0.5) {
border = 1.0;
} else {
border = 0.0;
}"
nodes/fragment/3/node = SubResource("VisualShaderNodeInput_dxtqj")
nodes/fragment/3/position = Vector2(-160, 340)
nodes/fragment/4/node = SubResource("VisualShaderNodeInput_ebc8y")
nodes/fragment/4/position = Vector2(-180, 420)
nodes/fragment/connections = PackedInt32Array(3, 0, 2, 0, 4, 0, 2, 1, 2, 0, 0, 0)

View file

@ -22,6 +22,7 @@ var input_dir: float = 0.0
var aim_back_arm: bool = false
var _was_on_floor: bool = true
var _highlighted_pickup: Pickup = null
func _ready() -> void:
@ -117,3 +118,17 @@ func _airborn_physics_process(delta: float) -> void:
velocity += get_gravity() * delta
#endregion
#endregion
#region Collision Signals
func _on_pickup_area_entered(area: Area2D) -> void:
if not _highlighted_pickup:
_highlighted_pickup = area.get_parent() as Pickup
_highlighted_pickup.highlight = true
func _on_pickup_area_exited(area: Area2D) -> void:
if _highlighted_pickup == (area.get_parent() as Pickup):
_highlighted_pickup.highlight = false
_highlighted_pickup = null
#endregion

View file

@ -23,8 +23,8 @@
[ext_resource type="Texture2D" uid="uid://d1qyuom3pxifj" path="res://textures/player/foot_front.png" id="12_dda5a"]
[ext_resource type="Texture2D" uid="uid://cssnogcrn57xv" path="res://textures/player/skirt.png" id="13_qgkik"]
[sub_resource type="Animation" id="Animation_6roai"]
resource_name = "stand"
[sub_resource type="Animation" id="Animation_7ampj"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@ -206,8 +206,8 @@ tracks/14/keys = {
"values": [Vector2(1, 6)]
}
[sub_resource type="Animation" id="Animation_7ampj"]
length = 0.001
[sub_resource type="Animation" id="Animation_6roai"]
resource_name = "stand"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@ -637,6 +637,14 @@ position = Vector2(-0.5, -16)
shape = SubResource("RectangleShape2D_wydm2")
debug_color = Color(0.720957, 0.248475, 1, 0.42)
[node name="PickupDetector" type="Area2D" parent="."]
unique_name_in_owner = true
collision_layer = 0
collision_mask = 128
monitorable = false
[node name="Camera2D" type="Camera2D" parent="."]
[node name="Graphics" type="Node2D" parent="."]
unique_name_in_owner = true
@ -872,8 +880,8 @@ delay_in_seconds = "0.0"
editor_description = "Performs no movement."
script = ExtResource("5_8e8ei")
[node name="Camera2D" type="Camera2D" parent="."]
[connection signal="area_entered" from="PickupDetector" to="." method="_on_pickup_area_entered"]
[connection signal="area_exited" from="PickupDetector" to="." method="_on_pickup_area_exited"]
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active" to="." method="_active_physics_process"]
[connection signal="child_state_entered" from="StateChart/Root/Movement/Active/Grounded" to="." method="_grounded_child_state_entered"]
[connection signal="state_entered" from="StateChart/Root/Movement/Active/Grounded/Standing" to="." method="_standing_entered"]

View file

@ -1,18 +1,27 @@
[gd_scene load_steps=4 format=3 uid="uid://dlnu4b8eydxui"]
[gd_scene load_steps=6 format=3 uid="uid://dlnu4b8eydxui"]
[ext_resource type="PackedScene" uid="uid://ccyfbp8cypnyy" path="res://objects/weapons/projectiles/throwable.tscn" id="1_4sas3"]
[ext_resource type="PackedScene" uid="uid://ccyfbp8cypnyy" path="res://objects/weapons/projectiles/pickup.tscn" id="1_4sas3"]
[ext_resource type="Texture2D" uid="uid://bd3mcp3gds2vg" path="res://textures/projectiles/brick.png" id="2_evkjl"]
[ext_resource type="Shader" path="res://assets/shaders/outline.gdshader" id="2_irmt4"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_gpkcl"]
resource_local_to_scene = true
shader = ExtResource("2_irmt4")
shader_parameter/outline_enabled = false
shader_parameter/outline_color = Color(0.358343, 0.568333, 0.699081, 1)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_7kw5j"]
size = Vector2(6, 4)
[node name="Brick" instance=ExtResource("1_4sas3")]
material = SubResource("ShaderMaterial_gpkcl")
[node name="Sprite2D" type="Sprite2D" parent="." index="0"]
use_parent_material = true
texture = ExtResource("2_evkjl")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="1"]
shape = SubResource("RectangleShape2D_7kw5j")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Interactable" index="0"]
[node name="CollisionShape2D2" type="CollisionShape2D" parent="Pickup" index="0"]
shape = SubResource("RectangleShape2D_7kw5j")

View file

@ -0,0 +1,17 @@
class_name Pickup
extends RigidBody2D
var highlight: bool:
set(value):
material.set_shader_parameter(&"outline_enabled", value)
get():
return material.get_shader_parameter(&"outline_enabled")
func _ready() -> void:
pass
func pick_up() -> void:
freeze = true

View file

@ -0,0 +1,21 @@
[gd_scene load_steps=4 format=3 uid="uid://ccyfbp8cypnyy"]
[ext_resource type="Shader" path="res://assets/shaders/outline.gdshader" id="1_d8t6k"]
[ext_resource type="Script" path="res://objects/weapons/projectiles/pickup.gd" id="2_wyw28"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ocln2"]
resource_local_to_scene = true
shader = ExtResource("1_d8t6k")
shader_parameter/outline_enabled = false
shader_parameter/outline_color = Color(0.358343, 0.568333, 0.699081, 1)
[node name="Pickup" type="RigidBody2D"]
material = SubResource("ShaderMaterial_ocln2")
collision_layer = 8
script = ExtResource("2_wyw28")
[node name="Pickup" type="Area2D" parent="."]
collision_layer = 128
collision_mask = 256
input_pickable = false
monitoring = false

View file

@ -1,12 +0,0 @@
class_name Throwable
extends RigidBody2D
func _ready() -> void:
pass
func _on_interacted(user: Node) -> void:
var player = user as Player
if player:
player.pick_up(self)

View file

@ -1,16 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://ccyfbp8cypnyy"]
[ext_resource type="Script" path="res://objects/weapons/projectiles/throwable.gd" id="1_dsh6j"]
[ext_resource type="Script" path="res://objects/interactable.gd" id="2_b3de0"]
[node name="Throwable" type="RigidBody2D"]
script = ExtResource("1_dsh6j")
[node name="Interactable" type="Area2D" parent="."]
collision_layer = 64
collision_mask = 0
input_pickable = false
monitoring = false
script = ExtResource("2_b3de0")
[connection signal="interacted" from="Interactable" to="." method="_on_interacted"]

View file

@ -87,6 +87,8 @@ interact={
2d_physics/layer_5="hitbox"
2d_physics/layer_6="hurtbox"
2d_physics/layer_7="interactable"
2d_physics/layer_8="pickup"
2d_physics/layer_9="player_pickup"
[rendering]

View file

@ -1,12 +1,19 @@
[gd_scene load_steps=5 format=3 uid="uid://1hsgdbtvb8tt"]
[gd_scene load_steps=8 format=3 uid="uid://1hsgdbtvb8tt"]
[ext_resource type="PackedScene" uid="uid://dfx8h6eplcm6t" path="res://objects/player/player.tscn" id="1_a3fvc"]
[ext_resource type="PackedScene" uid="uid://bcwkugn6v3oy7" path="res://addons/godot_state_charts/utilities/state_chart_debugger.tscn" id="1_no0gr"]
[ext_resource type="Texture2D" uid="uid://e6ubhnakxe0i" path="res://icon.svg" id="2_8xgwn"]
[ext_resource type="PackedScene" uid="uid://dlnu4b8eydxui" path="res://objects/weapons/projectiles/brick.tscn" id="4_7tv2f"]
[ext_resource type="Shader" path="res://assets/shaders/outline.gdshader" id="5_732g5"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_yvk4l"]
size = Vector2(265, 20)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_oufer"]
resource_local_to_scene = true
shader = ExtResource("5_732g5")
shader_parameter/outline_color = Color(0.358343, 0.568333, 0.699081, 1)
[node name="TestScene" type="Node2D"]
[node name="Background" type="CanvasLayer" parent="."]
@ -25,6 +32,7 @@ position = Vector2(196, 151)
[node name="StaticBody2D" type="StaticBody2D" parent="."]
position = Vector2(168, 225)
rotation = -0.188756
[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
position = Vector2(2.5, 0)
@ -41,3 +49,8 @@ visible = false
[node name="StateChartDebugger" parent="CanvasLayer" instance=ExtResource("1_no0gr")]
offset_right = -159.0
initial_node_to_watch = NodePath("../../Player")
[node name="Brick" parent="." instance=ExtResource("4_7tv2f")]
material = SubResource("ShaderMaterial_oufer")
position = Vector2(272, 121)
rotation = -1.62322

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 4.4 KiB

Before After
Before After