package su.lovesense.modules;
import com.darkmagician6.eventapi.EventManager;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import lombok.Getter;
import lombok.Setter;
import su.lovesense.managers.impl.notificationmanager.NotificationManager;
import su.lovesense.modules.api.constructors.Setting;
import su.lovesense.modules.impl.miscellaneous.DiscordRPC;
import su.lovesense.modules.impl.miscellaneous.ToggleSounds;
import su.lovesense.ui.Interface.elements.impl.NotificationRender;
import su.lovesense.utils.Wrapper;
import su.lovesense.utils.animation.AnimationUtil;
import su.lovesense.utils.animation.Easings;
import su.lovesense.utils.misc.SoundUtil;
import java.util.List;
@Getter
@Setter
public abstract class Module implements Wrapper {
String name;
String description;
Category category;
int bind;
boolean enabled;
boolean premium;
boolean beta;
private ToggleMode toggleMode = ToggleMode.TOGGLE;
private boolean keybindvisible = true;
List<Setting<?>> settings = new ObjectArrayList<>();
private final AnimationUtil animation = new AnimationUtil(0.0f, 8f, Easings.LINEAR);
@Getter
@Setter
private static boolean suppressToggleEffects = false;
public enum ToggleMode {
TOGGLE, HOLD
}
public Module(String name, Category category) {
this(name, "NULL", false, false, category);
}
public Module(String name, String description, Category category) {
this(name, description, false, false, category);
}
public Module(String name, String description, boolean premium, Category category) {
this(name, description, premium, false, category);
}
public Module(String name, String description, boolean premium, boolean beta, Category category) {
this.name = name;
this.description = description;
this.premium = premium;
this.beta = beta;
this.category = category;
this.bind = -100;
}
public void addSettings(Setting<?>... settings) {
this.settings.addAll(List.of(settings));
}
public void onEnable() {
animation.update(1f);
if (!suppressToggleEffects && keybindvisible) {
SoundUtil.playSound(ToggleSounds.getSoundFile(true));
if (NotificationRender.module.get())
NotificationManager.addNotification("a", "" + name + "" + " Включен", -1);
}
EventManager.register(this);
}
public void onDisable() {
animation.update(0f);
if (!suppressToggleEffects && keybindvisible) {
SoundUtil.playSound(ToggleSounds.getSoundFile(false));
if (NotificationRender.module.get())
NotificationManager.addNotification("a", "" + name + "" + " Выключен", -1);
}
EventManager.unregister(this);
}
public final void toggle() {
settoggled(!enabled);
}
public final void settoggled(boolean toggle) {
if (enabled == toggle) {
return;
}
if (toggle && beta) {
return;
}
enabled = toggle;
if (enabled) {
onEnable();
} else {
onDisable();
}
DiscordRPC.onAnyModuleToggled(this, enabled);
}
}