Y2S1-Seabed_Explorer/src/seabedexplorer/submersible/state/states/IdleState.java
2020-06-07 22:14:52 +01:00

135 lines
3.6 KiB
Java

package seabedexplorer.submersible.state.states;
import seabedexplorer.submersible.Submersible;
import seabedexplorer.submersible.equipment.locationtracking.Location;
import seabedexplorer.submersible.state.SubmersibleState;
import seabedexplorer.submersible.state.states.BusyActionState;
import seabedexplorer.submersible.state.states.BusyMoveState;
import seabedexplorer.submersible.state.states.DockedState;
import seabedexplorer.util.movement.MovementEmulation;
public class IdleState implements SubmersibleState
{
private Submersible subContext;
private MovementEmulation ME;
@Override
public boolean move(Location loc)
{
ME = new MovementEmulation(subContext, loc);
subContext.changeState(new BusyMoveState(ME));
ME.move();
//Wait for thread to finish
try
{
ME.getThread().join();
}
catch (Exception e)
{
System.out.println("Failed to Join Thread.");
}
//Change state to idle, since movement has finished
subContext.changeState(new IdleState());
return true;
}
@Override
public boolean stopMove()
{
System.out.println("Not currently moving, cannot stop the movement.");
return false;
}
@Override
public boolean canMove()
{
return true;
}
@Override
public void submersibleInstance(Submersible submersible)
{
subContext = submersible;
}
@Override
public String toString()
{
return "Idle";
}
@Override
public boolean returnToVessel()
{
//Location of the vessel is implied 0, 0, 0, as this is where a sub starts.
ME = new MovementEmulation(subContext, new Location(0, 0, 0));
//Change context to BusyMoveState as the sub is moving
subContext.changeState(new BusyMoveState(ME));
ME.move();
//Wait for thread to finish
try
{
ME.getThread().join();
}
catch (Exception e)
{
System.out.println("Failed to Join Thread.");
}
//Change state to Docked
subContext.changeState(new DockedState());
return true;
}
@Override
public boolean collectWater()
{
//Change state to BusyAction
subContext.changeState(new BusyActionState());
//Do data collection
subContext.update("ph");
subContext.update("refraction");
subContext.update("salinity");
//Change state to InventoryFull, since it has just used the collection.
subContext.changeState(new InventoryFullState());
return true;
}
@Override
public boolean collectMaterial()
{
//Change state to BusyAction
subContext.changeState(new BusyActionState());
//Do data collection
subContext.update("scan");
subContext.update("fluid");
subContext.update("drill");
try
{
Thread.sleep(2000);
}
catch(Exception e)
{
System.out.println("Thread failed to sleep.");
}
//Change state to InventoryFull, since it has just used the collection.
subContext.changeState(new InventoryFullState());
return true;
}
@Override
public boolean collectMappingData()
{
//Change state to BusyAction
subContext.changeState(new BusyActionState());
//Do data collection
subContext.update("laser");
subContext.update("sonar");
//Change state to Idle since this doesn't use inventory space.
subContext.changeState(new IdleState());
return true;
}
}