The automation tower defense RTS
Go to file
InvalidError404 ea6490cf9f
Improved ItemModule::take() behavior (#1495)
* Improved ItemModule::take() behavior

The original take() behavior spams items in whatever order they appear in the items list until each index is depleted, which is problematic when non-specific unloaders are competing against dedicated unloaders for a low-index resources.

My modification makes the take() loop persistent so take() will do complete laps around the item list starting from wherever the previous call returned from, never repeating the same item twice in a row unless there is nothing else to return. A significant improvement IMO.

How is this an improvement? With the original behavior, if you converge a bunch of belts on a storage block or launcher, want to unload a few belts of specific resources (ex.: copper, lead, silicon and titanium for surge alloy) and pass everything else including overflows along using non-specific unloaders, you are out of luck when the resources you want are at the top of the list since most of those will get swept away by non-specific unloaders. With the rotating take(), non-specific unloaders are equal-opportunity across all available resources, which gives single-resource unloaders that many more chances to unload more of their resources before non-specific unloaders get to them. It also reduces the rate at which items further down the list that may hardly ever get touched by the existing implementation will race toward the storage block's cap. The even drain across all items will help prevent things like mass driver stalls due to receivers filling up with an excess resource that isn't getting cleared.

It would be even nicer if dedicated unloaders had priority over non-specific ones (non-specific unloaders don't touch resources with dedicated unloaders unless the dedicated unloaders are overflowing), though that would require a rework beyond my current "getting the stupid IDE and tool chains to work" level of familiarity with Java development.

To sum it up: trivial change, big impact for people who like mixing belts and sorting them out with unloaders.

* Update core/src/mindustry/world/modules/ItemModule.java

Co-Authored-By: Patrick 'Quezler' Mounier <Quezler@me.com>

* Update core/src/mindustry/world/modules/ItemModule.java

Co-Authored-By: Patrick 'Quezler' Mounier <Quezler@me.com>

* Formatting

* Anuken's take() rotator.

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2020-02-03 20:27:25 -05:00
.github
android Cleanup 2020-01-31 20:10:21 -05:00
annotations Abstract component method support 2020-02-02 17:21:35 -05:00
core Improved ItemModule::take() behavior (#1495) 2020-02-03 20:27:25 -05:00
desktop Adding Steam Rich Presence support. (#1453) 2020-01-27 12:17:52 -05:00
fastlane
gradle/wrapper
ios
server Bugfixes 2020-02-01 17:17:03 -05:00
tests More optimization 2020-01-26 16:12:11 -05:00
tools
.gitignore
.travis.yml
build.gradle
CONTRIBUTING.md
gradle.properties Better entity code generation + minor refactoring 2020-02-02 16:13:25 -05:00
gradlew
gradlew.bat
LICENSE
README.md zzzz (#1503) 2020-02-03 15:55:53 -05:00
SERVERLIST.md Update SERVERLIST.md 2020-01-28 13:28:34 -05:00
servers_be.json
servers.json Add mindustry.io to servers.json (#1467) 2020-02-01 17:14:06 -05:00
settings.gradle
TRANSLATING.md
update_wiki.sh

Logo

Build Status Discord

A sandbox tower defense game written in Java.

Trello Board
Wiki

Contributing

See CONTRIBUTING.

Building

Bleeding-edge live builds are generated automatically for every commit. You can see them here. Old builds might still be on jenkins.

If you'd rather compile on your own, follow these instructions. First, make sure you have JDK 8 installed. Open a terminal in the root directory, cd to the Mindustry folder and run the following commands:

Windows

Running: gradlew desktop:run Building: gradlew desktop:dist
Sprite Packing: gradlew tools:pack

Linux/Mac OS

Running: ./gradlew desktop:run Building: ./gradlew desktop:dist
Sprite Packing: ./gradlew tools:pack

Server

Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. gradlew server:dist.

Android

  1. Install the Android SDK here. Make sure you're downloading the "Command line tools only", as Android Studio is not required.
  2. Create a file named local.properties inside the Mindustry directory, with its contents looking like this: sdk.dir=<Path to Android SDK you just downloaded, without these bracket>. For example, if you're on Windows and installed the tools to C:\tools, your local.properties would contain sdk.dir=C:\\tools (note the double backslashes are required instead of single ones!).
  3. Run gradlew android:assembleDebug (or ./gradlew if on linux/mac). This will create an unsigned APK in android/build/outputs/apk.
  4. (Optional) To debug the application on a connected phone, do gradlew android:installDebug android:run. It is highly recommended to use IntelliJ for this instead, however.
Troubleshooting

If the terminal returns Permission denied or Command not found on Mac/Linux, run chmod +x ./gradlew before running ./gradlew. This is a one-time procedure.


Gradle may take up to several minutes to download files. Be patient.
After building, the output .JAR file should be in /desktop/build/libs/Mindustry.jar for desktop builds, and in /server/build/libs/server-release.jar for server builds.

Downloads

Get it on Itch.io

Get it on Google Play

Get it on F-Droid

Feature Requests

Feature Requests