summaryrefslogtreecommitdiff
path: root/app/mac/impl/input-device-gc-gamepad.mm
blob: 5d19120c4109ab17228633dfec3c754c55b061d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#import "impl/input-device-gc-gamepad.hh"

namespace nes::app::mac
{
	input_device_gc_gamepad::input_device_gc_gamepad(GCExtendedGamepad* profile)
		: profile_{ profile }
	{
	}

	auto input_device_gc_gamepad::get_name() const -> string_view
	{
		return [[get_controller() vendorName] UTF8String];
	}

	auto input_device_gc_gamepad::get_index() const -> index
	{
		switch ([get_controller() playerIndex])
		{
			case GCControllerPlayerIndex1:
				return index::player_1;
			case GCControllerPlayerIndex2:
				return index::player_2;
			case GCControllerPlayerIndex3:
			case GCControllerPlayerIndex4:
			case GCControllerPlayerIndexUnset:
				break;
		}
		return index::unused;
	}

	auto input_device_gc_gamepad::set_index(index const idx) -> void
	{
		switch (idx)
		{
			case index::unused:
				[get_controller() setPlayerIndex:GCControllerPlayerIndexUnset];
				break;
			case index::player_1:
				[get_controller() setPlayerIndex:GCControllerPlayerIndex1];
				break;
			case index::player_2:
				[get_controller() setPlayerIndex:GCControllerPlayerIndex2];
				break;
		}
	}

	auto input_device_gc_gamepad::read_buttons() -> sys::button_mask
	{
		auto res = sys::button_mask{};
		if ([[[profile_ dpad] up] isPressed]) { res.add(sys::buttons::up); }
		if ([[[profile_ dpad] down] isPressed]) { res.add(sys::buttons::down); }
		if ([[[profile_ dpad] left] isPressed]) { res.add(sys::buttons::left); }
		if ([[[profile_ dpad] right] isPressed]) { res.add(sys::buttons::right); }
		if ([[profile_ buttonA] isPressed]) { res.add(sys::buttons::a); }
		if ([[profile_ buttonB] isPressed]) { res.add(sys::buttons::b); }
		if ([[profile_ leftTrigger] isPressed]) { res.add(sys::buttons::select); }
		if ([[profile_ rightTrigger] isPressed]) { res.add(sys::buttons::start); }
		return res;
	}
} // namespace nes::app::mac