示例#1
0
	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;
	}
示例#2
0
    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);
        }
    }
示例#4
0
    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);
    }
示例#6
0
 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;
 }
示例#7
0
    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
                   ));
    }
示例#8
0
    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));
    }
示例#10
0
	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
	){}