implemented new setElevation and setDirection methods

master
Soper Aylamo 2021-06-20 02:58:05 -04:00
parent 2b2a1b878e
commit a3c7044620
Signed by: Soper
GPG Key ID: A27AC885ACC3BEAE
2 changed files with 24 additions and 22 deletions

View File

@ -73,25 +73,15 @@ public class MortarInteract implements Listener {
if(Mortar.isMortar(linkedLocation.getBlock())){ if(Mortar.isMortar(linkedLocation.getBlock())){
Block linkedMortar = linkedLocation.getBlock(); Block linkedMortar = linkedLocation.getBlock();
Vector playerDirection = player.getLocation().getDirection(); Vector playerDirection = player.getLocation().getDirection();
/*TODO: convert to angles and get unit vector from angles
*right now, this does not properly get a direction vector
it is NOT a unit vector.*/
if(event.getAction() == Action.LEFT_CLICK_AIR){ if(event.getAction() == Action.LEFT_CLICK_AIR){
Vector horizonVector = new Vector(playerDirection.getX(), 0, playerDirection.getZ()); double angle = ArtyMath.calculateDirection(playerDirection);
Mortar.setMortarDirection(linkedMortar, horizonVector); Mortar.setDirectionAngle(linkedMortar, angle);
player.sendMessage(ChatColor.GOLD + "Mortar is now pointing towards " + horizonVector.getX() + ", " + horizonVector.getZ()); player.sendMessage("DEBUG: Angle is " + (180*angle/Math.PI));
player.sendMessage("DEBUG: Angle is " + (180*horizonVector.angle(new Vector(1,0,0))/Math.PI));
//Using new methods to test:
player.sendMessage("DEBUG: Angle with new basic trig method is " + ArtyMath.calculateDirectionBASICTRIG(playerDirection));
player.sendMessage("DEBUG: Angle with new dot product method is " + ArtyMath.calculateDirectionDOTPRODUCT(playerDirection));
} }
else if(event.getAction() == Action.RIGHT_CLICK_AIR){ else if(event.getAction() == Action.RIGHT_CLICK_AIR){
Vector verticalVector = new Vector(0, playerDirection.getY(), 0); double angle = ArtyMath.calculateElevation(playerDirection);
Mortar.setMortarDirection(linkedMortar, verticalVector); Mortar.setElevationAngle(linkedMortar, angle);
player.sendMessage(ChatColor.GOLD + "Mortar is now pointing up with a vector " + verticalVector.getY()); player.sendMessage("DEBUG: Angle is " + (180*angle/Math.PI));
player.sendMessage("DEBUG: Angle is " + (180*verticalVector.angle(new Vector(1,0,0))/Math.PI));
} }
} }
else player.sendMessage(ChatColor.GOLD + "Linked position has no mortar."); else player.sendMessage(ChatColor.GOLD + "Linked position has no mortar.");

View File

@ -219,15 +219,27 @@ public class Mortar {
} }
/** /**
* * Adjust a block's elevation angle metadata.
* @param angle * @param block Block that represents a mortar.
* @param angle Elevation angle in radians.
*/ */
public static void setElevationAngle(double angle){ public static void setElevationAngle(Block block, double angle){
//TODO: setElevationAngle method if(isMortar(block)){
block.setMetadata("elevation_angle", new FixedMetadataValue(Artillery.getPlugin(Artillery.class), angle));
}
else throw new IllegalArgumentException("Cannot set non-mortar block's elevation MetaData");
} }
public static void setDirectionAngle(double angle){ /**
//TODO: setDirectionAngle method * Adjust a block's directional angle metadata.
* @param block Blocks that represents a mortar.
* @param angle Directional angle from the east in radians, corresponding to the Minecraft coordinate system.
*/
public static void setDirectionAngle(Block block, double angle){
if(isMortar(block)){
block.setMetadata("direction_angle", new FixedMetadataValue(Artillery.getPlugin(Artillery.class), angle));
}
else throw new IllegalArgumentException("Cannot set non-mortar block's directional MetaData");
} }
private static boolean isStringMortar(String string){ private static boolean isStringMortar(String string){