mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-04 15:00:09 +01:00
Misc fixes and tweaks to many demos
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
extends Spatial
|
||||
|
||||
func _ready():
|
||||
# Get the viewport and clear it.
|
||||
var viewport = get_node("Viewport")
|
||||
viewport.set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
|
||||
# Clear the viewport.
|
||||
var viewport = $Viewport
|
||||
$Viewport.set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
|
||||
|
||||
# Let two frames pass to make sure the vieport is captured.
|
||||
yield(get_tree(), "idle_frame")
|
||||
yield(get_tree(), "idle_frame")
|
||||
|
||||
# Retrieve the texture and set it to the viewport quad.
|
||||
get_node("Viewport_quad").material_override.albedo_texture = viewport.get_texture()
|
||||
$ViewportQuad.material_override.albedo_texture = viewport.get_texture()
|
||||
|
||||
@@ -39,7 +39,7 @@ script = SubResource( 9 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=11]
|
||||
|
||||
[node name="2D_in_3D" type="Spatial"]
|
||||
[node name="2Din3D" type="Spatial"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="."]
|
||||
@@ -52,20 +52,20 @@ transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, -1, -2 )
|
||||
mesh = SubResource( 1 )
|
||||
material/0 = SubResource( 3 )
|
||||
|
||||
[node name="Pillar" type="Spatial" parent="."]
|
||||
[node name="Pillar1" type="Spatial" parent="."]
|
||||
transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, -3, -0.2, -4 )
|
||||
|
||||
[node name="Pillar_bottom" type="MeshInstance" parent="Pillar"]
|
||||
[node name="PillarBottom" type="MeshInstance" parent="Pillar1"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0 )
|
||||
mesh = SubResource( 7 )
|
||||
material/0 = SubResource( 8 )
|
||||
|
||||
[node name="Pillar_top" type="MeshInstance" parent="Pillar"]
|
||||
[node name="PillarTop" type="MeshInstance" parent="Pillar1"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.5, 0 )
|
||||
mesh = SubResource( 7 )
|
||||
material/0 = SubResource( 8 )
|
||||
|
||||
[node name="Pillar_middle" type="MeshInstance" parent="Pillar"]
|
||||
[node name="PillarMiddle" type="MeshInstance" parent="Pillar1"]
|
||||
transform = Transform( 0.7, 0, 0, 0, 2, 0, 0, 0, 0.7, 0, 2.5, 0 )
|
||||
mesh = SubResource( 7 )
|
||||
material/0 = SubResource( 8 )
|
||||
@@ -73,22 +73,22 @@ material/0 = SubResource( 8 )
|
||||
[node name="Pillar2" type="Spatial" parent="."]
|
||||
transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 3, -0.2, -4 )
|
||||
|
||||
[node name="Pillar_bottom" type="MeshInstance" parent="Pillar2"]
|
||||
[node name="PillarBottom" type="MeshInstance" parent="Pillar2"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0 )
|
||||
mesh = SubResource( 7 )
|
||||
material/0 = SubResource( 8 )
|
||||
|
||||
[node name="Pillar_top" type="MeshInstance" parent="Pillar2"]
|
||||
[node name="PillarTop" type="MeshInstance" parent="Pillar2"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.5, 0 )
|
||||
mesh = SubResource( 7 )
|
||||
material/0 = SubResource( 8 )
|
||||
|
||||
[node name="Pillar_middle" type="MeshInstance" parent="Pillar2"]
|
||||
[node name="PillarMiddle" type="MeshInstance" parent="Pillar2"]
|
||||
transform = Transform( 0.7, 0, 0, 0, 2, 0, 0, 0, 0.7, 0, 2.5, 0 )
|
||||
mesh = SubResource( 7 )
|
||||
material/0 = SubResource( 8 )
|
||||
|
||||
[node name="Pillar_back" type="MeshInstance" parent="."]
|
||||
[node name="PillarBack" type="MeshInstance" parent="."]
|
||||
transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 1.2, -4.5 )
|
||||
mesh = SubResource( 10 )
|
||||
material/0 = SubResource( 8 )
|
||||
@@ -99,7 +99,7 @@ shadow_enabled = true
|
||||
directional_shadow_blend_splits = true
|
||||
directional_shadow_normal_bias = 0.2
|
||||
|
||||
[node name="Viewport_quad" type="MeshInstance" parent="."]
|
||||
[node name="ViewportQuad" type="MeshInstance" parent="."]
|
||||
transform = Transform( 2, 0, 0, 0, 0, -1.333, 0, 1, 0, 0, 1.2, -4.25 )
|
||||
material_override = SubResource( 11 )
|
||||
mesh = SubResource( 1 )
|
||||
@@ -111,25 +111,25 @@ hdr = false
|
||||
usage = 0
|
||||
render_target_v_flip = true
|
||||
|
||||
[node name="2D_World" type="Node2D" parent="Viewport"]
|
||||
[node name="Pong" type="Node2D" parent="Viewport"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="BG" type="Panel" parent="Viewport/2D_World"]
|
||||
[node name="Background" type="Panel" parent="Viewport/Pong"]
|
||||
margin_right = 600.0
|
||||
margin_bottom = 400.0
|
||||
|
||||
[node name="ball" type="Sprite" parent="Viewport/2D_World"]
|
||||
[node name="Ball" type="Sprite" parent="Viewport/Pong"]
|
||||
position = Vector2( 300, 200 )
|
||||
texture = ExtResource( 3 )
|
||||
|
||||
[node name="left" type="Sprite" parent="Viewport/2D_World"]
|
||||
[node name="LeftPaddle" type="Sprite" parent="Viewport/Pong"]
|
||||
position = Vector2( 20, 200 )
|
||||
texture = ExtResource( 4 )
|
||||
|
||||
[node name="right" type="Sprite" parent="Viewport/2D_World"]
|
||||
[node name="RightPaddle" type="Sprite" parent="Viewport/Pong"]
|
||||
position = Vector2( 580, 200 )
|
||||
texture = ExtResource( 5 )
|
||||
|
||||
[node name="separator" type="Sprite" parent="Viewport/2D_World"]
|
||||
[node name="Separator" type="Sprite" parent="Viewport/Pong"]
|
||||
position = Vector2( 298, 200 )
|
||||
texture = ExtResource( 6 )
|
||||
|
||||
@@ -5,20 +5,25 @@ const INITIAL_BALL_SPEED = 80
|
||||
|
||||
var ball_speed = INITIAL_BALL_SPEED
|
||||
var screen_size = Vector2(640, 400)
|
||||
|
||||
# Default ball direction.
|
||||
var direction = Vector2(-1, 0)
|
||||
var direction = Vector2.LEFT
|
||||
var pad_size = Vector2(8, 32)
|
||||
|
||||
onready var ball = $Ball
|
||||
onready var left_paddle = $LeftPaddle
|
||||
onready var right_paddle = $RightPaddle
|
||||
|
||||
func _ready():
|
||||
screen_size = get_viewport_rect().size # Get actual size.
|
||||
pad_size = get_node("left").get_texture().get_size()
|
||||
pad_size = left_paddle.get_texture().get_size()
|
||||
|
||||
|
||||
func _process(delta):
|
||||
# Get ball position and pad rectangles.
|
||||
var ball_pos = get_node("ball").get_position()
|
||||
var left_rect = Rect2(get_node("left").get_position() - pad_size * 0.5, pad_size)
|
||||
var right_rect = Rect2(get_node("right").get_position() - pad_size * 0.5, pad_size)
|
||||
var ball_pos = ball.get_position()
|
||||
var left_rect = Rect2(left_paddle.get_position() - pad_size * 0.5, pad_size)
|
||||
var right_rect = Rect2(right_paddle.get_position() - pad_size * 0.5, pad_size)
|
||||
|
||||
# Integrate new ball postion.
|
||||
ball_pos += direction * ball_speed * delta
|
||||
@@ -40,23 +45,23 @@ func _process(delta):
|
||||
ball_speed = INITIAL_BALL_SPEED
|
||||
direction = Vector2(-1, 0)
|
||||
|
||||
get_node("ball").set_position(ball_pos)
|
||||
ball.set_position(ball_pos)
|
||||
|
||||
# Move left pad.
|
||||
var left_pos = get_node("left").get_position()
|
||||
var left_pos = left_paddle.get_position()
|
||||
|
||||
if left_pos.y > 0 and Input.is_action_pressed("left_move_up"):
|
||||
left_pos.y += -PAD_SPEED * delta
|
||||
if left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down"):
|
||||
left_pos.y += PAD_SPEED * delta
|
||||
|
||||
get_node("left").set_position(left_pos)
|
||||
left_paddle.set_position(left_pos)
|
||||
|
||||
# Move right pad.
|
||||
var right_pos = get_node("right").get_position()
|
||||
var right_pos = right_paddle.get_position()
|
||||
if right_pos.y > 0 and Input.is_action_pressed("right_move_up"):
|
||||
right_pos.y += -PAD_SPEED * delta
|
||||
if right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down"):
|
||||
right_pos.y += PAD_SPEED * delta
|
||||
|
||||
get_node("right").set_position(right_pos)
|
||||
right_paddle.set_position(right_pos)
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
[sub_resource type="CubeMesh" id=1]
|
||||
|
||||
[node name="Spatial" type="Spatial"]
|
||||
[node name="Cubes" type="Spatial"]
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
[node name="MeshInstance1" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 1 )
|
||||
material/0 = null
|
||||
|
||||
@@ -13,7 +13,7 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, -1 )
|
||||
mesh = SubResource( 1 )
|
||||
material/0 = null
|
||||
|
||||
[node name="Camera" type="Camera" parent="."]
|
||||
[node name="Camera3D" type="Camera" parent="."]
|
||||
transform = Transform( 0.877582, 0.229849, -0.420736, 0, 0.877582, 0.479426, 0.479426, -0.420736, 0.770151, -1.68294, 2.25571, 3.0806 )
|
||||
fov = 74.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://noto_sans_ui_regular.ttf" type="DynamicFontData" id=1]
|
||||
[ext_resource path="res://spatial.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://cubes.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://hud.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="DynamicFont" id=1]
|
||||
@@ -30,7 +30,7 @@ usage = 3
|
||||
render_target_update_mode = 3
|
||||
shadow_atlas_size = 4096
|
||||
|
||||
[node name="Spatial" parent="Viewport" instance=ExtResource( 2 )]
|
||||
[node name="Cubes" parent="Viewport" instance=ExtResource( 2 )]
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="."]
|
||||
anchor_right = 1.0
|
||||
|
||||
@@ -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():
|
||||
@@ -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]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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"]
|
||||
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user