Initial commit
This commit is contained in:
158
Characters/Player/player.gd
Normal file
158
Characters/Player/player.gd
Normal file
@@ -0,0 +1,158 @@
|
||||
extends KinematicBody2D
|
||||
|
||||
# Constains for movement
|
||||
const MOVE_SPEED = 3.0
|
||||
const RUN_MULTIPLIER = 2
|
||||
const GRAVITY = 10
|
||||
const JUMP_POWER = -180
|
||||
const FLOOR = Vector2(0, -1)
|
||||
|
||||
export var BASE_CAMERA_ZOOM: float = 0.7
|
||||
export var VIEW_SMOOTH_FACTOR: float = 0.5
|
||||
|
||||
enum MoveDirection { UP, DOWN, LEFT, RIGHT, NONE }
|
||||
|
||||
# Networking
|
||||
slave var slave_position = Vector2()
|
||||
slave var slave_movement = MoveDirection.NONE
|
||||
slave var slave_transparency = 0
|
||||
slave var slave_gone = false
|
||||
|
||||
var velocity = Vector2()
|
||||
var isRunning = false
|
||||
var look_direction = Vector2(1, 0)
|
||||
var minimap = false
|
||||
var zoom_interpolation = 0
|
||||
|
||||
# Get camara
|
||||
onready var camera_focus = $"/root/Node2D/Game/Focus" as Position2D
|
||||
onready var camera = $"/root/Node2D/Game/Focus/Camera" as Camera2D
|
||||
onready var gui = $"/root/Node2D/GUI" as CanvasLayer
|
||||
onready var client = $"/root/Node2D/Game/Connection" as Node2D
|
||||
|
||||
func _process(delta):
|
||||
pass
|
||||
|
||||
func _physics_process(delta):
|
||||
# Check if game is visable
|
||||
if(get_node("../../Game").is_visible() == false):
|
||||
return
|
||||
|
||||
for player in Networking.players:
|
||||
if player != int(name):
|
||||
var p = (get_node("/root/Node2D/Game/" + String(player)) as KinematicBody2D)
|
||||
if p != self:
|
||||
var distance = p.position.distance_to(position)
|
||||
var transparency = (distance - ($View/CollisionShape2D as CollisionShape2D).shape.radius + 10) * VIEW_SMOOTH_FACTOR
|
||||
|
||||
# Clip values
|
||||
if transparency > 1:
|
||||
transparency = 1
|
||||
if transparency < 0:
|
||||
transparency = 0
|
||||
rset_id(player, "slave_transparency", transparency)
|
||||
|
||||
modulate.a = 1-slave_transparency
|
||||
|
||||
"""
|
||||
MAP OVERVIEW
|
||||
"""
|
||||
# Put focus on player if not in minimap
|
||||
var start = Vector2(BASE_CAMERA_ZOOM, BASE_CAMERA_ZOOM)
|
||||
var end = Vector2(1.5, 1.5)
|
||||
if !minimap:
|
||||
camera_focus.position = position
|
||||
if zoom_interpolation <= 1.1:
|
||||
zoom_interpolation -= 0.05
|
||||
camera.set_zoom(start.cubic_interpolate(end, start/2, end/2, zoom_interpolation))
|
||||
|
||||
# Stop zooming in
|
||||
if zoom_interpolation <= 0:
|
||||
camera.smoothing_speed = 6
|
||||
zoom_interpolation = 0
|
||||
else:
|
||||
# Update camera zoom
|
||||
if zoom_interpolation <= 1:
|
||||
zoom_interpolation += 0.05
|
||||
camera.set_zoom(start.cubic_interpolate(end, start/2, end/2, zoom_interpolation))
|
||||
|
||||
# View map
|
||||
if Input.is_action_just_pressed("minimap"):
|
||||
if !minimap:
|
||||
minimap = true
|
||||
camera.smoothing_speed = 2
|
||||
camera_focus.position = get_node("/root/Node2D").position
|
||||
else:
|
||||
minimap = false
|
||||
|
||||
"""
|
||||
MOVEMENT
|
||||
"""
|
||||
|
||||
var direction = MoveDirection.NONE
|
||||
|
||||
var RIGHT = Input.is_action_pressed("ui_right")
|
||||
var LEFT = Input.is_action_pressed("ui_left")
|
||||
var JUMP = Input.is_action_pressed("ui_up")
|
||||
var SNEAK = Input.is_action_pressed("ui_down")
|
||||
var RUN = Input.is_action_pressed("ui_shift")
|
||||
|
||||
if get_tree().network_peer != null and is_network_master():
|
||||
if LEFT:
|
||||
direction = MoveDirection.LEFT
|
||||
elif RIGHT:
|
||||
direction = MoveDirection.RIGHT
|
||||
elif JUMP:
|
||||
direction = MoveDirection.UP
|
||||
elif SNEAK:
|
||||
direction = MoveDirection.DOWN
|
||||
|
||||
"""
|
||||
for player in Networking.players:
|
||||
if player != int(name):
|
||||
var p = Networking.get_player_node(int(player))
|
||||
if $Receive.overlaps_body(p):
|
||||
# Send everyone in receive area the current position
|
||||
rset_unreliable_id(int(player), 'slave_position', position)
|
||||
rset_id(int(player), 'slave_movement', direction)
|
||||
else:
|
||||
# Hide from everyone else
|
||||
rset_id(int(player), 'slave_movement', MoveDirection.NONE)"""
|
||||
if Networking.move:
|
||||
rset_unreliable('slave_position', position)
|
||||
rset('slave_movement', direction)
|
||||
|
||||
_move(direction)
|
||||
else:
|
||||
_move(slave_movement)
|
||||
position = slave_position
|
||||
|
||||
if get_tree().network_peer != null and get_tree().is_network_server():
|
||||
Networking.update_position(int(name), position)
|
||||
|
||||
func _move(direction):
|
||||
match direction:
|
||||
MoveDirection.NONE:
|
||||
return
|
||||
MoveDirection.UP:
|
||||
move_and_collide(Vector2(0, -MOVE_SPEED))
|
||||
$AnimatedSprite.play("jump")
|
||||
MoveDirection.DOWN:
|
||||
move_and_collide(Vector2(0, MOVE_SPEED))
|
||||
velocity.x = 0
|
||||
$AnimatedSprite.play("idle")
|
||||
MoveDirection.LEFT:
|
||||
move_and_collide(Vector2(-MOVE_SPEED, 0))
|
||||
$AnimatedSprite.play("run")
|
||||
$AnimatedSprite.set_flip_h(true);
|
||||
look_direction = Vector2(-1, 0)
|
||||
MoveDirection.RIGHT:
|
||||
move_and_collide(Vector2(MOVE_SPEED, 0))
|
||||
look_direction = Vector2(1, 0)
|
||||
$AnimatedSprite.play("run")
|
||||
$AnimatedSprite.set_flip_h(false);
|
||||
|
||||
if(isRunning):
|
||||
velocity.x = MOVE_SPEED*RUN_MULTIPLIER
|
||||
else:
|
||||
velocity.x = MOVE_SPEED
|
||||
Reference in New Issue
Block a user