|
|
|
using System;
|
|
|
|
using Unity.Netcode;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.InputSystem;
|
|
|
|
|
|
|
|
namespace Game {
|
|
|
|
|
|
|
|
public enum Side {Top, Bottom}
|
|
|
|
|
|
|
|
public class Player : NetworkBehaviour {
|
|
|
|
|
|
|
|
public Side Side { get; set; }
|
|
|
|
|
|
|
|
private int score;
|
|
|
|
|
|
|
|
protected bool goingLeft, goingRight;
|
|
|
|
|
|
|
|
// Units per second
|
|
|
|
protected float Speed => 15;
|
|
|
|
|
|
|
|
// Unit distance from zero
|
|
|
|
protected float Border => 10;
|
|
|
|
|
|
|
|
private SpeedModification speedModification;
|
|
|
|
private BorderModification borderModification;
|
|
|
|
|
|
|
|
protected float Width => transform.localScale.x;
|
|
|
|
|
|
|
|
private float LeftEdge => X() - Width / 2;
|
|
|
|
private float RightEdge => X() + Width / 2;
|
|
|
|
|
|
|
|
protected float X() {
|
|
|
|
return transform.position.x;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected float Y() {
|
|
|
|
return transform.position.y;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void ClampInsideBorders() {
|
|
|
|
if (LeftEdge < -Border)
|
|
|
|
transform.Translate(Vector2.right * (-Border - LeftEdge), Space.World);
|
|
|
|
if (RightEdge > Border)
|
|
|
|
transform.Translate(Vector2.left * (RightEdge - Border), Space.World);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void TryLinearMove(float h) {
|
|
|
|
Vector2 trans = new Vector2((goingLeft ? -1 : 0) + (goingRight ? 1 : 0), 0);
|
|
|
|
trans *= Speed * h;
|
|
|
|
transform.Translate(trans, Space.World);
|
|
|
|
ClampInsideBorders();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void Start() {
|
|
|
|
float y = Side switch {
|
|
|
|
Side.Bottom => BorderSize.Singleton.y1,
|
|
|
|
Side.Top => BorderSize.Singleton.y2,
|
|
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
|
|
};
|
|
|
|
transform.position = new Vector2(0, y);
|
|
|
|
if (Side == Side.Top)
|
|
|
|
transform.Rotate(transform.forward, 180);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public class RealPlayer : Player {
|
|
|
|
public bool isThisClient;
|
|
|
|
|
|
|
|
private void FixedUpdate() {
|
|
|
|
if (!isThisClient)
|
|
|
|
return;
|
|
|
|
|
|
|
|
var keyboard = Keyboard.current;
|
|
|
|
goingLeft = keyboard.aKey.isPressed;
|
|
|
|
goingRight = keyboard.dKey.isPressed;
|
|
|
|
|
|
|
|
TryLinearMove(Time.fixedDeltaTime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|