mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-07 00:38:46 +00:00
Add support for checking the bounds of entities
This commit is contained in:
@@ -20,6 +20,11 @@ public abstract class Entity {
|
|||||||
*/
|
*/
|
||||||
protected final World world;
|
protected final World world;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The EntityBounds for this Entity.
|
||||||
|
*/
|
||||||
|
private EntityBounds bounds;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the Entity.
|
* Creates the Entity.
|
||||||
*
|
*
|
||||||
@@ -34,6 +39,20 @@ public abstract class Entity {
|
|||||||
@Override
|
@Override
|
||||||
public abstract boolean equals(Object obj);
|
public abstract boolean equals(Object obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the {@link EntityBounds} for this Entity.
|
||||||
|
*
|
||||||
|
* @return The EntityBounds.
|
||||||
|
*/
|
||||||
|
public EntityBounds getBounds() {
|
||||||
|
|
||||||
|
if(bounds == null) {
|
||||||
|
bounds = new EntityBounds(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link Position} of this Entity.
|
* Gets the {@link Position} of this Entity.
|
||||||
*
|
*
|
||||||
@@ -59,6 +78,20 @@ public abstract class Entity {
|
|||||||
*/
|
*/
|
||||||
public abstract EntityType getEntityType();
|
public abstract EntityType getEntityType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the length of this Entity.
|
||||||
|
*
|
||||||
|
* @return The length.
|
||||||
|
*/
|
||||||
|
public abstract int getLength();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the width of this Entity.
|
||||||
|
*
|
||||||
|
* @return The width.
|
||||||
|
*/
|
||||||
|
public abstract int getWidth();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract int hashCode();
|
public abstract int hashCode();
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package org.apollo.game.model.entity;
|
||||||
|
|
||||||
|
import org.apollo.game.model.Position;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The bounds of an {@link Entity}.
|
||||||
|
*
|
||||||
|
* @author Steve Soltys
|
||||||
|
*/
|
||||||
|
public class EntityBounds {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link Entity}.
|
||||||
|
*/
|
||||||
|
private final Entity entity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an EntityBounds.
|
||||||
|
*
|
||||||
|
* @param entity The entity.
|
||||||
|
*/
|
||||||
|
EntityBounds(Entity entity) {
|
||||||
|
this.entity = entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the given position is within the Entity's bounds.
|
||||||
|
*
|
||||||
|
* @param position The position.
|
||||||
|
* @return A flag indicating whether or not the position exists within the Entity's bounds.
|
||||||
|
*/
|
||||||
|
public boolean contains(Position position) {
|
||||||
|
int positionX = position.getX();
|
||||||
|
int positionY = position.getY();
|
||||||
|
int positionHeight = position.getHeight();
|
||||||
|
|
||||||
|
int entityX = entity.getPosition().getX();
|
||||||
|
int entityY = entity.getPosition().getY();
|
||||||
|
int entityHeight = entity.getPosition().getHeight();
|
||||||
|
|
||||||
|
int width = entity.getWidth();
|
||||||
|
int length = entity.getLength();
|
||||||
|
|
||||||
|
return positionX >= entityX && positionX < entityX + width &&
|
||||||
|
positionY >= entityY && positionY < entityY + length &&
|
||||||
|
positionHeight == entityHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -80,6 +80,16 @@ public final class GroundItem extends Entity implements GroupableEntity {
|
|||||||
return EntityType.GROUND_ITEM;
|
return EntityType.GROUND_ITEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLength() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link Item} displayed on the ground.
|
* Gets the {@link Item} displayed on the ground.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -327,6 +327,16 @@ public abstract class Mob extends Entity {
|
|||||||
return walkingQueue;
|
return walkingQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLength() {
|
||||||
|
return definition.map(NpcDefinition::getSize).orElse(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return definition.map(NpcDefinition::getSize).orElse(1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether or not this mob has an {@link NpcDefinition}.
|
* Returns whether or not this mob has an {@link NpcDefinition}.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -414,6 +414,16 @@ public final class Projectile extends Entity implements GroupableEntity {
|
|||||||
return EntityType.PROJECTILE;
|
return EntityType.PROJECTILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLength() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hashCode(position, destination, delay, lifetime, target, startHeight,
|
return Objects.hashCode(position, destination, delay, lifetime, target, startHeight,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.apollo.game.model.entity.obj;
|
|||||||
|
|
||||||
import org.apollo.cache.def.ObjectDefinition;
|
import org.apollo.cache.def.ObjectDefinition;
|
||||||
import org.apollo.game.model.Position;
|
import org.apollo.game.model.Position;
|
||||||
|
import org.apollo.game.model.Direction;
|
||||||
import org.apollo.game.model.World;
|
import org.apollo.game.model.World;
|
||||||
import org.apollo.game.model.area.EntityUpdateType;
|
import org.apollo.game.model.area.EntityUpdateType;
|
||||||
import org.apollo.game.model.area.Region;
|
import org.apollo.game.model.area.Region;
|
||||||
@@ -85,6 +86,23 @@ public abstract class GameObject extends Entity implements GroupableEntity {
|
|||||||
return packed >> 2 & 0x3F;
|
return packed >> 2 & 0x3F;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLength() {
|
||||||
|
Direction direction = Direction.WNES[getOrientation()];
|
||||||
|
|
||||||
|
return direction == Direction.WEST || direction == Direction.EAST ?
|
||||||
|
getDefinition().getWidth() : getDefinition().getLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
Direction direction = Direction.WNES[getOrientation()];
|
||||||
|
|
||||||
|
return direction == Direction.WEST || direction == Direction.EAST ?
|
||||||
|
getDefinition().getLength() : getDefinition().getWidth();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return packed;
|
return packed;
|
||||||
@@ -109,5 +127,4 @@ public abstract class GameObject extends Entity implements GroupableEntity {
|
|||||||
* @return {@code true} if the Player can see this GameObject, {@code false} if not.
|
* @return {@code true} if the Player can see this GameObject, {@code false} if not.
|
||||||
*/
|
*/
|
||||||
public abstract boolean viewableBy(Player player, World world);
|
public abstract boolean viewableBy(Player player, World world);
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user