Added rule for editing world processors in-game

This commit is contained in:
Anuken
2024-08-30 12:40:47 -04:00
parent 27603165ab
commit acbd8bb190
9 changed files with 14 additions and 8 deletions

View File

@@ -1340,6 +1340,8 @@ rules.wavetimer = Wave Timer
rules.wavesending = Wave Sending rules.wavesending = Wave Sending
rules.allowedit = Allow Editing Rules rules.allowedit = Allow Editing Rules
rules.allowedit.info = When enabled, the player can edit rules in-game via the button in the bottom left corner of the Pause menu. rules.allowedit.info = When enabled, the player can edit rules in-game via the button in the bottom left corner of the Pause menu.
rules.alloweditworldprocessors = Allow Editing World Processors
rules.alloweditworldprocessors.info = When enabled, world logic blocks can be placed and edited even outside the editor.
rules.waves = Waves rules.waves = Waves
rules.airUseSpawns = Air units use spawn points rules.airUseSpawns = Air units use spawn points
rules.attack = Attack Mode rules.attack = Attack Mode

View File

@@ -5916,7 +5916,7 @@ public class Blocks{
}}; }};
worldProcessor = new LogicBlock("world-processor"){{ worldProcessor = new LogicBlock("world-processor"){{
requirements(Category.logic, BuildVisibility.editorOnly, with()); requirements(Category.logic, BuildVisibility.worldProcessorOnly, with());
canOverdrive = false; canOverdrive = false;
targetable = false; targetable = false;
@@ -5929,7 +5929,7 @@ public class Blocks{
}}; }};
worldCell = new MemoryBlock("world-cell"){{ worldCell = new MemoryBlock("world-cell"){{
requirements(Category.logic, BuildVisibility.editorOnly, with()); requirements(Category.logic, BuildVisibility.worldProcessorOnly, with());
targetable = false; targetable = false;
privileged = true; privileged = true;
@@ -5938,14 +5938,14 @@ public class Blocks{
}}; }};
worldMessage = new MessageBlock("world-message"){{ worldMessage = new MessageBlock("world-message"){{
requirements(Category.logic, BuildVisibility.editorOnly, with()); requirements(Category.logic, BuildVisibility.worldProcessorOnly, with());
targetable = false; targetable = false;
privileged = true; privileged = true;
}}; }};
worldSwitch = new SwitchBlock("world-switch"){{ worldSwitch = new SwitchBlock("world-switch"){{
requirements(Category.logic, BuildVisibility.editorOnly, with()); requirements(Category.logic, BuildVisibility.worldProcessorOnly, with());
targetable = false; targetable = false;
privileged = true; privileged = true;

View File

@@ -85,6 +85,8 @@ public class Rules{
public boolean ghostBlocks = true; public boolean ghostBlocks = true;
/** Whether to allow units to build with logic. */ /** Whether to allow units to build with logic. */
public boolean logicUnitBuild = true; public boolean logicUnitBuild = true;
/** If true, world processors can be edited and placed on this map. */
public boolean allowEditWorldProcessors = false;
/** If true, world processors no longer update. Used for testing. */ /** If true, world processors no longer update. Used for testing. */
public boolean disableWorldProcessors = false; public boolean disableWorldProcessors = false;
/** How much health blocks start with. */ /** How much health blocks start with. */

View File

@@ -230,6 +230,7 @@ public class CustomRulesDialog extends BaseDialog{
number("@rules.dropzoneradius", false, f -> rules.dropZoneRadius = f * tilesize, () -> rules.dropZoneRadius / tilesize, () -> rules.waves); number("@rules.dropzoneradius", false, f -> rules.dropZoneRadius = f * tilesize, () -> rules.dropZoneRadius / tilesize, () -> rules.waves);
category("resourcesbuilding"); category("resourcesbuilding");
check("@rules.alloweditworldprocessors", b -> rules.allowEditWorldProcessors = b, () -> rules.allowEditWorldProcessors);
check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources); check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources);
check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore); check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore);
check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair); check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair);

View File

@@ -109,7 +109,7 @@ public class LogicBlock extends Block{
} }
public boolean accessible(){ public boolean accessible(){
return !privileged || state.rules.editor || state.playtestingMap != null; return !privileged || state.rules.editor || state.playtestingMap != null || state.rules.allowEditWorldProcessors;
} }
@Override @Override

View File

@@ -28,7 +28,7 @@ public class MemoryBlock extends Block{
} }
public boolean accessible(){ public boolean accessible(){
return !privileged || state.rules.editor; return !privileged || state.rules.editor || state.rules.allowEditWorldProcessors;
} }
@Override @Override

View File

@@ -58,7 +58,7 @@ public class MessageBlock extends Block{
} }
public boolean accessible(){ public boolean accessible(){
return !privileged || state.rules.editor; return !privileged || state.rules.editor || state.rules.allowEditWorldProcessors;
} }
@Override @Override

View File

@@ -28,7 +28,7 @@ public class SwitchBlock extends Block{
} }
public boolean accessible(){ public boolean accessible(){
return !privileged || state.rules.editor; return !privileged || state.rules.editor || state.rules.allowEditWorldProcessors;
} }
@Override @Override

View File

@@ -10,6 +10,7 @@ public class BuildVisibility{
shown = new BuildVisibility(() -> true), shown = new BuildVisibility(() -> true),
debugOnly = new BuildVisibility(() -> false), debugOnly = new BuildVisibility(() -> false),
editorOnly = new BuildVisibility(() -> Vars.state.rules.editor), editorOnly = new BuildVisibility(() -> Vars.state.rules.editor),
worldProcessorOnly = new BuildVisibility(() -> Vars.state.rules.editor || Vars.state.rules.allowEditWorldProcessors),
sandboxOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.infiniteResources), sandboxOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.infiniteResources),
campaignOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.isCampaign()), campaignOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.isCampaign()),
lightingOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()), lightingOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()),