Skip to content

Commit 4368681

Browse files
ZengGengSenLukeUsher
authored andcommitted
fix fc_keyboard support
1 parent 9bd2afe commit 4368681

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

desktop-ui/emulator/famicom.cpp

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ struct Famicom : Emulator {
33
auto load() -> LoadResult override;
44
auto save() -> bool override;
55
auto pak(ares::Node::Object) -> std::shared_ptr<vfs::directory> override;
6+
auto input(ares::Node::Input::Input) -> void override;
67
};
78

89
Famicom::Famicom() {
@@ -86,3 +87,96 @@ auto Famicom::pak(ares::Node::Object node) -> std::shared_ptr<vfs::directory> {
8687
if(node->name() == "Famicom Cartridge") return game->pak;
8788
return {};
8889
}
90+
91+
auto Famicom::input(ares::Node::Input::Input input) -> void {
92+
auto device = ares::Node::parent(input);
93+
if (!device) return;
94+
95+
auto port = ares::Node::parent(device);
96+
if (!port) return;
97+
98+
if (device->name() != "Family Keyboard") return Emulator::input(input);
99+
100+
if (!program.keyboardCaptured) return;
101+
auto button = input->cast<ares::Node::Input::Button>();
102+
103+
if (input->name() == "F1") return button->setValue(inputKeyboard("F1"));
104+
if (input->name() == "F2") return button->setValue(inputKeyboard("F2"));
105+
if (input->name() == "F3") return button->setValue(inputKeyboard("F3"));
106+
if (input->name() == "F4") return button->setValue(inputKeyboard("F4"));
107+
if (input->name() == "F5") return button->setValue(inputKeyboard("F5"));
108+
if (input->name() == "F6") return button->setValue(inputKeyboard("F6"));
109+
if (input->name() == "F7") return button->setValue(inputKeyboard("F7"));
110+
if (input->name() == "F8") return button->setValue(inputKeyboard("F8"));
111+
112+
if (input->name() == "1") return button->setValue(inputKeyboard("Num1"));
113+
if (input->name() == "2") return button->setValue(inputKeyboard("Num2"));
114+
if (input->name() == "3") return button->setValue(inputKeyboard("Num3"));
115+
if (input->name() == "4") return button->setValue(inputKeyboard("Num4"));
116+
if (input->name() == "5") return button->setValue(inputKeyboard("Num5"));
117+
if (input->name() == "6") return button->setValue(inputKeyboard("Num6"));
118+
if (input->name() == "7") return button->setValue(inputKeyboard("Num7"));
119+
if (input->name() == "8") return button->setValue(inputKeyboard("Num8"));
120+
if (input->name() == "9") return button->setValue(inputKeyboard("Num9"));
121+
if (input->name() == "0") return button->setValue(inputKeyboard("Num0"));
122+
if (input->name() == "Minus") return button->setValue(inputKeyboard("Dash"));
123+
if (input->name() == "^") return button->setValue(inputKeyboard("Tilde"));
124+
if (input->name() == "Yen") return button->setValue(inputKeyboard("Backslash"));
125+
if (input->name() == "Stop") return button->setValue(inputKeyboard("Delete"));
126+
127+
if (input->name() == "Escape") return button->setValue(inputKeyboard("Escape"));
128+
if (input->name() == "Q") return button->setValue(inputKeyboard("Q"));
129+
if (input->name() == "W") return button->setValue(inputKeyboard("W"));
130+
if (input->name() == "E") return button->setValue(inputKeyboard("E"));
131+
if (input->name() == "R") return button->setValue(inputKeyboard("R"));
132+
if (input->name() == "T") return button->setValue(inputKeyboard("T"));
133+
if (input->name() == "Y") return button->setValue(inputKeyboard("Y"));
134+
if (input->name() == "U") return button->setValue(inputKeyboard("U"));
135+
if (input->name() == "I") return button->setValue(inputKeyboard("I"));
136+
if (input->name() == "O") return button->setValue(inputKeyboard("O"));
137+
if (input->name() == "P") return button->setValue(inputKeyboard("P"));
138+
if (input->name() == "@") return button->setValue(inputKeyboard("F9"));
139+
if (input->name() == "[") return button->setValue(inputKeyboard("LeftBracket"));
140+
if (input->name() == "Return") return button->setValue(inputKeyboard("Return"));
141+
142+
if (input->name() == "Control") return button->setValue(inputKeyboard("LeftControl"));
143+
if (input->name() == "A") return button->setValue(inputKeyboard("A"));
144+
if (input->name() == "S") return button->setValue(inputKeyboard("S"));
145+
if (input->name() == "D") return button->setValue(inputKeyboard("D"));
146+
if (input->name() == "F") return button->setValue(inputKeyboard("F"));
147+
if (input->name() == "G") return button->setValue(inputKeyboard("G"));
148+
if (input->name() == "H") return button->setValue(inputKeyboard("H"));
149+
if (input->name() == "J") return button->setValue(inputKeyboard("J"));
150+
if (input->name() == "K") return button->setValue(inputKeyboard("K"));
151+
if (input->name() == "L") return button->setValue(inputKeyboard("L"));
152+
if (input->name() == ";") return button->setValue(inputKeyboard("Semicolon"));
153+
if (input->name() == ":") return button->setValue(inputKeyboard("Apostrophe"));
154+
if (input->name() == "]") return button->setValue(inputKeyboard("RightBracket"));
155+
if (input->name() == "Kana") return button->setValue(inputKeyboard("End"));
156+
157+
if (input->name() == "Left Shift") return button->setValue(inputKeyboard("LeftShift"));
158+
if (input->name() == "Z") return button->setValue(inputKeyboard("Z"));
159+
if (input->name() == "X") return button->setValue(inputKeyboard("X"));
160+
if (input->name() == "C") return button->setValue(inputKeyboard("C"));
161+
if (input->name() == "V") return button->setValue(inputKeyboard("V"));
162+
if (input->name() == "B") return button->setValue(inputKeyboard("B"));
163+
if (input->name() == "N") return button->setValue(inputKeyboard("N"));
164+
if (input->name() == "M") return button->setValue(inputKeyboard("M"));
165+
if (input->name() == ",") return button->setValue(inputKeyboard("Comma"));
166+
if (input->name() == ".") return button->setValue(inputKeyboard("Period"));
167+
if (input->name() == "/") return button->setValue(inputKeyboard("Slash"));
168+
if (input->name() == "_") return button->setValue(inputKeyboard("Equal"));
169+
if (input->name() == "Right Shift") return button->setValue(inputKeyboard("RightShift"));
170+
171+
if (input->name() == "Graph") return button->setValue(inputKeyboard("LeftAlt"));
172+
if (input->name() == "Spacebar") return button->setValue(inputKeyboard("Space"));
173+
174+
if (input->name() == "Home") return button->setValue(inputKeyboard("Home"));
175+
if (input->name() == "Insert") return button->setValue(inputKeyboard("Insert"));
176+
if (input->name() == "Delete") return button->setValue(inputKeyboard("Backspace"));
177+
178+
if (input->name() == "Up") return button->setValue(inputKeyboard("Up"));
179+
if (input->name() == "Down") return button->setValue(inputKeyboard("Down"));
180+
if (input->name() == "Left") return button->setValue(inputKeyboard("Left"));
181+
if (input->name() == "Right") return button->setValue(inputKeyboard("Right"));
182+
}

0 commit comments

Comments
 (0)