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); }
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); }