Untitled
unknown
python
a year ago
3.2 kB
11
Indexable
extends SGCharacterBody2D
@export var moveAccel := 5
@export var speedLimit := 300
@export var gravity := 10
@export var othersRid: RID
var onFloor: bool = false
var PlayerCollisions: Array = [null,null,null,null]
const GameLeft := "GameLeft"
const GameRight := "GameRight"
const GameUp := "GameUp"
const GameDown := "GameDown"
const GameJump := "GameJump"
const floorThreshold := -32768 #0.5 in fixed point world, x * 65536
func get_grav() -> SGFixedVector2:
return SGFixed.from_float_vector2(Vector2(0,-1*gravity))
func _get_local_input() -> Dictionary:
var dirVector := Input.get_vector(GameLeft,GameRight,GameUp,GameDown)
var jumpPressed: bool = Input.is_action_just_pressed(GameJump)
var input:= { "inputVector": dirVector, "jump": jumpPressed}
input["inputVector"] = dirVector
return input
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _network_process(input: Dictionary) -> void:
var inputVector: Vector2 = input["inputVector"].normalized()
var modifiedVel1 := Gravity(velocity)
var modifiedVel2 := MoveRightLeft(modifiedVel1,inputVector)
velocity.x = modifiedVel2.x
velocity.y = modifiedVel2.y
move_and_slide()
#move_and_collide(modifiedVel2)
sync_to_physics_engine()
DetectCollisions()
func DetectCollisions() -> void:
var bodyCount = get_slide_count()
var i: int = 0
var j: int = 0
if bodyCount == 0:
print_debug("no bodies detected")
onFloor = false
return
while i < get_slide_count():
var collision = get_slide_collision(i)
if collision.collider_rid.get_id() == othersRid.get_id():
PlayerCollisions[j] = collision
j += 1
i += 1
onFloor = FloorDetect(collision)
print_debug(str(onFloor) + "||" + str(multiplayer.get_unique_id()))
func FloorDetect(collision: SGKinematicCollision2D) -> bool:
return collision.normal.y < floorThreshold
func Gravity(currentVel: SGFixedVector2) -> SGFixedVector2:
if !is_on_floor():
var gravVel: SGFixedVector2 = addFixedV(currentVel,get_grav(),false)
return gravVel
return currentVel
func MoveRightLeft(currentVel: SGFixedVector2, inputVector: Vector2) -> SGFixedVector2:
var a: SGFixedVector2 = SGFixed.from_float_vector2(inputVector).normalized()
var b: SGFixedVector2 = SGFixed.vector2(a.x * SGFixed.from_float(moveAccel),a.y)
return addFixedVx(currentVel,b.x,true)
func _save_state() -> Dictionary:
var input = { "speed" = moveAccel, "position" = position, "velocity" = velocity }
return input
func _load_state(state: Dictionary) -> void:
moveAccel = state["speed"]
position = state["position"]
velocity = state["velocity"]
sync_to_physics_engine()
func addFixedV(fixedA: SGFixedVector2, fixedB: SGFixedVector2, add: bool) -> SGFixedVector2:
var s: int
if add:
s = 1
else:
s = -1
return SGFixed.vector2(fixedA.x + s * fixedB.x, fixedA.y + s * fixedB.y)
func addFixedVx(fixedA:SGFixedVector2, fixedB: int, add: bool) -> SGFixedVector2:
var s: int
if add:
s = 1
else:
s = -1
return SGFixed.vector2(fixedA.x + s*fixedB, fixedA.y)
func addFixedVy(fixedA:SGFixedVector2, fixedB: int, add: bool) -> SGFixedVector2:
var s: int
if add:
s = 1
else:
s = -1
return SGFixed.vector2(fixedA.x, fixedA.y + s*fixedB)
Editor is loading...
Leave a Comment