function DPad() { var width = Atomic.graphics.width; var height = Atomic.graphics.height; //create a new view for ours dpad //horizontal buttons sizeX, sizeY var horizButtonsSize = [75, 61]; var verticButtonsSize = [61, 75]; var dpadSpacingX = -30; var dpadSpacingY = 30; //init function should be called adding vertical/horizontal buttons //it's like we are commiting ours buttons this.init = function(view) { if (view) this.view = view; else this.view = new Atomic.UIView(); //if touch buttons skin is not loaded if(!DPad.skinLoaded) { //load skin Atomic.ui.loadSkin("UI/DPadSkin.ui"); DPad.skinLoaded = true; } //create a dpad layout this.dpad = new Atomic.UILayout(); this.dpad.rect = this.view.rect; if(this.leftLayout) this.leftLayout.rect = this.dpad.rect; if(this.rightLayout) this.rightLayout.rect = this.dpad.rect; if(this.upDownLayout) this.upDownLayout.rect = this.dpad.rect; //sets dpad position //move buttons a bit closer to each other this.dpad.spacing = dpadSpacingX; if(this.upDownLayout) this.upDownLayout.spacing = dpadSpacingY; //if layouts are exists, add them if(this.leftLayout) this.dpad.addChild(this.leftLayout); if(this.upDownLayout) this.dpad.addChild(this.upDownLayout); if(this.rightLayout) this.dpad.addChild(this.rightLayout); //ok, add ours dpad to the view this.view.addChild(this.dpad); //if we are using special view for dpad if(!view) { //update its size and position this.updateViewSize(); this.setPosition(width/20, height/2); } else { //if we are using custom view, then just set dpad position this.dpad.setPosition(-width/3, height/4); } }; //adds horizontal and vertical buttons this.addAll = function() { //adds horizontal buttons this.addHorizontal(); //adds vertical buttons this.addVertical(); }; //adds horizontal buttons this.addHorizontal = function() { //if layout params doesn't exist create a new one if(!this.layoutParamsLeftRight) this.initLeftRightLayoutParams(); //new layout for left button this.leftLayout = new Atomic.UILayout(); this.leftLayout.layoutSize = Atomic.UI_LAYOUT_SIZE_PREFERRED; //create a left button this.leftButton = new Atomic.UIButton(); this.leftButton.skinBg = "TouchButtonLeft"; this.leftButton.layoutParams = this.layoutParamsLeftRight; this.leftLayout.addChild(this.leftButton); //new layout for right button this.rightLayout = new Atomic.UILayout(); this.rightLayout.layoutSize = Atomic.UI_LAYOUT_SIZE_PREFERRED; //create a right button this.rightButton = new Atomic.UIButton(); this.rightButton.skinBg = "TouchButtonRight"; this.rightButton.layoutParams = this.layoutParamsLeftRight; this.rightLayout.addChild(this.rightButton); //it makes ours buttons uncaptured, this is used for the multiTouch, to don't `concentrate` only on one button this.leftButton.setCapturing(false); this.rightButton.setCapturing(false); //bind our ui button to the specified Keyboard Key Atomic.input.bindButton(this.rightButton, Atomic.KEY_RIGHT); Atomic.input.bindButton(this.leftButton, Atomic.KEY_LEFT); }; //adds vertical buttons this.addVertical = function() { //if layout params doesn't exist create a new one if(!this.layoutParamsUpDown) this.initUpDownLayoutParams(); //create a new layout for up and down buttons this.upDownLayout = new Atomic.UILayout(); this.upDownLayout.axis = Atomic.UI_AXIS_Y; this.upDownLayout.spacing = 50; //create an up buttons this.upButton = new Atomic.UIButton(); this.upButton.skinBg = "TouchButtonUp"; this.upButton.layoutParams = this.layoutParamsUpDown; this.upDownLayout.addChild(this.upButton); //create a down button this.downButton = new Atomic.UIButton(); this.downButton.skinBg = "TouchButtonDown"; this.downButton.layoutParams = this.layoutParamsUpDown; this.upDownLayout.addChild(this.downButton); this.upDownLayout.layoutSize = Atomic.UI_LAYOUT_SIZE_PREFERRED; //it makes ours buttons uncaptured, this is used for the multiTouch, to don't `concentrate` only on one button this.upButton.setCapturing(false); this.downButton.setCapturing(false); //bind our ui button to the specified Keyboard Button Atomic.input.bindButton(this.upButton, Atomic.KEY_UP); Atomic.input.bindButton(this.downButton, Atomic.KEY_DOWN); }; //inits layout prams for up/down buttons this.initUpDownLayoutParams = function() { this.layoutParamsUpDown = new Atomic.UILayoutParams(); this.layoutParamsUpDown.minWidth = verticButtonsSize[0]; this.layoutParamsUpDown.minHeight = verticButtonsSize[1]; this.layoutParamsUpDown.width = verticButtonsSize[0]*2; this.layoutParamsUpDown.height = verticButtonsSize[1]*2; this.layoutParamsUpDown.maxWidth = verticButtonsSize[0]*6; this.layoutParamsUpDown.maxHeight = verticButtonsSize[1]*6; }; //inits layout params for left/right buttons this.initLeftRightLayoutParams = function() { this.layoutParamsLeftRight = new Atomic.UILayoutParams(); this.layoutParamsLeftRight.minWidth = horizButtonsSize[0]; this.layoutParamsLeftRight.minHeight = horizButtonsSize[1]; this.layoutParamsLeftRight.width = horizButtonsSize[0]*2; this.layoutParamsLeftRight.height = horizButtonsSize[1]*2; this.layoutParamsLeftRight.maxWidth = horizButtonsSize[0]*6; this.layoutParamsLeftRight.maxHeight = horizButtonsSize[1]*6; }; //set horizontal spacing this.setSpacingX = function(spacing) { dpadSpacingX = spacing; this.dpad.spacing = spacing; }; //set vertical spacing this.setSpacingY = function(spacing) { dpadSpacingY = spacing; this.upDownLayout.spacing = spacing; }; //set view position this.setPosition = function(x, y) { this.view.setPosition(x, y); }; this.updateViewSize = function() { this.view.setSize(horizButtonsSize[0]*4+verticButtonsSize[0]*2+dpadSpacingX, horizButtonsSize[1]*2+verticButtonsSize[1]*4+dpadSpacingY); }; this.remove = function() { this.view.removeChild(this.dpad); }; } module.exports = DPad;