forked from SteamWar/SteamWar
Started refactoring simulator cursor for reuse
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
package de.steamwar.bausystem.utils;
|
||||||
|
|
||||||
|
import de.steamwar.entity.REntity;
|
||||||
|
import de.steamwar.entity.REntityServer;
|
||||||
|
import de.steamwar.entity.RFallingBlockEntity;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
public class RCursor {
|
||||||
|
|
||||||
|
private Player owner;
|
||||||
|
private REntityServer targetServer;
|
||||||
|
|
||||||
|
private RFallingBlockEntity cursorEntity;
|
||||||
|
|
||||||
|
private Material highlightMaterial;
|
||||||
|
private Material cursorMaterial;
|
||||||
|
|
||||||
|
public RCursor(REntityServer targetServer, Material highlightMaterial, Material cursorMaterial) {
|
||||||
|
this.targetServer = targetServer;
|
||||||
|
this.highlightMaterial = highlightMaterial;
|
||||||
|
this.cursorMaterial = cursorMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render() {
|
||||||
|
RayTraceUtils.RRayTraceResult rayTraceResult = RayTraceUtils.traceREntity(owner, owner.getLocation(), targetServer.getEntities());
|
||||||
|
if(rayTraceResult == null) {
|
||||||
|
cursorEntity.die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
REntity hitEntity = rayTraceResult.getHitEntity();
|
||||||
|
|
||||||
|
Material activeCursorMaterial = hitEntity == null ? cursorMaterial : highlightMaterial;
|
||||||
|
Location activeCursorLocation = hitEntity == null ? rayTraceResult.getHitPosition().toLocation(owner.getWorld())
|
||||||
|
: new Vector(hitEntity.getX(), hitEntity.getY(), hitEntity.getZ()).toLocation(owner.getWorld());
|
||||||
|
|
||||||
|
if(cursorEntity == null) {
|
||||||
|
cursorEntity = new RFallingBlockEntity(targetServer, activeCursorLocation, activeCursorMaterial);
|
||||||
|
}
|
||||||
|
else if(cursorEntity.getMaterial() == activeCursorMaterial) {
|
||||||
|
cursorEntity.move(activeCursorLocation);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cursorEntity.die();
|
||||||
|
cursorEntity = new RFallingBlockEntity(targetServer, activeCursorLocation, activeCursorMaterial);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user