public MessageHandler RegisterNetwork(string guid, MessageHandler send, PlatformerCharacterConfig config, DemoSettingsServer settings)
    {
        var trustSquared      = settings.trustDistance * settings.trustDistance;
        var broadcastInputMsg = new PlayerInputMessage();

        broadcastInputMsg.playerGuid = guid;
        this.platformerConfig        = config;
        this.networkSend             = send;
        StartCoroutine(ServerUpdate(send, settings.tickRate, guid));
        return((opCode, message) => {
            if (opCode == OpCode.PLAYER_INPUT)
            {
                var updatedState = (PlayerInputMessage)message;
                updatedState.state.CopyTo(platformerInputState);
                var actualPosition = transform.position;
                var clientPosition = updatedState.position.toVector();
                var deltaPosition = actualPosition - clientPosition;
                if (deltaPosition.sqrMagnitude < trustSquared)
                {
                    transform.position = clientPosition;
                }
                else
                {
                    transform.position = (deltaPosition.normalized * settings.trustDistance) + actualPosition;
                }
                updatedState.state.CopyTo(broadcastInputMsg.state);
                broadcastInputMsg.position.FromVector(transform.position);
                send(OpCode.PLAYER_INPUT, broadcastInputMsg);
            }
            return 1;
        });
    }
    private static bool HasWallGrab(PlatformerCharacterState state, PlatformerCharacterConfig config)
    {
        var hasWallGrab = false;

        if (config.canWallGrab)
        {
            foreach (var side in WALLGRAB_SIDES)
            {
                hasWallGrab = state.motorState.blocked[side];
                if (hasWallGrab)
                {
                    break;
                }
            }
        }
        return(hasWallGrab);
    }
Ejemplo n.º 3
0
 public MessageHandler RegisterNetwork(PlatformerCharacterConfig config)
 {
     this.platformerConfig = config;
     return((opCode, message) => {
         if (opCode == OpCode.PLAYER_POSITION)
         {
             var positionMessage = (PositionMessage)message;
             transform.position = positionMessage.position;
         }
         else if (opCode == OpCode.PLAYER_INPUT)
         {
             var inputMessage = (PlayerInputMessage)message;
             if (platformerInputState != null)
             {
                 inputMessage.state.CopyTo(platformerInputState);
             }
             transform.position = inputMessage.position.toVector();
         }
         return 1;
     });
 }
 public static void OnDrawGizmos(PlatformerCharacterConfig config, Transform transform)
 {
     CharacterMotor.OnDrawGizmos(config.motorConfig, transform);
 }