Added EMC Contractor multithreading
This commit is contained in:
parent
78bc4a666a
commit
de0ad48a2d
3 changed files with 77 additions and 9 deletions
|
@ -96,6 +96,7 @@ public class ResonantInduction
|
||||||
private static final int BLOCK_ID_PREFIX = 3200;
|
private static final int BLOCK_ID_PREFIX = 3200;
|
||||||
/** Item ID by Horfius */
|
/** Item ID by Horfius */
|
||||||
private static final int ITEM_ID_PREFIX = 20150;
|
private static final int ITEM_ID_PREFIX = 20150;
|
||||||
|
public static int MAX_CONTRACTOR_DISTANCE = 200;
|
||||||
|
|
||||||
private static int NEXT_BLOCK_ID = BLOCK_ID_PREFIX;
|
private static int NEXT_BLOCK_ID = BLOCK_ID_PREFIX;
|
||||||
private static int NEXT_ITEM_ID = ITEM_ID_PREFIX;
|
private static int NEXT_ITEM_ID = ITEM_ID_PREFIX;
|
||||||
|
@ -132,6 +133,7 @@ public class ResonantInduction
|
||||||
// Config
|
// Config
|
||||||
POWER_PER_COAL = (float) CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Coal Wattage", POWER_PER_COAL).getDouble(POWER_PER_COAL);
|
POWER_PER_COAL = (float) CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Coal Wattage", POWER_PER_COAL).getDouble(POWER_PER_COAL);
|
||||||
SOUND_FXS = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Tesla Sound FXs", SOUND_FXS).getBoolean(SOUND_FXS);
|
SOUND_FXS = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Tesla Sound FXs", SOUND_FXS).getBoolean(SOUND_FXS);
|
||||||
|
MAX_CONTRACTOR_DISTANCE = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Max EM Contractor Path", MAX_CONTRACTOR_DISTANCE).getInt(MAX_CONTRACTOR_DISTANCE);
|
||||||
|
|
||||||
TileEntityEMContractor.ACCELERATION = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Contractor Item Acceleration", TileEntityEMContractor.ACCELERATION).getDouble(TileEntityEMContractor.ACCELERATION);
|
TileEntityEMContractor.ACCELERATION = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Contractor Item Acceleration", TileEntityEMContractor.ACCELERATION).getDouble(TileEntityEMContractor.ACCELERATION);
|
||||||
TileEntityEMContractor.MAX_REACH = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Contractor Max Item Reach", TileEntityEMContractor.MAX_REACH).getInt(TileEntityEMContractor.MAX_REACH);
|
TileEntityEMContractor.MAX_REACH = CONFIGURATION.get(Configuration.CATEGORY_GENERAL, "Contractor Max Item Reach", TileEntityEMContractor.MAX_REACH).getInt(TileEntityEMContractor.MAX_REACH);
|
||||||
|
|
47
src/resonantinduction/contractor/ThreadPathfinding.java
Normal file
47
src/resonantinduction/contractor/ThreadPathfinding.java
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package resonantinduction.contractor;
|
||||||
|
|
||||||
|
import resonantinduction.base.Vector3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Calclavia
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ThreadPathfinding extends Thread
|
||||||
|
{
|
||||||
|
private boolean isCompleted = false;
|
||||||
|
private PathfinderEMContractor pathfinder;
|
||||||
|
private Vector3 start;
|
||||||
|
|
||||||
|
public ThreadPathfinding(PathfinderEMContractor pathfinder, Vector3 start)
|
||||||
|
{
|
||||||
|
this.pathfinder = pathfinder;
|
||||||
|
this.start = start;
|
||||||
|
this.setPriority(Thread.MIN_PRIORITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ThreadPathfinding find()
|
||||||
|
{
|
||||||
|
this.run();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
this.pathfinder.find(this.start);
|
||||||
|
this.isCompleted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PathfinderEMContractor getPath()
|
||||||
|
{
|
||||||
|
if (this.isCompleted)
|
||||||
|
{
|
||||||
|
return this.pathfinder;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,6 +50,10 @@ public class TileEntityEMContractor extends TileEntityBase implements IPacketRec
|
||||||
*/
|
*/
|
||||||
public boolean suck = true;
|
public boolean suck = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pathfinding
|
||||||
|
*/
|
||||||
|
private ThreadPathfinding thread;
|
||||||
private PathfinderEMContractor pathfinder;
|
private PathfinderEMContractor pathfinder;
|
||||||
private Set<EntityItem> pathfindingTrackers = new HashSet<EntityItem>();
|
private Set<EntityItem> pathfindingTrackers = new HashSet<EntityItem>();
|
||||||
private TileEntityEMContractor linked;
|
private TileEntityEMContractor linked;
|
||||||
|
@ -124,6 +128,17 @@ public class TileEntityEMContractor extends TileEntityBase implements IPacketRec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.thread != null)
|
||||||
|
{
|
||||||
|
PathfinderEMContractor newPath = this.thread.getPath();
|
||||||
|
|
||||||
|
if (newPath != null)
|
||||||
|
{
|
||||||
|
this.pathfinder = newPath;
|
||||||
|
this.thread = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.suck)
|
if (!this.suck)
|
||||||
{
|
{
|
||||||
if (this.linked != null && !this.linked.isInvalid())
|
if (this.linked != null && !this.linked.isInvalid())
|
||||||
|
@ -514,17 +529,21 @@ public class TileEntityEMContractor extends TileEntityBase implements IPacketRec
|
||||||
|
|
||||||
public void updatePath()
|
public void updatePath()
|
||||||
{
|
{
|
||||||
this.pathfinder = null;
|
if (this.thread == null)
|
||||||
|
|
||||||
if (this.linked != null)
|
|
||||||
{
|
{
|
||||||
Vector3 start = new Vector3(this).translate(new Vector3(this.getDirection()));
|
if (this.linked != null)
|
||||||
Vector3 target = new Vector3(this.linked).translate(new Vector3(this.linked.getDirection()));
|
|
||||||
|
|
||||||
if (TileEntityEMContractor.canBePath(this.worldObj, start, new Vector3(this.linked)) && TileEntityEMContractor.canBePath(this.worldObj, target, new Vector3(this.linked)))
|
|
||||||
{
|
{
|
||||||
this.pathfinder = new PathfinderEMContractor(this.worldObj, target);
|
Vector3 start = new Vector3(this).translate(new Vector3(this.getDirection()));
|
||||||
this.pathfinder.find(start);
|
Vector3 target = new Vector3(this.linked).translate(new Vector3(this.linked.getDirection()));
|
||||||
|
|
||||||
|
if (start.distance(target) < ResonantInduction.MAX_CONTRACTOR_DISTANCE)
|
||||||
|
{
|
||||||
|
if (TileEntityEMContractor.canBePath(this.worldObj, start, new Vector3(this.linked)) && TileEntityEMContractor.canBePath(this.worldObj, target, new Vector3(this.linked)))
|
||||||
|
{
|
||||||
|
this.thread = new ThreadPathfinding(new PathfinderEMContractor(this.worldObj, target), start);
|
||||||
|
this.thread.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue