Skip to content

Commit

Permalink
new mod tool yayaayyayayasydshjkgfakgsjhdf
Browse files Browse the repository at this point in the history
  • Loading branch information
Vortex2Oblivion committed Mar 18, 2024
1 parent f63e362 commit 5492a19
Show file tree
Hide file tree
Showing 17 changed files with 239 additions and 28 deletions.
File renamed without changes
8 changes: 0 additions & 8 deletions mods/Template Mod/_polymod_meta.json

This file was deleted.

Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
10 changes: 4 additions & 6 deletions source/modding/ModchartUtilities.hx
Original file line number Diff line number Diff line change
Expand Up @@ -281,8 +281,8 @@ class ModchartUtilities {
setVar("strumLine1Visible", true);
setVar("strumLine2Visible", true);

setVar("screenWidth", lime.app.Application.current.window.display.currentMode.width);
setVar("screenHeight", lime.app.Application.current.window.display.currentMode.height);
setVar("screenWidth", Application.current.window.display.currentMode.width);
setVar("screenHeight", Application.current.window.display.currentMode.height);
setVar("windowWidth", FlxG.width);
setVar("windowHeight", FlxG.height);

Expand Down Expand Up @@ -356,12 +356,10 @@ class ModchartUtilities {
setVar("SONG", PlayState.SONG);

setVar("leatherEngine", {
version: lime.app.Application.current.meta.get('version'),
version: Application.current.meta.get('version'),
});

setVar("version", {
version: lime.app.Application.current.meta.get('version'),
});
setVar("version", Application.current.meta.get('version'));

// callbacks

Expand Down
22 changes: 11 additions & 11 deletions source/states/MusicBeatState.hx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package states;

import flixel.math.FlxMath;
import flixel.input.FlxInput.FlxInputState;
import flixel.FlxSprite;
import flixel.FlxBasic;
Expand Down Expand Up @@ -29,16 +30,6 @@ class MusicBeatState extends #if MODCHARTING_TOOLS modcharting.ModchartMusicBeat

override public function new() {
if (!Options.getData('memoryLeaks')) {
lime.utils.Assets.cache.clear();
openfl.utils.Assets.cache.clear();
#if polymod
polymod.Polymod.clearCache();
#end

#if cpp
cpp.vm.Gc.enable(true);
#end

clear_memory();
}

Expand All @@ -50,6 +41,12 @@ class MusicBeatState extends #if MODCHARTING_TOOLS modcharting.ModchartMusicBeat
*/
public static function clear_memory():Void {
// Remove cached assets (prevents memory leaks that i can prevent)
lime.utils.Assets.cache.clear();
openfl.utils.Assets.cache.clear();
#if polymod
polymod.Polymod.clearCache();
#end


// Remove lingering sounds from the sound list
FlxG.sound.list.forEachAlive(function(sound:flixel.sound.FlxSound):Void {
Expand Down Expand Up @@ -86,6 +83,9 @@ class MusicBeatState extends #if MODCHARTING_TOOLS modcharting.ModchartMusicBeat
lime_cache.audio.remove(key);
};

#if cpp
cpp.vm.Gc.enable(true);
#end
// Run built-in garbage collector
#if sys
openfl.system.System.gc();
Expand All @@ -104,7 +104,7 @@ class MusicBeatState extends #if MODCHARTING_TOOLS modcharting.ModchartMusicBeat
super.update(elapsed);

if (FlxG.stage != null)
FlxG.stage.frameRate = flixel.math.FlxMath.bound(Options.getData("maxFPS"), 0.1, 1000);
FlxG.stage.frameRate = FlxMath.bound(Options.getData("maxFPS"), 0.1, 1000);

if (!Options.getData("antialiasing")) {
forEachAlive(function(basic:FlxBasic) {
Expand Down
2 changes: 1 addition & 1 deletion source/substates/PauseSubState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class PauseSubState extends MusicBeatSubstate {
FlxG.sound.list.add(pauseMusic);

var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
bg.alpha = 0.00001;
bg.alpha = 0;
bg.scrollFactor.set();
add(bg);

Expand Down
225 changes: 223 additions & 2 deletions source/toolbox/util/NewModState.hx
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@

package toolbox.util;

#if sys
import sys.io.File;
import openfl.display.BitmapData;
import flixel.addons.ui.FlxUI;
import flixel.addons.ui.FlxUITabMenu;
import flixel.text.FlxText;
import openfl.utils.Assets;
import flixel.FlxSprite;
import flixel.addons.ui.FlxUICheckBox;
import sys.FileSystem;
import haxe.Json;
import states.ModsMenu;
import lime.ui.FileDialogType;
import flixel.ui.FlxButton;
import flixel.FlxG;
#if discord_rpc
import utilities.Discord.DiscordClient;
#end
import states.MusicBeatState;
import flixel.addons.ui.FlxUIInputText;
import lime.ui.FileDialog;
import lime.app.Application;
import flixel.tweens.FlxTween;
import flixel.tweens.FlxEase;
import flixel.util.FlxColor;
import flixel.FlxCamera;


class NewModState extends MusicBeatState{
Expand All @@ -22,6 +38,47 @@ class NewModState extends MusicBeatState{

var UI_box:FlxUITabMenu;

var modIconText:FlxText;
var modIcon:FlxSprite = new FlxSprite().loadGraphic(Paths.image('template mod'));
var browseButton:FlxButton;
var modIconPath:String = Paths.image('template mod');

var descriptionText:FlxText;
var description:FlxUIInputText;

var authorText:FlxText;
var author:FlxUIInputText;

var modVersionText:FlxText;
var modVersion:FlxUIInputText;

var checkAutoEnable:FlxUICheckBox;
var checkHideModSwitch:FlxUICheckBox;

var rpc_idText:FlxText;
var rpc_id:FlxUIInputText;

var createButton:FlxButton;

var camHUD:FlxCamera;
var UI_boxPopup:FlxUITabMenu;
var popupBg:FlxSprite;
var close:FlxButton;

final dirs:Array<String> = [
"_append",
"data",
"fonts",
"images",
"music",
"shaders",
"shared",
"songs",
"sounds",
"stages",
"videos"
];

override function create(){
super.create();
#if discord_rpc
Expand All @@ -34,6 +91,11 @@ class NewModState extends MusicBeatState{
add(bg);
}

camHUD = new FlxCamera();
FlxG.cameras.add(camHUD, false); // false so it's not a default camera
camHUD.bgColor.alpha = 0;
camHUD.alpha = 0;

UI_box = new FlxUITabMenu(null, [{name: "New Mod", label: 'New Mod'},], true);

UI_box.resize(640, 480);
Expand All @@ -47,7 +109,6 @@ class NewModState extends MusicBeatState{
UI_box.scrollFactor.set();

modName = new FlxUIInputText(400, 250);
modName.size = 16;
add(modName);

modNameText = new FlxText();
Expand All @@ -58,11 +119,171 @@ class NewModState extends MusicBeatState{
modNameText.text = "Mod Name";
add(modNameText);


modIconText = new FlxText();
modIconText.x = modName.x;
modIconText.y = modNameText.y + 70;
modIconText.alignment = FlxTextAlign.CENTER;
modIconText.size = 16;
modIconText.text = "Mod Icon";
add(modIconText);

browseButton = new FlxButton(modIconText.x + 100, modIconText.y, "Browse", function() {
var open:FileDialog = new FileDialog();
open.onSelect.add(function(path) {
modIcon.loadGraphic(BitmapData.fromFile(path));
modIcon.setGraphicSize(160, 160);
modIcon.updateHitbox();
modIconPath = path;
});
open.browse(FileDialogType.OPEN, null, null, "Choose an icon.");
});
add(browseButton);

modIcon.x = modNameText.x;
modIcon.y = modNameText.y + 100;
add(modIcon);

description = new FlxUIInputText(modName.x + 300, modName.y);
add(description);

descriptionText = new FlxText();
descriptionText.x = description.x;
descriptionText.y = description.y - 30;
descriptionText.alignment = FlxTextAlign.CENTER;
descriptionText.size = 16;
descriptionText.text = "Description";
add(descriptionText);

author = new FlxUIInputText(description.x , description.y + 45);
add(author);

authorText = new FlxText();
authorText.x = author.x;
authorText.y = author.y - 30;
authorText.alignment = FlxTextAlign.CENTER;
authorText.size = 16;
authorText.text = "Author";
add(authorText);


modVersion = new FlxUIInputText(authorText.x , authorText.y + 120);
modVersion.text = "1.0.0";
add(modVersion);

modVersionText = new FlxText();
modVersionText.x = modVersion.x;
modVersionText.y = modVersion.y - 45;
modVersionText.alignment = FlxTextAlign.CENTER;
modVersionText.size = 16;
modVersionText.text = "Mod Version\n(Must follow *.*.*)";
add(modVersionText);

rpc_id = new FlxUIInputText(description.x, modName.y + 300);
add(rpc_id);

rpc_idText = new FlxText();
rpc_idText.x = rpc_id.x;
rpc_idText.y = rpc_id.y - 30;
rpc_idText.alignment = FlxTextAlign.CENTER;
rpc_idText.size = 16;
rpc_idText.text = "Discord RPC ID (Optional)";
add(rpc_idText);

checkAutoEnable = new FlxUICheckBox(rpc_idText.x, modVersion.y + 60, null, null, "Auto Enable", 100);
add(checkAutoEnable);

checkHideModSwitch = new FlxUICheckBox(checkAutoEnable.x, checkAutoEnable.y + checkAutoEnable.height + 2, null, null, "Hide Mod Switch Menu", 100);
add(checkHideModSwitch);

createButton = new FlxButton(modIconText.x, modIconText.y + 250, "Create Mod", function() {
if(modVersion.text.length == 0 || author.text.length == 0 || description.text.length == 0 || modName.text.length == 0)
{
coolError("Please fill out all required fields!","Error!");
return;
}
if(FileSystem.exists('./mods/${modName.text}')){
coolError("Mod already exists!","Error!");
return;
}
FileSystem.createDirectory('./mods/${modName.text}');
File.saveBytes('./mods/${modName.text}/_polymod_icon.png', File.getBytes(modIconPath));
for (dir in dirs){
FileSystem.createDirectory('./mods/${modName.text}/${dir}');
}
var data:String = Json.stringify({
title: modName.text,
rpcId: rpc_id.text.length > 0 ? rpc_id.text : "864980501004812369",
rpcKey: "logo",
rpcText: rpc_id.text.length > 0 ? modName.text : "Leather Engine",
description: description.text,
author: author.text,
api_version: Application.current.meta.get('version'),
mod_version: modVersion.text,
metadata: {
auto_enable: Std.string(checkAutoEnable.checked),
canBeSwitchedTo: Std.string(checkHideModSwitch.checked)
}
}, null, "\t");
File.saveContent('./mods/${modName.text}/_polymod_meta.json', data);
trace("mod created");
FlxTween.tween(camHUD, {alpha: 1}, 0.4, {ease: FlxEase.quartInOut});
});
add(createButton);

popupBg = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
popupBg.alpha = 0.5;
popupBg.cameras = [camHUD];
add(popupBg);

UI_boxPopup = new FlxUITabMenu(null, [{name: "Mod Created", label: 'Mod Created'},], true);

UI_boxPopup.resize(640 * 0.667, 480 * 0.667);
UI_boxPopup.screenCenter();
UI_boxPopup.cameras = [camHUD];
add(UI_boxPopup);

close = new FlxButton(0,0,"Close",function(){
FlxG.switchState(() -> new ModsMenu());
});
close.scale.set(2,2);
close.label.scale.set(2,2);
close.updateHitbox();
close.label.updateHitbox();
close.screenCenter();
close.cameras = [camHUD];
add(close);

}
override function update(elapsed:Float){
super.update(elapsed);
if(FlxG.keys.anyJustPressed([ESCAPE])){
FlxG.switchState(() -> new ToolboxPlaceholder());
}
}
}
function coolError(message:Null<String> = null, title:Null<String> = null):Void {
trace(title + " /// " + message, ERROR);

var text:FlxText = new FlxText(0, 0, 1280, title + "\n\n" + message, 32);
text.font = Paths.font("vcr.ttf");
text.color = 0xFF6183;
text.alignment = CENTER;
text.borderSize = 1.5;
text.borderStyle = OUTLINE;
text.borderColor = FlxColor.BLACK;
text.scrollFactor.set();

FlxTween.tween(text, {alpha: 0, y: 64}, 4, {
onComplete: function(_) {
if (text != null && text.exists) {
FlxG.state.remove(text);
text.destroy();
}
},
startDelay: 1
});

add(text);
}
}
#end

0 comments on commit 5492a19

Please sign in to comment.