KeypadManager.lua 2.66 KB
cc.exports.KeypadManager = class("KeypadManager")

local keyEventsMapping = {
        back = "onKeypadBack",
        menu = "onKeypadMenu",
        left = "onKeypadLeft",
        right = "onKeypadRight",
        up = "onKeypadUp",
        down = "onKeypadDown",
        ok = "onKeypadOk"
    }
    

function KeypadManager:ctor(scene)
    self.keypadReceivers = {};
    self.keypadReceivers[#self.keypadReceivers+1] = scene;

    local eventDispatch = scene:getEventDispatcher()
    local key_listener = cc.EventListenerKeyboard:create()
    key_listener:registerScriptHandler(handler(self,self.keyReleasedHandler),cc.Handler.EVENT_KEYBOARD_RELEASED)
    eventDispatch:addEventListenerWithSceneGraphPriority(key_listener,scene);
end

function KeypadManager:keyReleasedHandler(keyCode, event)
--    local targetPlatform = cc.Application:getInstance():getTargetPlatform();
--	if targetPlatform == cc.PLATFORM_OS_ANDROID then
--        logUI("keycode:"..keyCode.." keycodekey:"..cc.KeyCodeKey[keyCode+1]);
--    end
    
    local receiver = self.keypadReceivers[#self.keypadReceivers];
    if not receiver then
        return;
    end

    local keyname = "";
    if keyCode == cc.KeyCode.KEY_BACK or keyCode == cc.KeyCode.KEY_ESCAPE then
        keyname = "back";
    elseif keyCode == cc.KeyCode.KEY_KP_ENTER or keyCode == cc.KeyCode.KEY_DPAD_CENTER or keyCode == cc.KeyCode.KEY_ENTER then
        keyname = "ok";
    elseif keyCode == cc.KeyCode.KEY_LEFT_ARROW or keyCode == cc.KeyCode.KEY_DPAD_LEFT then
        keyname = "left";
    elseif keyCode == cc.KeyCode.KEY_RIGHT_ARROW or keyCode == cc.KeyCode.KEY_DPAD_RIGHT then
        keyname = "right";
    elseif keyCode == cc.KeyCode.KEY_UP_ARROW or keyCode == cc.KeyCode.KEY_DPAD_UP then
        keyname = "up";
    elseif keyCode == cc.KeyCode.KEY_DOWN_ARROW or keyCode == cc.KeyCode.KEY_DPAD_DOWN then
        keyname = "down";
    elseif keyCode == cc.KeyCode.KEY_MENU then
        keyname = "menu";
    end

    if not keyEventsMapping[keyname] then 
        print("invalid eventcode:"..keyCode);
        return;
    end

    local fname = keyEventsMapping[keyname];
    local fn = receiver[fname];
    if fn then
        fn(receiver);
    end
end

function KeypadManager:addKeypadReceiver(receiver)
    for i=#self.keypadReceivers,1,-1 do
        if self.keypadReceivers[i] == receiver then
            table.remove(self.keypadReceivers,i);
        end
    end
    self.keypadReceivers[#self.keypadReceivers+1] = receiver;
end

function KeypadManager:removeKeypadReceiver(receiver)
    for i=#self.keypadReceivers,1,-1 do
        if self.keypadReceivers[i] == receiver then
            table.remove(self.keypadReceivers,i);
        end
    end
end

return KeypadManager