mirror of
https://github.com/kristoferssolo/FuncIt.git
synced 2025-10-21 19:30:35 +00:00
[Major] Finished product development - Stage III
This commit is contained in:
parent
2628ff5e70
commit
e9e01c47f5
@ -70,6 +70,11 @@ input_shift={
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
input_shoot={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
|
||||
@ -1,14 +1,26 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
var hp = 100 setget set_hp
|
||||
|
||||
var player_bullet = load("res://source/entities/bullet/player_bullet.tscn")
|
||||
var username_text = load("res://source/scenes/OVERLAY/elements/username_text.tscn")
|
||||
var username setget username_set
|
||||
var username_text_instance = null
|
||||
|
||||
var can_shoot = true
|
||||
var is_reloading = false
|
||||
|
||||
puppet var puppet_hp = 100 setget puppet_hp_set
|
||||
puppet var puppet_position = Vector2(0, 0) setget puppet_position_set
|
||||
puppet var puppet_velocity = Vector2()
|
||||
puppet var puppet_rotation = 0
|
||||
puppet var puppet_username = "" setget puppet_username_set
|
||||
|
||||
onready var tween = $Tween
|
||||
onready var sprite = $player_sprite
|
||||
onready var reload_timer = $reload_timer
|
||||
onready var shoot_point = $shoot_point
|
||||
onready var hit_timer = $hit_timer
|
||||
|
||||
|
||||
# Instance of data pre_processors
|
||||
@ -42,6 +54,13 @@ func _ready():
|
||||
get_tree().connect("network_peer_connected", self, "_network_peer_connected")
|
||||
username_text_instance = Global.instance_node_at_location(username_text, PersistentNodes, global_position)
|
||||
username_text_instance.player_following = self
|
||||
update_shoot_mode(false)
|
||||
Global.alive_players.append(self)
|
||||
|
||||
yield(get_tree(), "idle_frame")
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
Global.player_master = self
|
||||
|
||||
# Allow update process override.
|
||||
set_process(true)
|
||||
@ -87,7 +106,12 @@ func process_rotation():
|
||||
func _process(delta: float) -> void:
|
||||
if username_text_instance != null:
|
||||
username_text_instance.name = "username" + name
|
||||
|
||||
|
||||
if hp <= 0:
|
||||
if get_tree().is_network_server():
|
||||
rpc("destroy")
|
||||
|
||||
|
||||
user_input = UIN_preset_pre_processor_instance.update()
|
||||
user_state = get_user_state()
|
||||
dimensions = get_dimensions()
|
||||
@ -116,7 +140,8 @@ func _process(delta: float) -> void:
|
||||
|
||||
func _physics_process(delta) -> void:
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
if is_network_master() and visible:
|
||||
look_at(get_global_mouse_position())
|
||||
if "0" in VDIR:
|
||||
if VDIR["1"]["0"]["ray"]["length"] - dimensions["collider"]["radius"] > 2 and jumpState == false:
|
||||
gravityVector = (VDIR["1"]["0"]["ray"]["position"] - user_state["global_position"]).normalized()
|
||||
@ -163,7 +188,16 @@ func _physics_process(delta) -> void:
|
||||
else:
|
||||
timedOut = true
|
||||
move_and_slide(gravityVector * jumpSpeed + movementVector.rotated(rotation).normalized() * movementSpeed)
|
||||
|
||||
|
||||
if Input.is_action_pressed("input_shoot") and can_shoot and not is_reloading:
|
||||
rpc("instance_bullet", get_tree().get_network_unique_id())
|
||||
is_reloading = true
|
||||
reload_timer.start()
|
||||
else:
|
||||
rotation = lerp_angle(rotation, puppet_rotation, delta * 8)
|
||||
|
||||
if not tween.is_active():
|
||||
move_and_slide(puppet_velocity * movementSpeed)
|
||||
|
||||
func _draw():
|
||||
for vector_type in VDIR:
|
||||
@ -174,12 +208,36 @@ func _draw():
|
||||
draw_line(VDIR[v_t][v]["start"] - user_state["global_position"],(VDIR[v_t][v]["ray"]["position"] - user_state["global_position"]).rotated(-rotation),Color(255,255,255,1),1)
|
||||
|
||||
|
||||
func lerp_angle(from, to, weight):
|
||||
return from + short_angle_dist(from, to) * weight
|
||||
|
||||
|
||||
func short_angle_dist(from, to):
|
||||
var max_angle = PI * 2
|
||||
var difference = fmod(to - from, max_angle)
|
||||
return fmod(2 * difference, max_angle) - difference
|
||||
|
||||
|
||||
func puppet_position_set(new_value) -> void:
|
||||
puppet_position = new_value
|
||||
tween.interpolate_property(self, "global_position", global_position, puppet_position, 0.1)
|
||||
tween.start()
|
||||
|
||||
|
||||
func set_hp(new_value):
|
||||
hp = new_value
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
rset("puppet_hp", hp)
|
||||
|
||||
|
||||
func puppet_hp_set(new_value):
|
||||
puppet_hp = new_value
|
||||
if get_tree().has_network_peer():
|
||||
if not is_network_master():
|
||||
hp = puppet_hp
|
||||
|
||||
|
||||
func username_set(new_value) -> void:
|
||||
username = new_value
|
||||
if is_network_master() and username_text_instance != null:
|
||||
@ -202,7 +260,16 @@ func _on_network_tick_rate_timeout():
|
||||
if is_network_master():
|
||||
rset_unreliable("puppet_position", global_position)
|
||||
#rset_unreliable("puppet_velocity", movementVector)
|
||||
rset_unreliable("puppet_rotation", rotation_degrees)
|
||||
rset_unreliable("puppet_rotation", rotation)
|
||||
|
||||
|
||||
sync func instance_bullet(id):
|
||||
var player_bullet_instance = Global.instance_node_at_location(player_bullet, PersistentNodes, shoot_point.global_position)
|
||||
player_bullet_instance.name = "Bullet" + name + str(Network.networked_object_name_index)
|
||||
player_bullet_instance.set_network_master(id)
|
||||
player_bullet_instance.player_rotation = rotation
|
||||
player_bullet_instance.player_owner = id
|
||||
Network.networked_object_name_index += 1
|
||||
|
||||
|
||||
sync func update_position(pos):
|
||||
@ -210,10 +277,53 @@ sync func update_position(pos):
|
||||
puppet_position = pos
|
||||
|
||||
|
||||
func update_shoot_mode(shoot_mode):
|
||||
can_shoot = shoot_mode
|
||||
|
||||
|
||||
func _on_reload_timer_timeout():
|
||||
is_reloading = false
|
||||
|
||||
|
||||
func _on_hit_timer_timeout():
|
||||
modulate = Color(1, 1, 1, 1)
|
||||
|
||||
|
||||
func _on_Hitbox_area_entered(area):
|
||||
if get_tree().is_network_server():
|
||||
if area.is_in_group("Player_damager") and area.get_parent().player_owner != int(name):
|
||||
rpc("hit_by_damager", area.get_parent().damage)
|
||||
area.get_parent().rpc("destroy")
|
||||
|
||||
|
||||
sync func hit_by_damager(damage):
|
||||
hp -= damage
|
||||
modulate = Color(5, 5, 5, 1)
|
||||
hit_timer.start()
|
||||
|
||||
|
||||
sync func enable() -> void:
|
||||
hp = 100
|
||||
can_shoot = false
|
||||
update_shoot_mode(false)
|
||||
username_text_instance.visible = true
|
||||
visible = true
|
||||
$CollisionShape2D.disabled = false
|
||||
$Hitbox/CollisionShape2D.disabled = false
|
||||
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
Global.player_master = self
|
||||
|
||||
if not Global.alive_players.has(self):
|
||||
Global.alive_players.append(self)
|
||||
|
||||
|
||||
sync func destroy() -> void:
|
||||
username_text_instance.visible = false
|
||||
visible = false
|
||||
$player_collider.disabled = true
|
||||
$hitbox/CollisionShape2D.disabled = true
|
||||
Global.alive_players.erase(self)
|
||||
|
||||
if get_tree().has_network_peer():
|
||||
@ -226,3 +336,6 @@ func _exit_tree() -> void:
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
Global.player_master = null
|
||||
|
||||
|
||||
|
||||
|
||||
54
Game/source/assets/scripts/player_handlers/player_bullet.gd
Normal file
54
Game/source/assets/scripts/player_handlers/player_bullet.gd
Normal file
@ -0,0 +1,54 @@
|
||||
extends Sprite
|
||||
|
||||
var velocity = Vector2(1, 0)
|
||||
var player_rotation
|
||||
|
||||
export(int) var speed = 1400
|
||||
export(int) var damage = 25
|
||||
|
||||
puppet var puppet_position setget puppet_position_set
|
||||
puppet var puppet_velocity = Vector2(0, 0)
|
||||
puppet var puppet_rotation = 0
|
||||
|
||||
onready var initial_position = global_position
|
||||
|
||||
var player_owner = 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
visible = false
|
||||
yield(get_tree(), "idle_frame")
|
||||
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
velocity = velocity.rotated(player_rotation)
|
||||
rotation = player_rotation
|
||||
rset("puppet_velocity", velocity)
|
||||
rset("puppet_rotation", rotation)
|
||||
rset("puppet_position", global_position)
|
||||
|
||||
visible = true
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if get_tree().has_network_peer():
|
||||
if is_network_master():
|
||||
global_position += velocity * speed * delta
|
||||
else:
|
||||
rotation = puppet_rotation
|
||||
global_position += puppet_velocity * speed * delta
|
||||
|
||||
|
||||
func puppet_position_set(new_value) -> void:
|
||||
puppet_position = new_value
|
||||
global_position = puppet_position
|
||||
|
||||
|
||||
sync func destroy() -> void:
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_Destroy_timer_timeout():
|
||||
if get_tree().has_network_peer():
|
||||
if get_tree().is_network_server():
|
||||
rpc("destroy")
|
||||
@ -2,6 +2,7 @@ extends Control
|
||||
|
||||
var player = load("res://source/entities/player/player_node.tscn")
|
||||
|
||||
var min_players = 2
|
||||
var current_spawn_location_instance_number = 1
|
||||
var current_player_for_spawn_location_number = null
|
||||
|
||||
@ -9,6 +10,7 @@ onready var multiplayer_config_ui = $multiplayer_configure
|
||||
onready var username_text_edit = $multiplayer_configure/username_text_edit
|
||||
onready var device_ip_address = $UI/device_ip_address
|
||||
onready var start_game = $UI/start_game
|
||||
onready var floor_ = $floor
|
||||
|
||||
|
||||
func _ready():
|
||||
@ -32,14 +34,17 @@ func _ready():
|
||||
current_player_for_spawn_location_number = player
|
||||
else:
|
||||
start_game.hide()
|
||||
floor_.hide()
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if get_tree().network_peer != null:
|
||||
if get_tree().get_network_connected_peers().size() >= 0 and get_tree().is_network_server():
|
||||
if get_tree().get_network_connected_peers().size() >= (min_players - 1) and get_tree().is_network_server():
|
||||
start_game.show()
|
||||
floor_.show()
|
||||
else:
|
||||
start_game.hide()
|
||||
floor_.hide()
|
||||
|
||||
|
||||
func _player_connected(id) -> void:
|
||||
@ -87,4 +92,8 @@ func _on_start_game_pressed():
|
||||
|
||||
|
||||
sync func switch_to_game() -> void:
|
||||
for child in PersistentNodes.get_children():
|
||||
if child.is_in_group("Player"):
|
||||
child.update_shoot_mode(true)
|
||||
|
||||
get_tree().change_scene("res://source/levels/trinity_site/trinity_site_level.tscn")
|
||||
|
||||
16
Game/source/assets/scripts/ui_element_handlers/game_UI.gd
Normal file
16
Game/source/assets/scripts/ui_element_handlers/game_UI.gd
Normal file
@ -0,0 +1,16 @@
|
||||
extends CanvasLayer
|
||||
|
||||
onready var win_timer = $Control/winner/win_timer
|
||||
onready var winner = $Control/winner
|
||||
|
||||
func _ready() -> void:
|
||||
winner.hide()
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if Global.alive_players.size() <= 1 and get_tree().has_network_peer():
|
||||
if Global.alive_players[0].name == str(get_tree().get_network_unique_id()):
|
||||
winner.show()
|
||||
|
||||
if win_timer.time_left <= 0:
|
||||
win_timer.start()
|
||||
9
Game/source/assets/scripts/ui_element_handlers/winner.gd
Normal file
9
Game/source/assets/scripts/ui_element_handlers/winner.gd
Normal file
@ -0,0 +1,9 @@
|
||||
extends Label
|
||||
|
||||
sync func return_to_lobby():
|
||||
get_tree().change_scene("res://source/scenes/GUI/main_menu.tscn")
|
||||
|
||||
|
||||
func _on_win_timer_timeout():
|
||||
if get_tree().is_network_server():
|
||||
rpc("return_to_lobby")
|
||||
BIN
Game/source/assets/sprites/bullet/bullet.png
Normal file
BIN
Game/source/assets/sprites/bullet/bullet.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 659 B |
34
Game/source/assets/sprites/bullet/bullet.png.import
Normal file
34
Game/source/assets/sprites/bullet/bullet.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/bullet.png-18282ec6da1a4943b48ba52afa2f37b8.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://source/assets/sprites/bullet/bullet.png"
|
||||
dest_files=[ "res://.import/bullet.png-18282ec6da1a4943b48ba52afa2f37b8.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
||||
27
Game/source/entities/bullet/player_bullet.tscn
Normal file
27
Game/source/entities/bullet/player_bullet.tscn
Normal file
@ -0,0 +1,27 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://source/assets/sprites/bullet/bullet.png" type="Texture" id=1]
|
||||
[ext_resource path="res://source/assets/scripts/player_handlers/player_bullet.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=1]
|
||||
extents = Vector2( 22.0883, 10 )
|
||||
|
||||
[node name="player_bullet" type="Sprite" groups=[
|
||||
"Net",
|
||||
]]
|
||||
texture = ExtResource( 1 )
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="hitbox" type="Area2D" parent="." groups=[
|
||||
"Player_damager",
|
||||
]]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="hitbox"]
|
||||
visible = false
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="destroy_timer" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
autostart = true
|
||||
|
||||
[connection signal="timeout" from="destroy_timer" to="." method="_on_destroy_timer_timeout"]
|
||||
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=18 format=2]
|
||||
[gd_scene load_steps=19 format=2]
|
||||
|
||||
[ext_resource path="res://source/assets/sprites/character/player/animation/idle/player_main_body_default_sprite_idle_animation – 4.png" type="Texture" id=1]
|
||||
[ext_resource path="res://source/assets/scripts/player_handlers/player_collider_handler.gd" type="Script" id=2]
|
||||
@ -26,6 +26,9 @@ animations = [ {
|
||||
"speed": 65.0
|
||||
} ]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=3]
|
||||
extents = Vector2( 47.3339, 50.0489 )
|
||||
|
||||
[node name="player" type="KinematicBody2D" groups=[
|
||||
"Net",
|
||||
"Player",
|
||||
@ -52,4 +55,24 @@ texture = ExtResource( 5 )
|
||||
wait_time = 0.03
|
||||
autostart = true
|
||||
|
||||
[node name="reload_timer" type="Timer" parent="."]
|
||||
wait_time = 0.15
|
||||
one_shot = true
|
||||
|
||||
[node name="hit_timer" type="Timer" parent="."]
|
||||
wait_time = 0.1
|
||||
one_shot = true
|
||||
|
||||
[node name="shoot_point" type="Position2D" parent="."]
|
||||
position = Vector2( 55.9245, -31.8558 )
|
||||
|
||||
[node name="hitbox" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="hitbox"]
|
||||
position = Vector2( -3.49359, 3.44745 )
|
||||
shape = SubResource( 3 )
|
||||
|
||||
[connection signal="timeout" from="network_tick_rate" to="." method="_on_network_tick_rate_timeout"]
|
||||
[connection signal="timeout" from="reload_timer" to="." method="_on_reload_timer_timeout"]
|
||||
[connection signal="timeout" from="hit_timer" to="." method="_on_hit_timer_timeout"]
|
||||
[connection signal="area_entered" from="hitbox" to="." method="_on_hitbox_area_entered"]
|
||||
|
||||
@ -1,8 +1,19 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://source/assets/scripts/server_handlers/trinity_site_level.gd" type="Script" id=1]
|
||||
[ext_resource path="res://source/assets/scripts/ui_element_handlers/UI.gd" type="Script" id=2]
|
||||
[ext_resource path="res://source/levels/trinity_site/images/trinity_site_level_layout-monochrome.png" type="Texture" id=3]
|
||||
[ext_resource path="res://source/fonts/roboto/Roboto-Regular.ttf" type="DynamicFontData" id=4]
|
||||
[ext_resource path="res://source/assets/scripts/ui_element_handlers/winner.gd" type="Script" id=5]
|
||||
[ext_resource path="res://source/assets/scripts/ui_element_handlers/game_UI.gd" type="Script" id=6]
|
||||
|
||||
[sub_resource type="DynamicFont" id=1]
|
||||
size = 120
|
||||
outline_size = 7
|
||||
outline_color = Color( 0, 0, 0, 1 )
|
||||
use_mipmaps = true
|
||||
use_filter = true
|
||||
font_data = ExtResource( 4 )
|
||||
|
||||
[node name="trinity-site" type="Node2D"]
|
||||
script = ExtResource( 1 )
|
||||
@ -40,3 +51,36 @@ position = Vector2( 969.307, 315.931 )
|
||||
|
||||
[node name="UI" type="CanvasLayer" parent="."]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="game_UI" type="CanvasLayer" parent="."]
|
||||
script = ExtResource( 6 )
|
||||
|
||||
[node name="Control" type="Control" parent="game_UI"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="winner" type="Label" parent="game_UI/Control"]
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
margin_top = -35.5
|
||||
margin_bottom = 57.5
|
||||
custom_fonts/font = SubResource( 1 )
|
||||
custom_colors/font_color_shadow = Color( 0, 0, 0, 1 )
|
||||
custom_constants/shadow_offset_x = 6
|
||||
custom_constants/shadow_offset_y = 6
|
||||
text = "You are the winner"
|
||||
align = 1
|
||||
valign = 1
|
||||
script = ExtResource( 5 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="win_timer" type="Timer" parent="game_UI/Control/winner"]
|
||||
wait_time = 4.0
|
||||
|
||||
[connection signal="timeout" from="game_UI/Control/winner/win_timer" to="game_UI/Control/winner" method="_on_win_timer_timeout"]
|
||||
|
||||
@ -49,10 +49,10 @@ anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -267.5
|
||||
margin_top = 24.0
|
||||
margin_right = 267.5
|
||||
margin_bottom = 200.0
|
||||
margin_left = -266.52
|
||||
margin_top = 28.0
|
||||
margin_right = 268.48
|
||||
margin_bottom = 204.0
|
||||
custom_fonts/font = ExtResource( 1 )
|
||||
text = "Join server"
|
||||
__meta__ = {
|
||||
@ -100,7 +100,7 @@ __meta__ = {
|
||||
}
|
||||
|
||||
[node name="floor" parent="." instance=ExtResource( 4 )]
|
||||
position = Vector2( 960, 1104 )
|
||||
position = Vector2( 960, 1056 )
|
||||
scale = Vector2( 2, 1 )
|
||||
|
||||
[connection signal="pressed" from="multiplayer_configure/create_server" to="." method="_on_create_server_pressed"]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user