Misc fixes and tweaks to many demos

This commit is contained in:
Aaron Franke
2020-06-26 18:53:08 -04:00
parent 343669ca06
commit 189d6ac9b4
31 changed files with 363 additions and 206 deletions

View File

@@ -1,6 +1,6 @@
extends Spatial
# Handle the motion of both players' camera as well as communication with the
# Handle the motion of both player cameras as well as communication with the
# SplitScreen shader to achieve the dynamic split screen effet
#
# Cameras are place on the segment joining the two players, either in the middle
@@ -24,11 +24,13 @@ export(float) var split_line_thickness = 3.0
export(Color, RGBA) var split_line_color = Color.black
export(bool) var adaptive_split_line_thickness = true
onready var player1 = $'../Player1'
onready var player2 = $'../Player2'
onready var camera1: Camera = $'Viewport1/Camera1'
onready var camera2: Camera = $'Viewport2/Camera2'
onready var view: TextureRect = $'View'
onready var player1 = $"../Player1"
onready var player2 = $"../Player2"
onready var view = $View
onready var viewport1 = $Viewport1
onready var viewport2 = $Viewport2
onready var camera1 = viewport1.get_node(@"Camera1")
onready var camera2 = viewport2.get_node(@"Camera2")
func _ready():
@@ -37,8 +39,8 @@ func _ready():
get_viewport().connect("size_changed", self, "_on_size_changed")
view.material.set_shader_param('viewport1', $Viewport1.get_texture())
view.material.set_shader_param('viewport2', $Viewport2.get_texture())
view.material.set_shader_param("viewport1", viewport1.get_texture())
view.material.set_shader_param("viewport2", viewport2.get_texture())
func _process(_delta):
@@ -74,11 +76,11 @@ func _update_splitscreen():
else:
thickness = split_line_thickness
view.material.set_shader_param('split_active', _get_split_state())
view.material.set_shader_param('player1_position', player1_position)
view.material.set_shader_param('player2_position', player2_position)
view.material.set_shader_param('split_line_thickness', thickness)
view.material.set_shader_param('split_line_color', split_line_color)
view.material.set_shader_param("split_active", _get_split_state())
view.material.set_shader_param("player1_position", player1_position)
view.material.set_shader_param("player2_position", player2_position)
view.material.set_shader_param("split_line_thickness", thickness)
view.material.set_shader_param("split_line_color", split_line_color)
# Split screen is active if players are too far apart from each other.
@@ -94,9 +96,8 @@ func _on_size_changed():
$Viewport1.size = screen_size
$Viewport2.size = screen_size
view.rect_size = screen_size
view.material.set_shader_param('viewport_size', screen_size)
view.material.set_shader_param("viewport_size", screen_size)
func _compute_position_difference_in_world():

View File

@@ -18,7 +18,7 @@ _global_script_class_icons={
config/name="Dynamic Split Screen"
config/description="This sample project showcases an implementation of dynamic
split screen, also called Voronoi split screen, using GDSL."
run/main_scene="res://SplitScreen.tscn"
run/main_scene="res://split_screen.tscn"
config/icon="res://icon.png"
[debug]

View File

@@ -31,8 +31,7 @@ void fragment() {
if (dx.y != 0.0) {
split_slope = dx.x / dx.y;
}
else {
} else {
split_slope = 100000.0; // High value (vertical split) if dx.y = 0
}
@@ -44,8 +43,7 @@ void fragment() {
// Draw split border if close enough
if (distance_to_split_line < split_line_thickness) {
COLOR = split_line_color;
}
else {
} else {
float split_current_y = (split_origin.x - UV.x) * split_slope + split_origin.y;
float split_player1_position_y = (split_origin.x - player1_position.x) * split_slope + split_origin.y;
@@ -53,22 +51,18 @@ void fragment() {
if (UV.y > split_current_y) {
if (player1_position.y > split_player1_position_y) {
COLOR = vec4(view1, 1.0);
}
else {
} else {
COLOR = vec4(view2, 1.0);
}
}
else {
} else {
if (player1_position.y < split_player1_position_y) {
COLOR = vec4(view1, 1.0);
}
else {
} else {
COLOR = vec4(view2, 1.0);
}
}
}
}
else {
} else {
COLOR = vec4(view1, 1.0);
}
}

View File

@@ -1,11 +1,10 @@
[gd_scene load_steps=59 format=2]
[gd_scene load_steps=58 format=2]
[ext_resource path="res://default_env.tres" type="Environment" id=1]
[ext_resource path="res://CameraController.gd" type="Script" id=2]
[ext_resource path="res://SplitScreen.shader" type="Shader" id=3]
[ext_resource path="res://camera_controller.gd" type="Script" id=2]
[ext_resource path="res://split_screen.shader" type="Shader" id=3]
[ext_resource path="res://icon.png" type="Texture" id=4]
[ext_resource path="res://PlayerMovement.gd" type="Script" id=5]
[ext_resource path="res://Walls.gd" type="Script" id=6]
[ext_resource path="res://player.gd" type="Script" id=5]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 3 )
@@ -180,12 +179,16 @@ script = ExtResource( 2 )
[node name="View" type="TextureRect" parent="Cameras"]
material = SubResource( 1 )
margin_right = 40.0
margin_bottom = 40.0
anchor_right = 1.0
anchor_bottom = 1.0
texture = ExtResource( 4 )
expand = true
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Viewport1" type="Viewport" parent="Cameras"]
size = Vector2( 100, 100 )
render_target_v_flip = true
render_target_update_mode = 3
@@ -194,6 +197,7 @@ transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 20,
current = true
[node name="Viewport2" type="Viewport" parent="Cameras"]
size = Vector2( 100, 100 )
render_target_v_flip = true
render_target_update_mode = 3
@@ -240,7 +244,6 @@ transform = Transform( 200, 0, 0, 0, 1, 0, 0, 0, 200, 0, -1, 0 )
shape = SubResource( 8 )
[node name="Walls" type="Spatial" parent="."]
script = ExtResource( 6 )
[node name="Group1" type="Spatial" parent="Walls"]

View File

@@ -1,7 +1,8 @@
tool
extends Spatial
# Set a random color to all objects in the 'walls' group
# Set a random color to all objects in the "walls" group.
# To use, attach this script to the "Walls" node.
func _ready():
randomize()