Unit control improvements / Larger max map size
This commit is contained in:
@@ -2822,7 +2822,7 @@ public class UnitTypes{
|
|||||||
velocityRnd = 0.1f;
|
velocityRnd = 0.1f;
|
||||||
heatColor = Color.red;
|
heatColor = Color.red;
|
||||||
|
|
||||||
for(int i = 0; i < 6; i++){
|
for(int i = 0; i < 5; i++){
|
||||||
int fi = i;
|
int fi = i;
|
||||||
parts.add(new RegionPart("-blade"){{
|
parts.add(new RegionPart("-blade"){{
|
||||||
under = true;
|
under = true;
|
||||||
|
|||||||
@@ -1,23 +1,34 @@
|
|||||||
package mindustry.ctype;
|
package mindustry.ctype;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
|
import mindustry.entities.bullet.*;
|
||||||
|
import mindustry.type.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
/** Do not rearrange, ever! */
|
/** Do not rearrange, ever! */
|
||||||
public enum ContentType{
|
public enum ContentType{
|
||||||
item,
|
item(Item.class),
|
||||||
block,
|
block(Block.class),
|
||||||
mech_UNUSED,
|
mech_UNUSED(null),
|
||||||
bullet,
|
bullet(BulletType.class),
|
||||||
liquid,
|
liquid(Liquid.class),
|
||||||
status,
|
status(StatusEffect.class),
|
||||||
unit,
|
unit(UnitType.class),
|
||||||
weather,
|
weather(Weather.class),
|
||||||
effect_UNUSED,
|
effect_UNUSED(null),
|
||||||
sector,
|
sector(SectorPreset.class),
|
||||||
loadout_UNUSED,
|
loadout_UNUSED(null),
|
||||||
typeid_UNUSED,
|
typeid_UNUSED(null),
|
||||||
error,
|
error(null),
|
||||||
planet,
|
planet(Planet.class),
|
||||||
ammo_UNUSED,
|
ammo_UNUSED(null),
|
||||||
team;
|
team(TeamEntry.class);
|
||||||
|
|
||||||
public static final ContentType[] all = values();
|
public static final ContentType[] all = values();
|
||||||
|
|
||||||
|
public final @Nullable Class<? extends Content> contentClass;
|
||||||
|
|
||||||
|
ContentType(Class<? extends Content> contentClass){
|
||||||
|
this.contentClass = contentClass;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import mindustry.ui.dialogs.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class MapResizeDialog extends BaseDialog{
|
public class MapResizeDialog extends BaseDialog{
|
||||||
public static int minSize = 50, maxSize = 500, increment = 50;
|
public static int minSize = 50, maxSize = 600, increment = 50;
|
||||||
|
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
|
|||||||
@@ -71,10 +71,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
transient boolean wasDamaged; //used only by the indexer
|
transient boolean wasDamaged; //used only by the indexer
|
||||||
transient float visualLiquid;
|
transient float visualLiquid;
|
||||||
|
|
||||||
//TODO bad system
|
|
||||||
transient @Nullable Liquid filterConsLiquid;
|
|
||||||
transient @Nullable Item filterConsItem;
|
|
||||||
|
|
||||||
@Nullable PowerModule power;
|
@Nullable PowerModule power;
|
||||||
@Nullable ItemModule items;
|
@Nullable ItemModule items;
|
||||||
@Nullable LiquidModule liquids;
|
@Nullable LiquidModule liquids;
|
||||||
|
|||||||
@@ -691,21 +691,18 @@ public class DesktopInput extends InputHandler{
|
|||||||
public boolean tap(float x, float y, int count, KeyCode button){
|
public boolean tap(float x, float y, int count, KeyCode button){
|
||||||
if(scene.hasMouse() || !commandMode) return false;
|
if(scene.hasMouse() || !commandMode) return false;
|
||||||
|
|
||||||
|
//TODO doesn't work properly
|
||||||
tappedOne = true;
|
tappedOne = true;
|
||||||
|
|
||||||
//click: select a single unit
|
//click: select a single unit
|
||||||
if(button == KeyCode.mouseLeft){
|
if(button == KeyCode.mouseLeft){
|
||||||
Unit unit = selectedCommandUnit(input.mouseWorldX(), input.mouseWorldY());
|
Unit unit = selectedCommandUnit(input.mouseWorldX(), input.mouseWorldY());
|
||||||
if(unit != null){
|
if(unit != null){
|
||||||
if(!multiSelect()){
|
if(selectedUnits.contains(unit)){
|
||||||
|
selectedUnits.remove(unit);
|
||||||
|
}else{
|
||||||
selectedUnits.clear();
|
selectedUnits.clear();
|
||||||
selectedUnits.add(unit);
|
selectedUnits.add(unit);
|
||||||
}else{
|
|
||||||
if(selectedUnits.contains(unit)){
|
|
||||||
selectedUnits.remove(unit);
|
|
||||||
}else{
|
|
||||||
selectedUnits.add(unit);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
//deselect
|
//deselect
|
||||||
|
|||||||
@@ -49,10 +49,6 @@ public class UnitType extends UnlockableContent{
|
|||||||
public boolean flying;
|
public boolean flying;
|
||||||
/** Creates a new instance of this unit class. */
|
/** Creates a new instance of this unit class. */
|
||||||
public Prov<? extends Unit> constructor;
|
public Prov<? extends Unit> constructor;
|
||||||
/** The default AI controller to assign on creation. */
|
|
||||||
public Prov<? extends UnitController> defaultController = () -> !flying ? new GroundAI() : new FlyingAI();
|
|
||||||
/** Function that chooses AI controller based on unit entity. */
|
|
||||||
public Func<Unit, ? extends UnitController> unitBasedDefaultController = u -> defaultController.get();
|
|
||||||
|
|
||||||
/** Environmental flags that are *all* required for this unit to function. 0 = any environment */
|
/** Environmental flags that are *all* required for this unit to function. 0 = any environment */
|
||||||
public int envRequired = 0;
|
public int envRequired = 0;
|
||||||
@@ -116,6 +112,11 @@ public class UnitType extends UnlockableContent{
|
|||||||
/** Target items to mine. Used in MinerAI */
|
/** Target items to mine. Used in MinerAI */
|
||||||
public Seq<Item> mineItems = Seq.with(Items.copper, Items.lead, Items.titanium, Items.thorium);
|
public Seq<Item> mineItems = Seq.with(Items.copper, Items.lead, Items.titanium, Items.thorium);
|
||||||
|
|
||||||
|
/** The default AI controller to assign on creation. */
|
||||||
|
public Prov<? extends UnitController> defaultController = () -> !flying ? new GroundAI() : new FlyingAI();
|
||||||
|
/** Function that chooses AI controller based on unit entity. */
|
||||||
|
public Func<Unit, ? extends UnitController> unitBasedDefaultController = u -> !playerControllable || u.team.isAI() ? defaultController.get() : new CommandAI();
|
||||||
|
|
||||||
public Color outlineColor = Pal.darkerMetal;
|
public Color outlineColor = Pal.darkerMetal;
|
||||||
public int outlineRadius = 3;
|
public int outlineRadius = 3;
|
||||||
public boolean outlines = true;
|
public boolean outlines = true;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package mindustry.type.unit;
|
package mindustry.type.unit;
|
||||||
|
|
||||||
import mindustry.ai.types.*;
|
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
@@ -12,7 +11,6 @@ public class ErekirUnitType extends UnitType{
|
|||||||
super(name);
|
super(name);
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
envDisabled = Env.space;
|
envDisabled = Env.space;
|
||||||
unitBasedDefaultController = u -> !playerControllable || u.team.isAI() ? defaultController.get() : new CommandAI();
|
|
||||||
researchCostMultiplier = 10f;
|
researchCostMultiplier = 10f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -427,7 +427,19 @@ public class PlacementFragment extends Fragment{
|
|||||||
for(int i = 0; i < counts.length; i++){
|
for(int i = 0; i < counts.length; i++){
|
||||||
if(counts[i] > 0){
|
if(counts[i] > 0){
|
||||||
var type = content.unit(i);
|
var type = content.unit(i);
|
||||||
u.add(new ItemImage(type.uiIcon, counts[i])).tooltip(type.localizedName).pad(4);
|
u.add(new ItemImage(type.uiIcon, counts[i])).tooltip(type.localizedName).pad(4).with(b -> {
|
||||||
|
ClickListener listener = new ClickListener();
|
||||||
|
|
||||||
|
//left click -> select
|
||||||
|
b.clicked(KeyCode.mouseLeft, () -> control.input.selectedUnits.removeAll(unit -> unit.type != type));
|
||||||
|
//right click -> remove
|
||||||
|
b.clicked(KeyCode.mouseRight, () -> control.input.selectedUnits.removeAll(unit -> unit.type == type));
|
||||||
|
|
||||||
|
b.addListener(listener);
|
||||||
|
b.addListener(new HandCursorListener());
|
||||||
|
//gray on hover
|
||||||
|
b.update(() -> ((Group)b.getChildren().first()).getChildren().first().setColor(listener.isOver() ? Color.lightGray : Color.white));
|
||||||
|
});
|
||||||
|
|
||||||
if(++col % 7 == 0){
|
if(++col % 7 == 0){
|
||||||
u.row();
|
u.row();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public class BaseTurret extends Block{
|
|||||||
/** How much reload is lowered by for each unit of liquid of heat capacity. */
|
/** How much reload is lowered by for each unit of liquid of heat capacity. */
|
||||||
public float coolantMultiplier = 5f;
|
public float coolantMultiplier = 5f;
|
||||||
/** If not null, this consumer will be used for coolant. */
|
/** If not null, this consumer will be used for coolant. */
|
||||||
|
//TODO make automatic for mods?
|
||||||
public @Nullable ConsumeLiquidBase coolant;
|
public @Nullable ConsumeLiquidBase coolant;
|
||||||
|
|
||||||
public BaseTurret(String name){
|
public BaseTurret(String name){
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.world.blocks.defense.turrets;
|
package mindustry.world.blocks.defense.turrets;
|
||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import mindustry.world.consumers.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@@ -33,8 +34,9 @@ public class ReloadTurret extends BaseTurret{
|
|||||||
|
|
||||||
protected void updateCooling(){
|
protected void updateCooling(){
|
||||||
if(reload < reloadTime && coolant != null && coolant.valid(this)){
|
if(reload < reloadTime && coolant != null && coolant.valid(this)){
|
||||||
|
float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : 1f;
|
||||||
coolant.update(this);
|
coolant.update(this);
|
||||||
reload += coolant.amount * edelta() * (filterConsLiquid == null ? 1f : filterConsLiquid.heatCapacity) * coolantMultiplier;
|
reload += coolant.amount * edelta() * capacity * coolantMultiplier;
|
||||||
|
|
||||||
if(Mathf.chance(0.06 * coolant.amount)){
|
if(Mathf.chance(0.06 * coolant.amount)){
|
||||||
coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
|
coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mindustry.world.consumers;
|
|||||||
|
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
@@ -28,7 +29,7 @@ public class ConsumeItemFilter extends Consume{
|
|||||||
public void build(Building build, Table table){
|
public void build(Building build, Table table){
|
||||||
MultiReqImage image = new MultiReqImage();
|
MultiReqImage image = new MultiReqImage();
|
||||||
content.items().each(i -> filter.get(i) && i.unlockedNow(), item -> image.add(new ReqImage(new ItemImage(item.uiIcon, 1),
|
content.items().each(i -> filter.get(i) && i.unlockedNow(), item -> image.add(new ReqImage(new ItemImage(item.uiIcon, 1),
|
||||||
() -> build.items != null && build.items.has(item))));
|
() -> build.items.has(item))));
|
||||||
|
|
||||||
table.add(image).size(8 * 4);
|
table.add(image).size(8 * 4);
|
||||||
}
|
}
|
||||||
@@ -39,27 +40,27 @@ public class ConsumeItemFilter extends Consume{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void trigger(Building build){
|
public void trigger(Building build){
|
||||||
|
Item item = getConsumed(build);
|
||||||
|
if(item != null){
|
||||||
|
build.items.remove(item, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Item getConsumed(Building build){
|
||||||
for(int i = 0; i < content.items().size; i++){
|
for(int i = 0; i < content.items().size; i++){
|
||||||
Item item = content.item(i);
|
Item item = content.item(i);
|
||||||
if(build.items != null && build.items.has(item) && this.filter.get(item)){
|
if(build.items.has(item) && this.filter.get(item)){
|
||||||
build.items.remove(item, 1);
|
return item;
|
||||||
build.filterConsItem = item;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean valid(Building build){
|
public boolean valid(Building build){
|
||||||
if(build.consumeTriggerValid()) return true;
|
if(build.consumeTriggerValid()) return true;
|
||||||
|
|
||||||
for(int i = 0; i < content.items().size; i++){
|
return getConsumed(build) != null;
|
||||||
Item item = content.item(i);
|
|
||||||
if(this.filter.get(item) && build.items.has(item)){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,19 +42,19 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Building build){
|
public void update(Building build){
|
||||||
Liquid liq = match(build);
|
Liquid liq = getConsumed(build);
|
||||||
build.liquids.remove(liq, use(build));
|
build.liquids.remove(liq, use(build));
|
||||||
build.filterConsLiquid = liq;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean valid(Building build){
|
public boolean valid(Building build){
|
||||||
var liq = match(build);
|
var liq = getConsumed(build);
|
||||||
return liq != null && build.liquids.get(liq) >= use(build);
|
return liq != null && build.liquids.get(liq) >= use(build);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable Liquid match(Building build){
|
public @Nullable Liquid getConsumed(Building build){
|
||||||
if(filter.get(build.liquids.current())){
|
float u = use(build);
|
||||||
|
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() >= u){
|
||||||
return build.liquids.current();
|
return build.liquids.current();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
|||||||
|
|
||||||
for(int i = 0; i < liqs.size; i++){
|
for(int i = 0; i < liqs.size; i++){
|
||||||
var liq = liqs.get(i);
|
var liq = liqs.get(i);
|
||||||
if(filter.get(liq) && build.liquids.get(liq) > 0){
|
if(filter.get(liq) && build.liquids.get(liq) >= u){
|
||||||
return liq;
|
return liq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user