diff --git a/Project.xml b/Project.xml
index be1f2cbed..9e90b237e 100644
--- a/Project.xml
+++ b/Project.xml
@@ -122,7 +122,7 @@
-
+
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> =
- [ [ NOTE_UP, NOTE_DOWN, NOTE_LEFT, NOTE_RIGHT ]
- , [ UI_UP, UI_DOWN, UI_LEFT, UI_RIGHT, ACCEPT, BACK ]
- ];
-
+ static var controlGroups:Array> = [
+ [NOTE_UP, NOTE_DOWN, NOTE_LEFT, NOTE_RIGHT],
+ [UI_UP, UI_DOWN, UI_LEFT, UI_RIGHT, ACCEPT, BACK]
+ ];
+
var itemGroups:Array> = [for (i in 0...controlGroups.length) []];
-
+
var controlGrid:MenuTypedList;
var deviceList:TextMenuList;
var menuCamera:FlxCamera;
var prompt:Prompt;
var camFollow:FlxObject;
var labels:FlxTypedGroup;
-
+
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();
var headers = new FlxTypedGroup();
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 = [];
+ 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)