public FrameInput( Fix64 horizontalAxisRaw, Fix64 verticalAxisRaw, NetworkButtonPress buttons, sbyte selectedOption ){ // Make sure the buttons match the axis values if (horizontalAxisRaw == 0f){ buttons = buttons & ~NetworkButtonPress.Back; buttons = buttons & ~NetworkButtonPress.Forward; }else if (horizontalAxisRaw > 0f){ buttons = buttons & ~NetworkButtonPress.Back; buttons = buttons | NetworkButtonPress.Forward; }else{ buttons = buttons | NetworkButtonPress.Back; buttons = buttons & ~NetworkButtonPress.Forward; } if (verticalAxisRaw == 0f){ buttons = buttons & ~NetworkButtonPress.Down; buttons = buttons & ~NetworkButtonPress.Up; }else if (verticalAxisRaw > 0f){ buttons = buttons & ~NetworkButtonPress.Down; buttons = buttons | NetworkButtonPress.Up; }else{ buttons = buttons | NetworkButtonPress.Down; buttons = buttons & ~NetworkButtonPress.Up; } // Assign the values this.horizontalAxisRaw = horizontalAxisRaw; this.verticalAxisRaw = verticalAxisRaw; this.buttons = buttons; this.selectedOption = selectedOption; }
protected override void AddToStream(BinaryWriter writer, InputBufferMessageContent data) { writer.Write(data.NextExpectedFrame); writer.Write(data.InputBuffer != null ? data.InputBuffer.Count : 0); if (UFE.config.inputOptions.forceDigitalInput) { for (int i = 0; i < data.InputBuffer.Count; ++i) { writer.Write(data.InputBuffer[i].Item1); NetworkButtonPress button = data.InputBuffer[i].Item2.buttons; if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size8Bits) { button &= (NetworkButtonPress)((sbyte)(-1)); writer.Write((byte)button); } else if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size16Bits) { button &= (NetworkButtonPress)((short)(-1)); writer.Write((ushort)button); } else if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size32Bits) { writer.Write((uint)button); } writer.Write(data.InputBuffer[i].Item2.selectedOption); } } else { for (int i = 0; i < data.InputBuffer.Count; ++i) { writer.Write(data.InputBuffer[i].Item1); writer.Write((float)data.InputBuffer[i].Item2.horizontalAxisRaw); writer.Write((float)data.InputBuffer[i].Item2.verticalAxisRaw); NetworkButtonPress button = data.InputBuffer[i].Item2.buttons; if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size8Bits) { button &= (NetworkButtonPress)((sbyte)(-1)); writer.Write((byte)button); } else if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size16Bits) { button &= (NetworkButtonPress)((short)(-1)); writer.Write((ushort)button); } else if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size32Bits) { writer.Write((uint)button); } writer.Write(data.InputBuffer[i].Item2.selectedOption); } } }
protected virtual void SendNetworkPackage() { int count = this.inputBuffer.Count; FrameInput[] buffer = new FrameInput[count]; for (int i = 0; i < count; ++i) { float horizontalAxis = 0f; float horizontalAxisRaw = 0f; float verticalAxis = 0f; float verticalAxisRaw = 0f; NetworkButtonPress buttons = NetworkButtonPress.None; foreach (KeyValuePair <InputReferences, InputEvents> pair in this.inputBuffer[i]) { InputReferences inputReference = pair.Key; InputEvents inputEvent = pair.Value; if (inputReference.inputType == InputType.HorizontalAxis) { horizontalAxis = inputEvent.axis; horizontalAxisRaw = inputEvent.axisRaw; } else if (inputReference.inputType == InputType.VerticalAxis) { verticalAxis = inputEvent.axis; verticalAxisRaw = inputEvent.axisRaw; } else if (inputReference.inputType == InputType.Button && inputEvent.button) { buttons |= inputReference.engineRelatedButton.ToNetworkButtonPress(); } } buffer[i] = new FrameInput( horizontalAxis, horizontalAxisRaw, verticalAxis, verticalAxisRaw, buttons, this.optionSelections[i] == null ? -2 : this.optionSelections[i].Value ); } InputBufferMessage msg = new InputBufferMessage(this.player, this.currentFrame, buffer); if (UFE.config.networkOptions.fakeNetwork) { RemotePlayerController remoteController = UFE.GetController(UFE.GetRemotePlayer()) as RemotePlayerController; remoteController.OnMessageReceived(msg.Serialize(), new NetworkMessageInfo()); } else { UFE.multiplayerAPI.SendNetworkMessage(msg); } }
public static FrameInput ToFrameInput(this Dictionary <InputReferences, InputEvents> inputs, sbyte?selectedOption) { Fix64 horizontalAxisRaw = 0; Fix64 verticalAxisRaw = 0; NetworkButtonPress buttons = NetworkButtonPress.None; foreach (KeyValuePair <InputReferences, InputEvents> pair in inputs) { InputReferences inputReference = pair.Key; InputEvents inputEvent = pair.Value; if (inputReference.inputType == InputType.HorizontalAxis) { horizontalAxisRaw = inputEvent.axisRaw; } else if (inputReference.inputType == InputType.VerticalAxis) { verticalAxisRaw = inputEvent.axisRaw; } else if (inputReference.inputType == InputType.Button && inputEvent.button) { NetworkButtonPress buttonPress = inputReference.engineRelatedButton.ToNetworkButtonPress(); if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size8Bits) { buttonPress &= (NetworkButtonPress)((sbyte)(-1)); } else if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size16Bits) { buttonPress &= (NetworkButtonPress)((short)(-1)); } buttons |= buttonPress; //buttons |= inputReference.engineRelatedButton.ToNetworkButtonPress(); } } if (UFE.config.inputOptions.forceDigitalInput) { return(new FrameInput( FPMath.Sign(horizontalAxisRaw), FPMath.Sign(verticalAxisRaw), buttons, selectedOption == null ? FrameInput.NullSelectedOption : selectedOption.Value )); } else { return(new FrameInput( horizontalAxisRaw, verticalAxisRaw, buttons, selectedOption == null ? FrameInput.NullSelectedOption : selectedOption.Value )); } }
public static NetworkButtonPress ToNetworkButtonPress(this IEnumerable <ButtonPress> buttons) { NetworkButtonPress n = NetworkButtonPress.None; if (buttons != null) { foreach (ButtonPress button in buttons) { n |= button.ToNetworkButtonPress(); } } return(n); }
public FrameInput( float horizontalAxis, float horizontalAxisRaw, float verticalAxis, float verticalAxisRaw, NetworkButtonPress buttons, int selectedOption = -1 ) { this.horizontalAxis = horizontalAxis; this.horizontalAxisRaw = horizontalAxisRaw; this.verticalAxis = verticalAxis; this.verticalAxisRaw = verticalAxisRaw; this.buttons = buttons; this.selectedOption = selectedOption; }
public static FrameInput ReadFromStream(BinaryReader reader) { float horizontalAxis = reader.ReadSingle(); float horizontalAxisRaw = reader.ReadSingle(); float verticalAxis = reader.ReadSingle(); float verticalAxisRaw = reader.ReadSingle(); NetworkButtonPress buttons = (NetworkButtonPress)reader.ReadInt32(); int selectedOption = reader.ReadInt32(); return(new FrameInput( horizontalAxis, horizontalAxisRaw, verticalAxis, verticalAxisRaw, buttons, selectedOption )); }
public static Tuple <Dictionary <InputReferences, InputEvents>, sbyte?> GetInputEvents( this IList <InputReferences> inputReferences, FrameInput frameInput ) { Dictionary <InputReferences, InputEvents> dict = new Dictionary <InputReferences, InputEvents>(); sbyte?selectedOption = (frameInput.selectedOption == FrameInput.NullSelectedOption ? null : new sbyte?(frameInput.selectedOption)); NetworkButtonPress buttons = frameInput.buttons; if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size8Bits) { buttons &= (NetworkButtonPress)((sbyte)(-1)); } else if (UFE.config.networkOptions.networkMessageSize == NetworkMessageSize.Size16Bits) { buttons &= (NetworkButtonPress)((short)(-1)); } foreach (InputReferences input in inputReferences) { if (input.inputType == InputType.HorizontalAxis) { dict[input] = new InputEvents(frameInput.horizontalAxisRaw); } else if (input.inputType == InputType.VerticalAxis) { dict[input] = new InputEvents(frameInput.verticalAxisRaw); } else if (input.inputType == InputType.Button) { NetworkButtonPress networkButtonPress = input.engineRelatedButton.ToNetworkButtonPress(); dict[input] = new InputEvents((buttons & networkButtonPress) != NetworkButtonPress.None); } } return(new Tuple <Dictionary <InputReferences, InputEvents>, sbyte?>(dict, selectedOption)); }
public static ReadOnlyCollection <ButtonPress> ToButtonPresses(this NetworkButtonPress buttonPresses) { List <ButtonPress> list = new List <ButtonPress>(); if (buttonPresses != NetworkButtonPress.None) { if ((buttonPresses & NetworkButtonPress.Up) != 0) { list.Add(ButtonPress.Up); } if ((buttonPresses & NetworkButtonPress.Down) != 0) { list.Add(ButtonPress.Down); } if ((buttonPresses & NetworkButtonPress.Back) != 0) { list.Add(ButtonPress.Back); } if ((buttonPresses & NetworkButtonPress.Forward) != 0) { list.Add(ButtonPress.Forward); } if ((buttonPresses & NetworkButtonPress.Button1) != 0) { list.Add(ButtonPress.Button1); } if ((buttonPresses & NetworkButtonPress.Button2) != 0) { list.Add(ButtonPress.Button2); } if ((buttonPresses & NetworkButtonPress.Button3) != 0) { list.Add(ButtonPress.Button3); } if ((buttonPresses & NetworkButtonPress.Button4) != 0) { list.Add(ButtonPress.Button4); } if ((buttonPresses & NetworkButtonPress.Button5) != 0) { list.Add(ButtonPress.Button5); } if ((buttonPresses & NetworkButtonPress.Button6) != 0) { list.Add(ButtonPress.Button6); } if ((buttonPresses & NetworkButtonPress.Button7) != 0) { list.Add(ButtonPress.Button7); } if ((buttonPresses & NetworkButtonPress.Button8) != 0) { list.Add(ButtonPress.Button8); } if ((buttonPresses & NetworkButtonPress.Button9) != 0) { list.Add(ButtonPress.Button9); } if ((buttonPresses & NetworkButtonPress.Button10) != 0) { list.Add(ButtonPress.Button10); } if ((buttonPresses & NetworkButtonPress.Button11) != 0) { list.Add(ButtonPress.Button11); } if ((buttonPresses & NetworkButtonPress.Button12) != 0) { list.Add(ButtonPress.Button12); } if ((buttonPresses & NetworkButtonPress.Start) != 0) { list.Add(ButtonPress.Start); } } return(new ReadOnlyCollection <ButtonPress>(list)); }
public FrameInput(NetworkButtonPress buttons, sbyte selectedOption) : this( ((buttons & NetworkButtonPress.Forward) != 0 ? 1 : 0) - ((buttons & NetworkButtonPress.Back) != 0 ? 1 : 0), ((buttons & NetworkButtonPress.Up) != 0 ? 1 : 0) - ((buttons & NetworkButtonPress.Down) != 0 ? 1 : 0), buttons, selectedOption ){}