68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
public class ComInput : AbstractInputSource
|
||
{
|
||
private const int PIN_COUNT = 16;
|
||
private const char POSITIVE = '0';
|
||
|
||
private bool[] buttonState = new bool[PIN_COUNT];
|
||
private bool[] buttonDown = new bool[PIN_COUNT];
|
||
private bool[] buttonUp = new bool[PIN_COUNT];
|
||
|
||
private Dictionary<InSignal, int> pinMappings = new Dictionary<InSignal, int>();
|
||
private Dictionary<int, InSignal> reverseMappings = new Dictionary<int, InSignal>();
|
||
|
||
public override bool Initialize()
|
||
{
|
||
return true;
|
||
}
|
||
|
||
// Обновляет состояния инпута когда приходит новый ввод с платы. Дергается событием.
|
||
private void UpdateInputState(string input)
|
||
{
|
||
for (int i = 0; i < input.Length; i++)
|
||
{
|
||
// Получаем новое состояние пина
|
||
bool newState = input[i] == POSITIVE;
|
||
|
||
// Состояние пина изменилось => пишем в буферы
|
||
if (newState != buttonState[i])
|
||
{
|
||
if (newState) // Пин был зажат
|
||
{
|
||
buttonDown[i] = true;
|
||
buttonUp[i] = false;
|
||
}
|
||
else // Пин был отжат
|
||
{
|
||
buttonDown[i] = false;
|
||
buttonUp[i] = true;
|
||
}
|
||
}
|
||
|
||
buttonState[i] = newState;
|
||
}
|
||
}
|
||
|
||
public override bool AnyButton()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
public override bool GetButton(InSignal button)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
public override bool GetButtonDown(InSignal button)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
public override bool GetButtonUp(InSignal button)
|
||
{
|
||
return false;
|
||
}
|
||
} |