forked from MagicBane/Server
Initial Repository Push
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||||
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||||
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||||
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||||
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||||
// Magicbane Emulator Project © 2013 - 2022
|
||||
// www.magicbane.com
|
||||
|
||||
|
||||
package engine.devcmd.cmds;
|
||||
|
||||
import engine.InterestManagement.WorldGrid;
|
||||
import engine.devcmd.AbstractDevCmd;
|
||||
import engine.gameManager.BuildingManager;
|
||||
import engine.gameManager.ChatManager;
|
||||
import engine.gameManager.DbManager;
|
||||
import engine.math.Vector3f;
|
||||
import engine.math.Vector3fImmutable;
|
||||
import engine.objects.*;
|
||||
|
||||
public class RotateCmd extends AbstractDevCmd {
|
||||
|
||||
public RotateCmd() {
|
||||
super("rotate");
|
||||
this.addCmdString("rot");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void _doCmd(PlayerCharacter pc, String[] words,
|
||||
AbstractGameObject target) {
|
||||
if (target == null && (words.length != 2) ) {
|
||||
this.sendUsage(pc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (words.length == 3){
|
||||
try{
|
||||
|
||||
}catch(Exception e){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float rot;
|
||||
if (target != null && words.length == 1) {
|
||||
|
||||
try {
|
||||
if (words[0].equalsIgnoreCase("face")){
|
||||
this.rotateFace(pc, target);
|
||||
return;
|
||||
}
|
||||
|
||||
rot = Float.parseFloat(words[0]);
|
||||
} catch (NumberFormatException e) {
|
||||
throwbackError(pc, "Supplied rotation " + words[0]
|
||||
+ " failed to parse to a Float");
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
throwbackError(pc,
|
||||
"Invalid Rotate Command. Need Rotation specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3f rotation = new Vector3f(0f, rot, 0f);
|
||||
|
||||
if (target instanceof Building)
|
||||
rotateBuilding(pc, (Building) target, rotation, rot,false);
|
||||
else if (target instanceof NPC)
|
||||
rotateNPC(pc, (NPC) target, rotation,false);
|
||||
else if (target instanceof Mob)
|
||||
rotateMob(pc, (Mob) target, rotation,false);
|
||||
else
|
||||
throwbackError(pc, "Target " + target.getObjectType()
|
||||
+ " is not a valid object type");
|
||||
} else {
|
||||
|
||||
int id = 0;
|
||||
if (words.length == 2) {
|
||||
try {
|
||||
id = Integer.parseInt(words[0]);
|
||||
|
||||
if (words[1].equalsIgnoreCase("face")){
|
||||
|
||||
Building b;
|
||||
if (id != 0)
|
||||
b = BuildingManager.getBuilding(id);
|
||||
else
|
||||
b = getTargetAsBuilding(pc);
|
||||
if (b != null) {
|
||||
rotateFace(pc, b);
|
||||
return;
|
||||
}
|
||||
|
||||
// building failed, try npc
|
||||
NPC npc;
|
||||
if (id != 0)
|
||||
npc = NPC.getNPC(id);
|
||||
else
|
||||
npc = getTargetAsNPC(pc);
|
||||
if (npc != null) {
|
||||
rotateFace(pc, npc);
|
||||
return;
|
||||
}
|
||||
|
||||
// NPC failed, try mob
|
||||
Mob mob;
|
||||
if (id != 0)
|
||||
mob = Mob.getMob(id);
|
||||
else
|
||||
mob = getTargetAsMob(pc);
|
||||
if (mob != null) {
|
||||
rotateFace(pc, mob);
|
||||
return;
|
||||
}
|
||||
throwbackError(pc, "Nothing found to rotate.");
|
||||
return;
|
||||
}
|
||||
rot = Float.parseFloat(words[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
throwbackError(pc, "Supplied arguments " + words[0] + ' '
|
||||
+ words[1] + " failed to parse");
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
throwbackError(pc,
|
||||
"Invalid Rotate Command. Need Rotation specified.");
|
||||
return; // NaN
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
rot = Float.parseFloat(words[0]);
|
||||
} catch (NumberFormatException e) {
|
||||
throwbackError(pc, "Supplied rotation " + words[0]
|
||||
+ " failed to parse to a Float");
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
throwbackError(pc,
|
||||
"Invalid Rotate Command. Need Rotation specified.");
|
||||
return; // NaN
|
||||
}
|
||||
}
|
||||
|
||||
Vector3f rotation = new Vector3f(0f, rot, 0f);
|
||||
|
||||
Building b;
|
||||
if (id != 0)
|
||||
b = BuildingManager.getBuilding(id);
|
||||
else
|
||||
b = getTargetAsBuilding(pc);
|
||||
if (b != null) {
|
||||
rotateBuilding(pc, b, rotation, rot,false);
|
||||
return;
|
||||
}
|
||||
|
||||
// building failed, try npc
|
||||
NPC npc;
|
||||
if (id != 0)
|
||||
npc = NPC.getNPC(id);
|
||||
else
|
||||
npc = getTargetAsNPC(pc);
|
||||
if (npc != null) {
|
||||
rotateNPC(pc, npc, rotation,false);
|
||||
return;
|
||||
}
|
||||
|
||||
// NPC failed, try mob
|
||||
Mob mob;
|
||||
if (id != 0)
|
||||
mob = Mob.getMob(id);
|
||||
else
|
||||
mob = getTargetAsMob(pc);
|
||||
if (mob != null) {
|
||||
rotateMob(pc, mob, rotation,false);
|
||||
return;
|
||||
}
|
||||
throwbackError(pc, "Nothing found to rotate.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String _getHelpString() {
|
||||
return "Rotates targeted or specified object";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String _getUsageString() {
|
||||
return "' /rotate [objectID] rotation' || ' /rot [objectID] rotation'";
|
||||
}
|
||||
|
||||
private void rotateBuilding(PlayerCharacter pc, Building building, Vector3f rot, float orig, boolean faceDirection) {
|
||||
if (!faceDirection)
|
||||
rot.set(0.0f, (float)Math.sin(Math.toRadians(orig)/2), 0.0f);
|
||||
building.setRot(rot);
|
||||
building.setw( (float) Math.abs(Math.cos(Math.toRadians(orig)/2)) );
|
||||
building.getBounds().setBounds(building);
|
||||
WorldGrid.updateObject(building, pc);
|
||||
DbManager.BuildingQueries.SET_PROPERTY(building, "rotY", building.getRot().getY());
|
||||
DbManager.BuildingQueries.SET_PROPERTY(building, "w", building.getw());
|
||||
ChatManager.chatSayInfo(pc,
|
||||
"Building with ID " + building.getObjectUUID() + " rotated");
|
||||
}
|
||||
|
||||
private void rotateNPC(PlayerCharacter pc, NPC npc, Vector3f rot,boolean faceDirection) {
|
||||
npc.setRot(rot);
|
||||
DbManager.NPCQueries.SET_PROPERTY(npc, "npc_rotation", rot.y);
|
||||
WorldGrid.updateObject(npc, pc);
|
||||
//no rotation for npc's in db currently
|
||||
ChatManager.chatSayInfo(pc,
|
||||
"NPC with ID " + npc.getObjectUUID() + " rotated");
|
||||
}
|
||||
|
||||
private void rotateMob(PlayerCharacter pc, Mob mob, Vector3f rot,boolean faceDirection) {
|
||||
mob.setRot(rot);
|
||||
DbManager.MobQueries.SET_PROPERTY(mob, "mob_rotation", rot.y);
|
||||
WorldGrid.updateObject(mob, pc);
|
||||
//no rotation for mobs's in db currently
|
||||
ChatManager.chatSayInfo(pc,
|
||||
"Mob with ID " + mob.getObjectUUID() + " rotated");
|
||||
}
|
||||
|
||||
private void rotateFace(PlayerCharacter pc, AbstractGameObject target){
|
||||
AbstractWorldObject awo = (AbstractWorldObject)target;
|
||||
if (awo == null)
|
||||
return;
|
||||
Vector3fImmutable buildingLoc = awo.getLoc();
|
||||
Vector3fImmutable playerLoc = pc.getLoc();
|
||||
|
||||
Vector3fImmutable faceDirection = playerLoc.subtract2D(buildingLoc);
|
||||
|
||||
float rotangle = faceDirection.getRotation();
|
||||
|
||||
float rot = (float) Math.toDegrees(rotangle);
|
||||
|
||||
if (rot > 180)
|
||||
rot*=-1;
|
||||
|
||||
Vector3f buildingrotation = new Vector3f(0f, rot, 0f);
|
||||
Vector3f rotation = new Vector3f(0f, rotangle, 0f);
|
||||
if (target instanceof Building)
|
||||
rotateBuilding(pc, (Building) target, buildingrotation, rot,false);
|
||||
else if (target instanceof NPC)
|
||||
rotateNPC(pc, (NPC) target, rotation,true);
|
||||
else if (target instanceof Mob)
|
||||
rotateMob(pc, (Mob) target, rotation,true);
|
||||
else
|
||||
throwbackError(pc, "Target " + target.getObjectType()
|
||||
+ " is not a valid object type");
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user