Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions assets/bundles/bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ setting.cui-useCycleFilter.name =Hide Cursor of ignored players
setting.cui-useCycleFilter.description =Same as`Filter Teams (Cycle player)`
setting.cui-cyclePlayersIgnoreNoCore.name =Cycle Players ignores players w/o cores
setting.cui-cyclePlayersIgnoreNoCore.description =Useful for cases where a team losses their core
setting.cui-trackOnLostFocus.name =Track in background
setting.cui-trackOnLostFocus.description =Whether tracking continues if you click off the window
setting.cui-trackwhileChatting.name =Track while Typing
setting.cui-trackwhileChatting.description =Whether tracking continues if you're typing in a text box
setting.cui-trackwhileMap.name =Track while Map is open
setting.cui-trackwhileDialog.name =Track with any Dialog is open

setting.cui-counter-category.name =Counters options
setting.cui-ShowPlayerList.name =Mini Player Table
Expand Down Expand Up @@ -76,7 +82,7 @@ setting.cui-alertStyle.description =Default: Circle
setting.cui-AlertsUseBottom.name =Bottom Toasts alerts
setting.cui-AlertsHideWithUi.name =Custom Toasts
setting.cui-AlertsHideWithUi.description =Whether to use custom toast or built in ones \nreduces conflict with world logic toasts
setting.cui-SendChatCoreLost.name =Send a CHAT message on a Core's Death
setting.cui-SendChatCoreLost.name =Send CHAT message on a Core's Death
setting.cui-ShowAlertsCircles.name =Draw a Circle on a Core's Death
setting.cui-alertCircleSpeed.name =Alert Grow speed:
setting.cui-alertCircleSpeed.description =Do note that this is constant and doesn't scale with map size\nWon't matter much unless Reverse Growth is enabled\nDefault: 6.0x
Expand Down Expand Up @@ -127,6 +133,7 @@ setting.cui-blockinfoSide.name =Block Info Side:
setting.cui-blockinfoSide.description =Default: Left\nApplies next map change / Ui rebuilt
setting.cui-blockinfo-x.name =Block Info X Offset:
setting.cui-blockinfo-y.name =Block Info Y Offset:
setting.cui-blockinfo-colour.name =Block info Team colour background
setting.cui-domination-toggle.name =[accent]Show Block Counter
setting.cui-domination-vertical.name =Vertical Block Counter
setting.cui-domination-TeamIcons.name =Show Team Icons
Expand Down Expand Up @@ -160,6 +167,7 @@ setting.cui-animateSettings.name =Animate settings category
setting.cui-TeamItemsUpdateRate.name =Team Items Update rate
setting.cui-TeamItemsUpdateRate.description =Default: Normal, \nFast to use every tick, \nNormal to update every (update speed * 2)~\nSlow to update every (update speed * 5)~
setting.cui-updateAvailable = Cui {0} is out! kindly update the mod thx
setting.cui-killswitchEnables.name =Kill switch also turns mod on

setting.cui-teams-category.name =Team options
setting.cui-ShowTeamItems.name =[accent]Display Team items
Expand Down Expand Up @@ -315,4 +323,4 @@ cui-cmd-limits3 =ALL units
cui-filter0 =Domination
cui-filter1 =Units
cui-filter2 =Core Items
cui-filter3 =Cycle players
cui-filter3 =Cycle players
4 changes: 2 additions & 2 deletions mod.hjson
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ name: "caster-ui-java"
displayName: "Caster User interface"
description: "Aming to make the client a bit better for casting! with ease of use, simplicity and elegance in mind \n \n Java rewrite of 'JiroCab/Caster-Ui' which was based off 'Ferlern/extended-UI' \nconflicts with 'Ferlern/extended-UI' \n\nPLEASE DON'T THIS FOR AN ADVANTAGE IN PVP THANKS"
author: "RushieWashie, WMF Industries"
subtitle: "v4.9 Helping you cast games~"
version: 4.9
subtitle: "v5.1 (v7) Helping you cast games~"
version: 5.1

minGameVersion: 140.4
hidden: true
Expand Down
37 changes: 16 additions & 21 deletions src/casterui/CuiVars.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,27 @@
package casterui;

import arc.Core;
import arc.Graphics;
import arc.graphics.Pixmap;
import arc.graphics.Pixmaps;
import arc.*;
import arc.graphics.*;
import arc.math.geom.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import casterui.io.CuiInputs;
import casterui.io.ui.CuiFragment;
import casterui.io.ui.CuiWorldRenderer;
import casterui.io.*;
import casterui.io.ui.*;
import casterui.io.ui.dialog.*;
import casterui.util.*;
import mindustry.Vars;
import mindustry.*;
import mindustry.game.*;
import mindustry.gen.Player;
import mindustry.gen.Unit;
import mindustry.mod.Mods;
import mindustry.ui.Fonts;
import mindustry.world.Tile;
import mindustry.world.blocks.storage.CoreBlock;
import mindustry.gen.*;
import mindustry.mod.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.blocks.storage.*;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
import java.text.*;
import java.util.*;

import static arc.Core.settings;
import static casterui.io.CuiBinding.toggle_cui_kill_switch;

public class CuiVars {
public static CuiWorldRenderer renderer = new CuiWorldRenderer();
Expand All @@ -46,7 +41,7 @@ public class CuiVars {
public static Vec2[] savedCameras = new Vec2[11];

public static DecimalFormat decFor = new DecimalFormat("#.##"), decForMini = new DecimalFormat("#.#");
public static boolean[] dominationSettings = new boolean[14];
public static boolean[] dominationSettings = new boolean[15];
public static boolean
showBlockInfo = false, showCountersUnits = false, showCountersPlayers = false, showCountersButton = false,
countersSeparateTeams = false, countersCoreUnits = false, countersCoreFlagged = false, countersTotals = false,
Expand Down Expand Up @@ -85,6 +80,7 @@ public static void postInt(){

public static void update(){
globalShow = !Core.settings.getBool("cui-killswitch");
if(inputs.cuiKeyTap(toggle_cui_kill_switch) && (globalShow || settings.getBool("cui-killswitchEnables"))) settings.put("cui-killswitch", !settings.getBool("cui-killswitch")); //haha this will be one way but lulz
if (!globalShow) return;
inputs.update();
fragment.UpdateTables();
Expand Down Expand Up @@ -147,6 +143,7 @@ public static void updateSettings(boolean full){
dominationSettings[11] = settings.getBool("cui-domination-core");
dominationSettings[12] = settings.getBool("cui-domination-percent");
dominationSettings[13] = settings.getBool("cui-domination-raw");
dominationSettings[14] = settings.getBool("cui-domination-graph");

if(!full) return;

Expand Down Expand Up @@ -178,6 +175,4 @@ public static void updateHiddenTeams(){
}
}



}
62 changes: 34 additions & 28 deletions src/casterui/io/CuiInputs.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,13 @@
package casterui.io;

import arc.Core;
import arc.KeyBinds;
import arc.KeyBinds.*;
import arc.func.*;
import arc.input.KeyCode;
import arc.input.*;
import arc.math.geom.*;
import arc.scene.*;
import arc.scene.event.*;
import arc.struct.Seq;
import arc.util.*;
import casterui.CuiVars;
import mindustry.Vars;
import mindustry.game.Teams;
import arc.struct.*;
import casterui.*;
import mindustry.game.Teams.*;
import mindustry.gen.*;
import mindustry.input.Binding;
import mindustry.input.DesktopInput;
import mindustry.world.Build;
import mindustry.world.blocks.storage.CoreBlock;
import mindustry.input.*;
import mindustry.world.blocks.storage.CoreBlock.*;

import static arc.Core.*;
Expand All @@ -34,11 +23,12 @@ public class CuiInputs {
public Vec2 out = new Vec2() ;

public void update(){
if (settings.getBool("cui-respectCommandMode") && control.input.commandMode) return;
if (settings.getBool("cui-respectTyping") && (ui.chatfrag.shown() || scene.getKeyboardFocus() != null) || ui.consolefrag.shown())return;
if (state.isMenu()) return;
updateTracking();
if (settings.getBool("cui-respectLockInputs") && control.input.locked())return;
if (settings.getBool("cui-respectCommandMode") && control.input.commandMode) return;
if(settings.getBool("cui-respectDialog") && scene.hasDialog()) return;
if (state.isMenu()) return;
if (settings.getBool("cui-respectTyping") && (ui.chatfrag.shown() || scene.getKeyboardFocus() != null) || ui.consolefrag.shown())return;

if(cuiKeyTap(toggle_cui_menu) && !settings.getBool("cui-hideWithMenus")) CuiVars.globalHidden = !CuiVars.globalHidden;
else if(settings.getBool("cui-hideWithMenus")) CuiVars.globalHidden = ui.hudfrag.shown;
Expand Down Expand Up @@ -96,16 +86,20 @@ public void update(){
if(cuiKeyTap(map_player_9) && CuiVars.mappedPlayers.get(9) != null) CuiVars.clickedPlayer = CuiVars.mappedPlayers.get(9);

if (scene.hasField()) return;
tracking = false;

float cameraFloat = 0.085F; //TODO:ALLOW THIS TO BE CHANGED
if (!settings.getBool("smoothcamera")){ cameraFloat = 1;}

if(cuiKeyTap(spectate_next_player)) cyclePlayers(true);
if(cuiKeyTap(spectate_previous_player)) cyclePlayers(false);
if(cuiKeyTap(spectate_next_core)) cycleCore(true);
if(cuiKeyTap(spectate_previous_core)) cycleCore(false);
}

public void updateTracking(){
if(!settings.getBool("cui-trackwhileChatting") &&((ui.chatfrag.shown() || scene.getKeyboardFocus() != null) || ui.consolefrag.shown())) return;
if(!settings.getBool("cui-trackwhileMap") && ui.minimapfrag.shown()) return;
if(!settings.getBool("cui-trackwhileDialog") && (!ui.minimapfrag.shown() && scene.hasDialog())) return;
tracking = false;

float cameraFloat = 0.085F; //TODO:ALLOW THIS TO BE CHANGED
if (!settings.getBool("smoothcamera")){ cameraFloat = 1;}
if (CuiVars.lastCoreDestroyEvent != null && cuiKeyDown(last_destroyed_core) && !tracking){
if(control.input instanceof DesktopInput input) input.panning = true;
stopTracking();
Expand Down Expand Up @@ -148,7 +142,7 @@ public void update(){

if (CuiVars.clickedPlayer != null && CuiVars.clickedPlayer.unit() != null && state.isPlaying() && !tracking){
startTracking();
trackingType = 4;
trackingType = 3;

//workaround for when in multiplayer, sometimes respawning puts you in 0,0 during the animation before moving your unit
if (CuiVars.clickedPlayer != null && (CuiVars.clickedPlayer.unit() == null || CuiVars.clickedPlayer.unit().x == 0 && CuiVars.clickedPlayer.unit().y == 0) && CuiVars.clickedPlayer.team().data().hasCore()) trackingType = 3;
Expand All @@ -158,6 +152,7 @@ public void update(){
if (keepMouseTracking && !settings.getBool("cui-playerHoldTrackMouse")) trackingType = 2;
if (!keepMouseTracking && !settings.getBool("cui-playerHoldTrackMouse") && CuiVars.clickedPlayer.unit() != null) trackingType = 1;
if (!keepMouseTracking && !settings.getBool("cui-playerHoldTrackMouse") && CuiVars.clickedPlayer.unit() == null) trackingType = 3;
if(trackingType == 3 && (CuiVars.clickedPlayer == null ||CuiVars.clickedPlayer.bestCore() == null)) trackingType = 4;

/* so many if statements, enjoy >;3c */
switch (trackingType) {
Expand All @@ -180,9 +175,8 @@ public void update(){
}

}


}

void handSavedCams(int num, boolean save){
if(save) CuiVars.savedCameras[num] = new Vec2(player.mouseX(), player.mouseY());
else if(CuiVars.savedCameras[num] != null && !CuiVars.savedCameras[num].isZero()) out.set(CuiVars.savedCameras[num]);
Expand All @@ -191,8 +185,11 @@ void handSavedCams(int num, boolean save){

void cyclePlayers(boolean increment){
ply.clear();
boolean core = settings.getBool("cui-cyclePlayersIgnoreNoCore.name"), nu = settings.getBool("cui-hideNoUnitPlayers");
for (Player p : Groups.player) {
if (settings.getBool("cui-hideNoUnitPlayers") && (p.unit() == null && !p.team().data().hasCore())) continue;
if(CuiVars.hiddenCycleTeam[p.team().id]) continue;
if(!core && p.team().cores().size <= 0) continue;
if (nu && (p.unit() == null && !p.team().data().hasCore())) continue;
if (p != player) ply.add(p);
}
ply.remove(player);
Expand Down Expand Up @@ -242,7 +239,16 @@ public void stopTracking(){
}

public void startTracking(){
if((Math.abs(input.axis(Binding.move_x)) > 0 || Math.abs(input.axis(Binding.move_y)) > 0 || input.keyTap(Binding.mouse_move) || input.keyTap(Binding.pan)) && (!scene.hasField())){
boolean
focus = settings.getBool("cui-trackOnLostFocus") ,
feild = !settings.getBool("cui-trackwhileChatting") && scene.hasField(),
mmPan = ui.minimapfrag.shown() && input.keyTap(KeyCode.mouseRight),
//input.justTouched() crashes mobile!
move = Math.abs(input.axis(Binding.move_x)) > 0 || Math.abs(input.axis(Binding.move_y)) > 0,
cam = input.keyTap(Binding.mouse_move) || input.keyTap(Binding.pan);
;

if(move || cam || mmPan || feild){
stopTracking();
return;
}
Expand Down
108 changes: 108 additions & 0 deletions src/casterui/io/ui/BarHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package casterui.io.ui;

import arc.*;
import arc.func.*;
import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.math.geom.*;
import arc.scene.style.*;
import arc.util.pooling.*;
import mindustry.gen.*;
import mindustry.ui.*;

public class BarHelper extends Bar{
private static Rect scissor = new Rect();

private Floatp fraction;
private CharSequence name = "";
private float value, lastValue, blink, outlineRadius;
private Color blinkColor = new Color(), outlineColor = new Color();

public BarHelper(String name, Color color, Floatp fraction){
this.fraction = fraction;
this.name = Core.bundle.get(name, name);
this.blinkColor.set(color);
lastValue = value = fraction.get();
setColor(color);
}

public BarHelper(Prov<CharSequence> name, Prov<Color> color, Floatp fraction){
this.fraction = fraction;
lastValue = value = Mathf.clamp(fraction.get());
update(() -> {
this.name = name.get();
this.blinkColor.set(color.get());
setColor(color.get());
});
}

public BarHelper(){

}

@Override
public void draw(){
if(fraction == null) return;

float computed = Mathf.clamp(fraction.get());


if(lastValue > computed){
blink = 1f;
lastValue = computed;
}

if(Float.isNaN(lastValue)) lastValue = 0;
if(Float.isInfinite(lastValue)) lastValue = 1f;
if(Float.isNaN(value)) value = 0;
if(Float.isInfinite(value)) value = 1f;
if(Float.isNaN(computed)) computed = 0;
if(Float.isInfinite(computed)) computed = 1f;

blink = Mathf.lerpDelta(blink, 0f, 0.2f);
value = Mathf.lerpDelta(value, computed, 0.15f);

Drawable bar = Tex.bar;

if(outlineRadius > 0){
Draw.color(outlineColor);
bar.draw(x - outlineRadius, y - outlineRadius, width + outlineRadius*2, height + outlineRadius*2);
}

Draw.colorl(0.1f);
Draw.alpha(parentAlpha);
bar.draw(x, y, width, height);
Draw.color(color, blinkColor, blink);
Draw.alpha(parentAlpha);

Drawable top = Tex.barTop;
float topWidth = width * value;

if(topWidth > Core.atlas.find("bar-top").width){
top.draw(x, y, topWidth, height);
}else{
if(ScissorStack.push(scissor.set(x, y, topWidth, height))){
top.draw(x, y, Core.atlas.find("bar-top").width, height);
ScissorStack.pop();
}
}

Draw.color();

Font font = Fonts.def;
GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
lay.setText(font, name);

float prevSX = font.getData().scaleX, prevSY = font.getData().scaleX;
font.getData().setScale(0.8f);
font.setColor(1f, 1f, 1f, 1f);
font.getCache().clear();

font.getCache().addText(name, x + width / 2.2f - lay.width / 2.2f, y + height / 2.2f + lay.height / 2.2f + 1);
font.getCache().draw(parentAlpha);
font.getData().setScale(prevSX, prevSY);

Pools.free(lay);
}
}
Loading