mirror of https://github.com/axmolengine/axmol.git
259 lines
7.0 KiB
C++
259 lines
7.0 KiB
C++
|
#include "GameControllerTest.h"
|
||
|
#include "AppMacros.h"
|
||
|
#include "ui/CocosGUI.h"
|
||
|
|
||
|
USING_NS_CC;
|
||
|
|
||
|
|
||
|
Scene* GameControllerTest::scene()
|
||
|
{
|
||
|
auto scene = Scene::create();
|
||
|
GameControllerTest *layer = GameControllerTest::create();
|
||
|
scene->addChild(layer);
|
||
|
|
||
|
return scene;
|
||
|
}
|
||
|
|
||
|
GameControllerTest::~GameControllerTest()
|
||
|
{
|
||
|
Controller::stopDiscoveryController();
|
||
|
}
|
||
|
|
||
|
bool GameControllerTest::init()
|
||
|
{
|
||
|
if ( !Layer::init() )
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
auto visibleSize = Director::getInstance()->getVisibleSize();
|
||
|
auto origin = Director::getInstance()->getVisibleOrigin();
|
||
|
|
||
|
auto tmpPos = Vec2(visibleSize / 2) + origin;
|
||
|
_actor = Sprite::create("CloseNormal.png");
|
||
|
_actor->setPosition(tmpPos);
|
||
|
this->addChild(_actor,10);
|
||
|
|
||
|
tmpPos.y -= 35;
|
||
|
_statusLabel = Label::createWithTTF("status", "fonts/Marker Felt.ttf", 40);
|
||
|
_statusLabel->setPosition(tmpPos);
|
||
|
this->addChild(_statusLabel, 0, 100);
|
||
|
|
||
|
tmpPos.y += 65;
|
||
|
_leftTriggerLabel = Label::createWithTTF("left trigger", "fonts/Marker Felt.ttf", 40);
|
||
|
_leftTriggerLabel->setPosition(tmpPos);
|
||
|
this->addChild(_leftTriggerLabel, 0, 100);
|
||
|
|
||
|
tmpPos.y += 40;
|
||
|
_rightTriggerLabel = Label::createWithTTF("right trigger", "fonts/Marker Felt.ttf", 40);
|
||
|
_rightTriggerLabel->setPosition(tmpPos);
|
||
|
this->addChild(_rightTriggerLabel, 0, 100);
|
||
|
|
||
|
_listener = EventListenerController::create();
|
||
|
_listener->onConnected = [=](Controller* controller, Event* event){
|
||
|
_player1 = controller;
|
||
|
_statusLabel->setString("controller connected!");
|
||
|
};
|
||
|
|
||
|
_listener->onDisconnected = [=](Controller* controller, Event* event){
|
||
|
_player1 = nullptr;
|
||
|
_statusLabel->setString("controller disconnected!");
|
||
|
};
|
||
|
|
||
|
_listener->onButtonPressed = CC_CALLBACK_3(GameControllerTest::onButtonPressed, this);
|
||
|
_listener->onButtonReleased = CC_CALLBACK_3(GameControllerTest::onButtonReleased, this);
|
||
|
_listener->onAxisValueChanged = CC_CALLBACK_3(GameControllerTest::onAxisValueChanged, this);
|
||
|
|
||
|
_eventDispatcher->addEventListenerWithSceneGraphPriority(_listener, this);
|
||
|
|
||
|
Controller::startDiscoveryController();
|
||
|
|
||
|
auto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(GameControllerTest::menuCloseCallback, this));
|
||
|
closeItem->setPosition(origin + visibleSize - closeItem->getContentSize() / 2);
|
||
|
|
||
|
auto menu = Menu::create(closeItem,nullptr);
|
||
|
menu->setPosition(Vec2::ZERO);
|
||
|
this->addChild(menu);
|
||
|
|
||
|
//get game pad status in polling mode
|
||
|
scheduleUpdate();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void GameControllerTest::onButtonPressed(cocos2d::Controller *controller, cocos2d::ControllerButtonInput *button, cocos2d::Event *event)
|
||
|
{
|
||
|
if (controller == nullptr)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
_player1 = controller;
|
||
|
|
||
|
auto gamePad = controller->getGamepad();
|
||
|
|
||
|
if (button == gamePad->getButtonA())
|
||
|
{
|
||
|
_statusLabel->setString("button A pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getButtonB())
|
||
|
{
|
||
|
_statusLabel->setString("button B pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getButtonX())
|
||
|
{
|
||
|
_statusLabel->setString("button X pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getButtonY())
|
||
|
{
|
||
|
_statusLabel->setString("button Y pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getUp())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad up pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getDown())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad down pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getLeft())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad left pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getRight())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad right pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getLeftShoulder())
|
||
|
{
|
||
|
_statusLabel->setString("Left shoulder pressed!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getRightShoulder())
|
||
|
{
|
||
|
_statusLabel->setString("Right shoulder pressed!");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GameControllerTest::onButtonReleased(cocos2d::Controller *controller, cocos2d::ControllerButtonInput *button, cocos2d::Event *event)
|
||
|
{
|
||
|
if (controller == nullptr)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
_player1 = controller;
|
||
|
|
||
|
auto gamePad = controller->getGamepad();
|
||
|
|
||
|
if (button == gamePad->getButtonA())
|
||
|
{
|
||
|
_statusLabel->setString("button A released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getButtonB())
|
||
|
{
|
||
|
_statusLabel->setString("button B released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getButtonX())
|
||
|
{
|
||
|
_statusLabel->setString("button X released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getButtonY())
|
||
|
{
|
||
|
_statusLabel->setString("button Y released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getUp())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad up released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getDown())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad down released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getLeft())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad left released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getDirectionPad()->getRight())
|
||
|
{
|
||
|
_statusLabel->setString("Dpad right released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getLeftShoulder())
|
||
|
{
|
||
|
_statusLabel->setString("Left shoulder released!");
|
||
|
}
|
||
|
|
||
|
if (button == gamePad->getRightShoulder())
|
||
|
{
|
||
|
_statusLabel->setString("Right shoulder released!");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GameControllerTest::onAxisValueChanged(cocos2d::Controller* controller, cocos2d::ControllerAxisInput* axis, cocos2d::Event* event)
|
||
|
{
|
||
|
if (controller == nullptr)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
_player1 = controller;
|
||
|
|
||
|
auto moveDelta = axis->getValue();
|
||
|
Vec2 newPos = _actor->getPosition();
|
||
|
auto gamePad = controller->getGamepad();
|
||
|
|
||
|
if (axis == gamePad->getLeftThumbstick()->getAxisX() || axis == gamePad->getRightThumbstick()->getAxisX())
|
||
|
{
|
||
|
newPos.x += moveDelta;
|
||
|
}
|
||
|
else if (axis == gamePad->getLeftThumbstick()->getAxisY() || axis == gamePad->getRightThumbstick()->getAxisY())
|
||
|
{
|
||
|
newPos.y -= moveDelta;
|
||
|
}
|
||
|
_actor->setPosition(newPos);
|
||
|
}
|
||
|
|
||
|
void GameControllerTest::update(float dt)
|
||
|
{
|
||
|
if (_player1 && _player1->isConnected())
|
||
|
{
|
||
|
Vec2 newPos = _actor->getPosition();
|
||
|
auto gamePad = _player1->getGamepad();
|
||
|
|
||
|
newPos.x += gamePad->getLeftThumbstick()->getAxisX()->getValue();
|
||
|
newPos.y -= gamePad->getLeftThumbstick()->getAxisY()->getValue();
|
||
|
|
||
|
newPos.x += gamePad->getRightThumbstick()->getAxisX()->getValue();
|
||
|
newPos.y -= gamePad->getRightThumbstick()->getAxisY()->getValue();
|
||
|
|
||
|
_actor->setPosition(newPos);
|
||
|
|
||
|
char triggerStatus[50];
|
||
|
sprintf(triggerStatus,"left trigger:%f",gamePad->getLeftTrigger()->getValue());
|
||
|
_leftTriggerLabel->setString(triggerStatus);
|
||
|
sprintf(triggerStatus,"right trigger:%f",gamePad->getRightTrigger()->getValue());
|
||
|
_rightTriggerLabel->setString(triggerStatus);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GameControllerTest::menuCloseCallback(Ref* sender)
|
||
|
{
|
||
|
Director::getInstance()->end();
|
||
|
|
||
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||
|
exit(0);
|
||
|
#endif
|
||
|
}
|