diff --git a/Project.xml b/Project.xml index be1f2cbed..9e90b237e 100644 --- a/Project.xml +++ b/Project.xml @@ -122,7 +122,7 @@ <!--In case you want to use the ui package--> <haxelib name="flixel-ui" /> - <haxelib name="newgrounds" unless="switch"/> + <!--haxelib name="newgrounds" unless="switch"/> --> <haxelib name="faxe" if='switch'/> <haxelib name="polymod"/> <haxelib name="hxcpp-debug-server" if="desktop debug"/> diff --git a/source/CoolUtil.hx b/source/CoolUtil.hx index dea229ee4..2e93961c1 100644 --- a/source/CoolUtil.hx +++ b/source/CoolUtil.hx @@ -43,6 +43,18 @@ class CoolUtil return dumbArray; } + /** + Lerps camera, but accountsfor framerate shit? + Right now it's simply for use to change the followLerp variable of a camera during update + TODO LATER MAYBE: + Actually make and modify the scroll and lerp shit in it's own function + instead of solely relying on changing the lerp on the fly + */ + public static function camLerpShit(lerp:Float):Float + { + return lerp * (FlxG.elapsed / (1 / 60)); + } + public static function fromAnimate(Source:FlxGraphicAsset, Description:String):FlxAtlasFrames { var graphic:FlxGraphic = FlxG.bitmap.add(Source); diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index ce1fa65ef..5baa01eb8 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -237,6 +237,8 @@ class MainMenuState extends MusicBeatState override function update(elapsed:Float) { + FlxG.camera.followLerp = CoolUtil.camLerpShit(0.06); + if (FlxG.sound.music.volume < 0.8) { FlxG.sound.music.volume += 0.5 * FlxG.elapsed; diff --git a/source/PlayState.hx b/source/PlayState.hx index 0987aa96e..fa59de246 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1453,7 +1453,7 @@ class PlayState extends MusicBeatState override public function update(elapsed:Float) { // makes the lerp non-dependant on the framerate - FlxG.camera.followLerp = 0.04 * (elapsed / (1 / 60)); + FlxG.camera.followLerp = CoolUtil.camLerpShit(0.04); #if !debug perfectMode = false; diff --git a/source/ui/ControlsMenu.hx b/source/ui/ControlsMenu.hx index cd1e8b9f8..6dcb25184 100644 --- a/source/ui/ControlsMenu.hx +++ b/source/ui/ControlsMenu.hx @@ -1,15 +1,14 @@ package ui; -import flixel.input.actions.FlxActionInput; -import flixel.input.gamepad.FlxGamepadInputID; -import flixel.FlxG; +import Controls; import flixel.FlxCamera; +import flixel.FlxG; import flixel.FlxObject; import flixel.FlxSprite; import flixel.group.FlxGroup; +import flixel.input.actions.FlxActionInput; +import flixel.input.gamepad.FlxGamepadInputID; import flixel.input.keyboard.FlxKey; - -import Controls; import ui.AtlasText; import ui.MenuList; import ui.TextMenuList; @@ -23,40 +22,40 @@ class ControlsMenu extends ui.OptionsState.Page * if the player sets Back to Z it also set ACCEPT to X. This prevents the player from setting the controls in * a way the prevents them from changing more controls or exiting the menu. */ - static var controlGroups:Array<Array<Control>> = - [ [ NOTE_UP, NOTE_DOWN, NOTE_LEFT, NOTE_RIGHT ] - , [ UI_UP, UI_DOWN, UI_LEFT, UI_RIGHT, ACCEPT, BACK ] - ]; - + static var controlGroups:Array<Array<Control>> = [ + [NOTE_UP, NOTE_DOWN, NOTE_LEFT, NOTE_RIGHT], + [UI_UP, UI_DOWN, UI_LEFT, UI_RIGHT, ACCEPT, BACK] + ]; + var itemGroups:Array<Array<InputItem>> = [for (i in 0...controlGroups.length) []]; - + var controlGrid:MenuTypedList<InputItem>; var deviceList:TextMenuList; var menuCamera:FlxCamera; var prompt:Prompt; var camFollow:FlxObject; var labels:FlxTypedGroup<AtlasText>; - + var currentDevice:Device = Keys; var deviceListSelected = false; - + public function new() { super(); - + menuCamera = new FlxCamera(); FlxG.cameras.add(menuCamera, false); menuCamera.bgColor = 0x0; camera = menuCamera; - + labels = new FlxTypedGroup<AtlasText>(); var headers = new FlxTypedGroup<AtlasText>(); controlGrid = new MenuTypedList(Columns(COLUMNS), Vertical); - + add(labels); add(headers); add(controlGrid); - + if (FlxG.gamepads.numActiveGamepads > 0) { var devicesBg = new FlxSprite(); @@ -65,18 +64,18 @@ class ControlsMenu extends ui.OptionsState.Page deviceList = new TextMenuList(Horizontal, None); add(deviceList); deviceListSelected = true; - + var item; - + item = deviceList.createItem("Keyboard", Bold, selectDevice.bind(Keys)); item.x = FlxG.width / 2 - item.width - 30; item.y = (devicesBg.height - item.height) / 2; - + item = deviceList.createItem("Gamepad", Bold, selectDevice.bind(Gamepad(FlxG.gamepads.firstActive.id))); item.x = FlxG.width / 2 + 30; item.y = (devicesBg.height - item.height) / 2; } - + // FlxG.debugger.drawDebug = true; var y = deviceList == null ? 30 : 120; var spacer = 70; @@ -98,18 +97,18 @@ class ControlsMenu extends ui.OptionsState.Page headers.add(new BoldText(0, y, "NOTES")).screenCenter(X); y += spacer; } - + if (currentHeader != null && name.indexOf(currentHeader) == 0) name = name.substr(currentHeader.length); - + var label = labels.add(new BoldText(150, y, name)); label.alpha = 0.6; for (i in 0...COLUMNS) createItem(label.x + 400 + i * 300, y, control, i); - + y += spacer; } - + camFollow = new FlxObject(FlxG.width / 2, 0, 70, 70); if (deviceList != null) { @@ -119,19 +118,19 @@ class ControlsMenu extends ui.OptionsState.Page } else camFollow.y = controlGrid.selectedItem.y; - + menuCamera.follow(camFollow, null, 0.06); var margin = 100; menuCamera.deadzone.set(0, margin, menuCamera.width, menuCamera.height - margin * 2); menuCamera.minScrollY = 0; - controlGrid.onChange.add(function (selected) + controlGrid.onChange.add(function(selected) { camFollow.y = selected.y; - - labels.forEach((label)->label.alpha = 0.6); + + labels.forEach((label) -> label.alpha = 0.6); labels.members[Std.int(controlGrid.selectedIndex / COLUMNS)].alpha = 1.0; }); - + prompt = new Prompt("\nPress any key to rebind\n\n\n\n Escape to cancel", None); prompt.create(); prompt.createBgFromMargin(100, 0xFFfafd6d); @@ -139,7 +138,7 @@ class ControlsMenu extends ui.OptionsState.Page prompt.exists = false; add(prompt); } - + function createItem(x = 0.0, y = 0.0, control:Control, index:Int) { var item = new InputItem(x, y, currentDevice, control, index, onSelect); @@ -148,17 +147,17 @@ class ControlsMenu extends ui.OptionsState.Page if (controlGroups[i].contains(control)) itemGroups[i].push(item); } - + return controlGrid.addItem(item.name, item); } - + function onSelect():Void { controlGrid.enabled = false; canExit = false; prompt.exists = true; } - + function goToDeviceList() { controlGrid.selectedItem.idle(); @@ -169,23 +168,22 @@ class ControlsMenu extends ui.OptionsState.Page camFollow.y = deviceList.selectedItem.y; deviceListSelected = true; } - + function selectDevice(device:Device) { currentDevice = device; - + for (item in controlGrid.members) item.updateDevice(currentDevice); - + var inputName = device == Keys ? "key" : "button"; var cancel = device == Keys ? "Escape" : "Back"; - //todo: alignment + // todo: alignment if (device == Keys) prompt.setText('\nPress any key to rebind\n\n\n\n $cancel to cancel'); else prompt.setText('\nPress any button\n to rebind\n\n\n $cancel to cancel'); - - + controlGrid.selectedItem.select(); labels.members[Std.int(controlGrid.selectedIndex / COLUMNS)].alpha = 1.0; controlGrid.enabled = true; @@ -193,48 +191,48 @@ class ControlsMenu extends ui.OptionsState.Page deviceListSelected = false; canExit = false; } - + override function update(elapsed:Float) { super.update(elapsed); - + var controls = PlayerSettings.player1.controls; if (controlGrid.enabled && deviceList != null && deviceListSelected == false && controls.BACK) goToDeviceList(); - + if (prompt.exists) { switch (currentDevice) { case Keys: - { - // check released otherwise bugs can happen when you change the BACK key - var key = FlxG.keys.firstJustReleased(); - if (key != NONE) { - if (key != ESCAPE) - onInputSelect(key); - closePrompt(); + // check released otherwise bugs can happen when you change the BACK key + var key = FlxG.keys.firstJustReleased(); + if (key != NONE) + { + if (key != ESCAPE) + onInputSelect(key); + closePrompt(); + } } - } case Gamepad(id): - { - var button = FlxG.gamepads.getByID(id).firstJustReleasedID(); - if (button != NONE) { - if (button != BACK) - onInputSelect(button); - closePrompt(); + var button = FlxG.gamepads.getByID(id).firstJustReleasedID(); + if (button != NONE) + { + if (button != BACK) + onInputSelect(button); + closePrompt(); + } } - } } } } - + function onInputSelect(input:Int) { var item = controlGrid.selectedItem; - + // check if that key is already set for this var column0 = Math.floor(controlGrid.selectedIndex / 2) * 2; for (i in 0...COLUMNS) @@ -242,7 +240,7 @@ class ControlsMenu extends ui.OptionsState.Page if (controlGrid.members[column0 + i].input == input) return; } - + // Check if items in the same group already have the new input for (group in itemGroups) { @@ -261,15 +259,15 @@ class ControlsMenu extends ui.OptionsState.Page } } } - + PlayerSettings.player1.controls.replaceBinding(item.control, currentDevice, input, item.input); // Don't use resetItem() since items share names/labels item.input = input; item.label.text = item.getLabel(input); - + PlayerSettings.player1.saveControls(); } - + function closePrompt() { prompt.exists = false; @@ -277,17 +275,17 @@ class ControlsMenu extends ui.OptionsState.Page if (deviceList == null) canExit = true; } - + override function destroy() { super.destroy(); - + itemGroups = null; - + if (FlxG.cameras.list.contains(menuCamera)) FlxG.cameras.remove(menuCamera); } - + override function set_enabled(value:Bool) { if (value == false) @@ -312,17 +310,17 @@ class InputItem extends TextMenuItem public var control:Control; public var input:Int = -1; public var index:Int = -1; - - public function new (x = 0.0, y = 0.0, device, control, index, ?callback) + + public function new(x = 0.0, y = 0.0, device, control, index, ?callback) { this.device = device; this.control = control; this.index = index; this.input = getInput(); - + super(x, y, getLabel(input), Default, callback); } - + public function updateDevice(device:Device) { if (this.device != device) @@ -332,7 +330,7 @@ class InputItem extends TextMenuItem label.text = getLabel(input); } } - + function getInput() { var list = PlayerSettings.player1.controls.getInputsFor(control, device); @@ -340,17 +338,17 @@ class InputItem extends TextMenuItem { if (list[index] != FlxKey.ESCAPE || list[index] != FlxGamepadInputID.BACK) return list[index]; - + if (list.length > ControlsMenu.COLUMNS) // Escape isn't mappable, show a third option, instead. return list[ControlsMenu.COLUMNS]; } - + return -1; } - + public function getLabel(input:Int) { return input == -1 ? "---" : InputFormatter.format(input, device); } -} \ No newline at end of file +} diff --git a/source/ui/PreferencesMenu.hx b/source/ui/PreferencesMenu.hx index 5e4cb8b85..beba8cab2 100644 --- a/source/ui/PreferencesMenu.hx +++ b/source/ui/PreferencesMenu.hx @@ -1,6 +1,8 @@ package ui; +import flixel.FlxCamera; import flixel.FlxG; +import flixel.FlxObject; import flixel.FlxSprite; import flixel.group.FlxGroup; import flixel.util.FlxColor; @@ -14,10 +16,18 @@ class PreferencesMenu extends ui.OptionsState.Page var items:TextMenuList; var checkboxes:Array<CheckboxThingie> = []; + var menuCamera:FlxCamera; + var camFollow:FlxObject; public function new() { super(); + + menuCamera = new FlxCamera(); + FlxG.cameras.add(menuCamera, false); + menuCamera.bgColor = 0x0; + camera = menuCamera; + add(items = new TextMenuList()); createPrefItem('naughtyness', 'censor-naughty', false); @@ -25,6 +35,20 @@ class PreferencesMenu extends ui.OptionsState.Page createPrefItem('flashing menu', 'flashing-menu', true); createPrefItem('Camera Zooming on Beat', 'camera-zoom', true); createPrefItem('FPS Counter', 'fps-counter', true); + + camFollow = new FlxObject(FlxG.width / 2, 0, 140, 70); + if (items != null) + camFollow.y = items.selectedItem.y; + + menuCamera.follow(camFollow, null, 0.06); + var margin = 160; + menuCamera.deadzone.set(0, margin, menuCamera.width, 40); + menuCamera.minScrollY = 0; + + items.onChange.add(function(selected) + { + camFollow.y = selected.y; + }); } public static function getPref(pref:String):Dynamic @@ -103,6 +127,8 @@ class PreferencesMenu extends ui.OptionsState.Page { super.update(elapsed); + menuCamera.followLerp = CoolUtil.camLerpShit(0.05); + items.forEach(function(daItem:TextMenuItem) { if (items.selectedItem == daItem)