Artifact b2c5ea408f92a23380fab4e95368720e361ac57592da89421f86c06f394655ab:
- File
tests/gamecontroller/GameControllerTests.m
— part of check-in
[39639cd987]
at
2024-06-02 21:24:25
on branch trunk
— Completely redesign and rewrite ObjFWHID
Right now only evdev is supported, support for others will be added back
later. (user: js, size: 4015) [annotate] [blame] [check-ins using]
/* * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * <https://www.gnu.org/licenses/>. */ #include "config.h" #import "OFApplication.h" #import "OFArray.h" #import "OFColor.h" #import "OFDate.h" #import "OFDictionary.h" #import "OFNumber.h" #import "OFStdIOStream.h" #import "OFThread.h" #import "HIDGameController.h" #import "HIDGameControllerAxis.h" #import "HIDGameControllerButton.h" #import "OFReadFailedException.h" #if defined(OF_NINTENDO_DS) static size_t buttonsPerLine = 2; #elif defined(OF_NINTENDO_3DS) static size_t buttonsPerLine = 3; #else static size_t buttonsPerLine = 5; #endif #if defined(OF_WII) || defined(OF_NINTENDO_DS) || defined(OF_NINTENDO_3DS) # define red maroon # define yellow olive # define gray silver #endif @interface GameControllerTests: OFObject <OFApplicationDelegate> { OFMutableArray OF_GENERIC(HIDGameController *) *_controllers; OFDate *_lastControllersUpdate; } @end OF_APPLICATION_DELEGATE(GameControllerTests) @implementation GameControllerTests - (void)applicationDidFinishLaunching: (OFNotification *)notification { #if defined(OF_WII) || defined(OF_NINTENDO_DS) || defined(OF_NINTENDO_3DS) [OFStdIOStream setUpConsole]; #endif for (;;) { void *pool = objc_autoreleasePoolPush(); if (_lastControllersUpdate == nil || -[_lastControllersUpdate timeIntervalSinceNow] > 1) { [_controllers release]; [_lastControllersUpdate release]; _controllers = [[HIDGameController controllers] mutableCopy]; _lastControllersUpdate = [[OFDate alloc] init]; [OFStdOut clear]; } [OFStdOut setCursorPosition: OFMakePoint(0, 0)]; for (HIDGameController *controller in _controllers) { OFArray OF_GENERIC(OFString *) *buttons = controller.buttons.allKeys.sortedArray; OFArray OF_GENERIC(OFString *) *axes = controller.axes.allKeys.sortedArray; size_t i = 0; [OFStdOut setForegroundColor: [OFColor green]]; [OFStdOut writeString: controller.description]; @try { [controller retrieveState]; } @catch (OFReadFailedException *e) { [OFStdOut setForegroundColor: [OFColor red]]; [OFStdOut writeFormat: @"\n%@", e.description]; continue; } for (OFString *name in buttons) { HIDGameControllerButton *button = [controller.buttons objectForKey: name]; if (i == 0) [OFStdOut writeString: @"\n"]; if (button.value == 1) [OFStdOut setForegroundColor: [OFColor red]]; else if (button.value > 0.5) [OFStdOut setForegroundColor: [OFColor yellow]]; else if (button.value > 0) [OFStdOut setForegroundColor: [OFColor green]]; else [OFStdOut setForegroundColor: [OFColor gray]]; [OFStdOut writeFormat: @"[%@]", button.name]; if (++i == buttonsPerLine) { i = 0; } else [OFStdOut writeString: @" "]; } [OFStdOut setForegroundColor: [OFColor gray]]; [OFStdOut writeString: @"\n"]; for (OFString *name in axes) { HIDGameControllerAxis *axis = [controller.axes objectForKey: name]; [OFStdOut writeFormat: @"%@: %5.2f ", name, axis.value]; } [OFStdOut writeString: @"\n"]; } #if defined(OF_WII) || defined(OF_NINTENDO_DS) || defined(OF_NINTENDO_3DS) [OFThread waitForVerticalBlank]; #else [OFThread sleepForTimeInterval: 1.f / 60.f]; #endif objc_autoreleasePoolPop(pool); } } @end