group1.model
Class Environment

java.lang.Object
  extended by group1.model.Environment

public class Environment
extends java.lang.Object

An environment, or a level, that contains a list of game objects. (Terrain, enemies, Jeff, etc.) In other words, the various areas in which the action will take place.

This class no longer uses a discrete grid to store the objects. Instead, it handles everything using double values. (It does, however, use a grid to optimize hit detection. In theory, it should be making all of the accessor and informative functions roughly O(1), which is no small joke. And, the time click should only be O(n).)

Note that this class and the GameObj classes technically store the data upside-down. Java treats the y-axis as top-to-bottom, which is too confusing for actual physics calculations. So, we make all calculations as though it's represented from bottom-to-top, then reverse the values later.

Also, a note on intersection: Objects actually need to sit within each other ever so slightly. See, Rectangle2D.intersects() doesn't work unless they intersect. So, if an object is moved completely outside of an object it hits, those objects are no longer touching. This can cause glitchy effects with walls and ceilings, and completely breaks any concept of standing on the floor.


Constructor Summary
Environment()
          Default constructor.
Environment(Jeff jef, java.lang.String filename, PictureList[] pictureCache)
          Constructor.
 
Method Summary
 void addObject(GameObj obj)
          Add an object.
 void addObject(GameObj obj, double x, double y)
          Add object, with the position explicitly defined by the caller.
 void addObject(GameObj obj, GameObj creatorObj)
          Add an object, with the position defined as being the position of the object that "created" or "threw" it.
 double getGravity()
          Get the gravity from the environment.
 XYPair getGroundVelocity(GameObj obj)
          Check whether or not an object is on ground that it can walk on, AND return the velocity of the ground if it's on ground.
 double getHeight()
          Return the "true" height of the Environment.
 XYPair getJeffsPosition()
          Get Jeff's position.
 GameObj getObject(int i)
          Return the specified object in the environment.
 java.util.List<GameObj> getObjectList()
          Return the full list of objects in the Environment.
 int getObjectListSize()
          Return the size of the list of all objects in the environment.
 double getWidth()
          Return the "true" width of the Environment.
 boolean isObjectNearLadder(GameObj obj)
          Check whether or not an object is close enough to a ladder to grab it.
 boolean isObjectOnGround(GameObj obj)
          Check whether or not an object is on ground that it can walk on.
 void setGravity(double grav)
          Set the gravity.
 TimeClickReturn timeClick()
          Calculates and sets the positions and velocities of all objects in the environment, based upon the objects' own movements and hit detection.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Environment

public Environment()
Default constructor.


Environment

public Environment(Jeff jef,
                   java.lang.String filename,
                   PictureList[] pictureCache)
            throws java.io.EOFException,
                   java.io.IOException
Constructor. Constructs a new Environment and initializes it based on the data provided in an environment description file, which contains the length and height of the Environment as well as all initial game objects and their locations. See "example.env" for explanation and an example of the proper format of this text file.

Parameters:
jef - The hero of the game. (The only object that carries over between environments.)
filename - The name of the text file where the Environment is represented.
Throws:
java.io.EOFException - in case of file format error when more data was expected than given in the file.
java.io.IOException - if other input error occurs.
Method Detail

setGravity

public void setGravity(double grav)
Set the gravity. (Otherwise, uses a default value.)

Parameters:
grav - The gravity value. (Should be negative. Unless we're falling up or something...?)

timeClick

public TimeClickReturn timeClick()
Calculates and sets the positions and velocities of all objects in the environment, based upon the objects' own movements and hit detection. Returns a value to indicate if Jeff has died or completed the level.

This should be called by the Game class at each time click.

Returns:
An enum-type value representing the state of gameplay: JEFF_DIED, JEFF_WON, or CONTINUE_PLAYING.

getGroundVelocity

public XYPair getGroundVelocity(GameObj obj)
Check whether or not an object is on ground that it can walk on, AND return the velocity of the ground if it's on ground. Useful for objects that can stand on the ground, and want to conserve momentum and physics properly on platforms. (Due to time constraints, we might only truly implement this for Jeff, since each object has to handle the values themselves.)

Parameters:
obj - The object in question.
Returns:
The velocity of the ground, or null if it is not standing on ground.

isObjectOnGround

public boolean isObjectOnGround(GameObj obj)
Check whether or not an object is on ground that it can walk on. Useful for objects that can stand on the ground.

Parameters:
obj - The object in question.
Returns:
Whether or not that object is on the ground.

isObjectNearLadder

public boolean isObjectNearLadder(GameObj obj)
Check whether or not an object is close enough to a ladder to grab it. (Currently not implemented, and returns false. To be implemented later.)

Parameters:
obj - The object in question.
Returns:
Whether or not the object is near a ladder.

getGravity

public double getGravity()
Get the gravity from the environment. (Generally assumed to be negative.) Useful for any object that is affected by gravity.

Returns:
The gravity value.

getJeffsPosition

public XYPair getJeffsPosition()
Get Jeff's position. Useful for enemy AI.


getObjectList

public java.util.List<GameObj> getObjectList()
Return the full list of objects in the Environment.

Returns:
All the objects.

getObject

public GameObj getObject(int i)
Return the specified object in the environment. (Use with getObjectListSize().) You might pass this directly to the view.

Returns:
The i'th game object in the list.

getObjectListSize

public int getObjectListSize()
Return the size of the list of all objects in the environment. You might pass this directly to the view.

Returns:
The size of the list of game objects.

getHeight

public double getHeight()
Return the "true" height of the Environment.

Returns:
The height as a double value.

getWidth

public double getWidth()
Return the "true" width of the Environment.

Returns:
The width as a double value.

addObject

public void addObject(GameObj obj,
                      GameObj creatorObj)
Add an object, with the position defined as being the position of the object that "created" or "threw" it. Example: An enemy throws, oh, I don't know, a hammer. :) The hammer appears at the same position of the enemy that threw the hammer.

Parameters:
obj - The GameObj being added.
creatorObj - The object "creating" or "throwing" this object.

addObject

public void addObject(GameObj obj,
                      double x,
                      double y)
Add object, with the position explicitly defined by the caller.

Parameters:
obj - The GameObj being added.
x - The x-position of the object.
y - The x-position of the object.

addObject

public void addObject(GameObj obj)
Add an object. NOTE: To use this version safely, you must set the object's position, first! Otherwise, it will have a nonsense position.

Parameters:
obj - The GameObj being added.