bloodstain improvements. work during pause for player, vastly more efficient
This commit is contained in:
parent
686b57f798
commit
6f6c5d06e1
9 changed files with 59 additions and 18 deletions
17
autoloads/stain_layer.gd
Normal file
17
autoloads/stain_layer.gd
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
extends Light2D
|
||||||
|
|
||||||
|
|
||||||
|
onready var viewport: Viewport = $Viewport
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
var main_viewport = get_viewport()
|
||||||
|
if viewport.canvas_transform != main_viewport.canvas_transform:
|
||||||
|
viewport.canvas_transform = main_viewport.canvas_transform
|
||||||
|
transform = main_viewport.canvas_transform.inverse()
|
||||||
|
viewport.render_target_update_mode = Viewport.UPDATE_ONCE
|
||||||
|
|
||||||
|
|
||||||
|
func add_stain(stain: Node2D) -> void:
|
||||||
|
viewport.add_child(stain)
|
||||||
|
viewport.render_target_update_mode = Viewport.UPDATE_ONCE
|
21
autoloads/stain_layer.tscn
Normal file
21
autoloads/stain_layer.tscn
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://autoloads/stain_layer.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="ViewportTexture" id=1]
|
||||||
|
viewport_path = NodePath("Viewport")
|
||||||
|
|
||||||
|
[node name="StainLight" type="Light2D" groups=["viewport_autoload"]]
|
||||||
|
texture = SubResource( 1 )
|
||||||
|
offset = Vector2( 128, 96 )
|
||||||
|
mode = 2
|
||||||
|
range_item_cull_mask = 2
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="Viewport" type="Viewport" parent="."]
|
||||||
|
size = Vector2( 256, 192 )
|
||||||
|
transparent_bg = true
|
||||||
|
disable_3d = true
|
||||||
|
usage = 1
|
||||||
|
render_target_v_flip = true
|
||||||
|
render_target_update_mode = 1
|
|
@ -10,7 +10,7 @@ export var spray_velocity: float = 80
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
for i in spray_ammount:
|
for i in spray_ammount:
|
||||||
var spray: RigidBody2D = BloodSpray.instance()
|
var spray = BloodSpray.instance()
|
||||||
spray.global_position = global_position
|
spray.global_position = global_position
|
||||||
spray.linear_velocity = Vector2(spray_velocity, 0.0).rotated(randf() * TAU)
|
spray.velocity = Vector2(randf() * spray_velocity, 0.0).rotated(randf() * TAU)
|
||||||
get_parent().add_child(spray)
|
get_parent().add_child(spray)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extends RigidBody2D
|
extends Area2D
|
||||||
|
|
||||||
|
|
||||||
const BloodStain := preload("res://objects/environment/blood/blood_stain.tscn")
|
const BloodStain := preload("res://objects/environment/blood/blood_stain.tscn")
|
||||||
|
@ -7,6 +7,9 @@ const BloodStain := preload("res://objects/environment/blood/blood_stain.tscn")
|
||||||
export var color: Color = Color(0xf53342ff)
|
export var color: Color = Color(0xf53342ff)
|
||||||
|
|
||||||
|
|
||||||
|
var velocity := Vector2.ZERO
|
||||||
|
|
||||||
|
|
||||||
onready var sprite: Sprite = $Sprite
|
onready var sprite: Sprite = $Sprite
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,15 +18,17 @@ func _ready() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
sprite.global_rotation = linear_velocity.angle()
|
velocity.y += 98.0 * delta
|
||||||
|
position += velocity * delta
|
||||||
|
sprite.global_rotation = velocity.angle()
|
||||||
|
|
||||||
|
|
||||||
func _on_body_entered(body: Node) -> void:
|
func _on_body_entered(body: Node) -> void:
|
||||||
if body.is_in_group("can_stain"):
|
if body.is_in_group("can_stain"):
|
||||||
var stain = BloodStain.instance()
|
var stain = BloodStain.instance()
|
||||||
stain.color = color
|
stain.modulate = color
|
||||||
stain.global_position = global_position
|
stain.global_position = global_position
|
||||||
body.add_child(stain)
|
StainLayer.add_stain(stain)
|
||||||
queue_free()
|
queue_free()
|
||||||
elif body is TileMap:
|
elif body is TileMap:
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -4,11 +4,9 @@
|
||||||
[ext_resource path="res://objects/environment/blood/blood_spray.gd" type="Script" id=3]
|
[ext_resource path="res://objects/environment/blood/blood_spray.gd" type="Script" id=3]
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id=1]
|
[sub_resource type="CircleShape2D" id=1]
|
||||||
radius = 1.0
|
radius = 0.5
|
||||||
|
|
||||||
[node name="BloodSpray" type="RigidBody2D"]
|
[node name="BloodSpray" type="Area2D"]
|
||||||
contacts_reported = 4
|
|
||||||
contact_monitor = true
|
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extends Light2D
|
extends Sprite
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
|
|
@ -3,10 +3,7 @@
|
||||||
[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=1]
|
[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://objects/environment/blood/blood_stain.gd" type="Script" id=2]
|
[ext_resource path="res://objects/environment/blood/blood_stain.gd" type="Script" id=2]
|
||||||
|
|
||||||
[node name="BloodStain" type="Light2D"]
|
[node name="BloodStain" type="Sprite"]
|
||||||
light_mask = 3
|
light_mask = 3
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
color = Color( 0.960784, 0.2, 0.258824, 1 )
|
|
||||||
mode = 2
|
|
||||||
range_item_cull_mask = 2
|
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
|
@ -277,9 +277,11 @@ func _on_Dead_state_entered() -> void:
|
||||||
particles.emitting = true
|
particles.emitting = true
|
||||||
get_parent().add_child(particles)
|
get_parent().add_child(particles)
|
||||||
for i in 16:
|
for i in 16:
|
||||||
var spray: RigidBody2D = BloodSpray.instance()
|
var spray = BloodSpray.instance()
|
||||||
spray.global_position = global_position
|
spray.pause_mode = PAUSE_MODE_PROCESS
|
||||||
spray.linear_velocity = Vector2(80.0, 0.0).rotated(randf() * TAU)
|
Physics2DServer.set_active(true)
|
||||||
|
spray.global_position = death_splatter_position.global_position
|
||||||
|
spray.velocity = Vector2(randf() * 80.0, 0.0).rotated(randf() * TAU)
|
||||||
get_parent().add_child(spray)
|
get_parent().add_child(spray)
|
||||||
else:
|
else:
|
||||||
skip_blood = false
|
skip_blood = false
|
||||||
|
|
|
@ -81,6 +81,7 @@ TouchControls="*res://autoloads/touch_controls.tscn"
|
||||||
SceneManager="*res://autoloads/scene_manager.tscn"
|
SceneManager="*res://autoloads/scene_manager.tscn"
|
||||||
Console="*res://autoloads/console.tscn"
|
Console="*res://autoloads/console.tscn"
|
||||||
Fade="*res://autoloads/fade.tscn"
|
Fade="*res://autoloads/fade.tscn"
|
||||||
|
StainLayer="*res://autoloads/stain_layer.tscn"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue