/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.types; import com.badlogic.gdx.utils.Array; import com.happydroids.droidtowers.TowerConsts; import com.happydroids.droidtowers.entities.*; import com.happydroids.droidtowers.grid.GameGrid; import com.happydroids.droidtowers.math.GridPoint; public class ServiceRoomType extends CommercialType { public ServiceRoomType() { statsLine = null; } @Override public GridObject makeGridObject(GameGrid gameGrid) { if (this.provides(ProviderType.RESTROOM)) { return new PublicRestroom(this, gameGrid); } else if (this.provides(ProviderType.PARKING_RAMP)) { return new ParkingGarageRamp(this, gameGrid); } else if (this.provides(ProviderType.PARKING_SPACE)) { return new ParkingGarageSpace(this, gameGrid); } return new ServiceRoom(this, gameGrid); } @Override public boolean canBeAt(GridObject gridObject) { if (gridObject.provides(ProviderType.PARKING) && checkForOverlap(gridObject)) { if (gridObject.provides(ProviderType.PARKING_SPACE)) { // check single point to the left GridPoint objectGridPoint = gridObject.getPosition().cpy(); if (checkPointForProviderType(gridObject, objectGridPoint.sub(1, 0), ProviderType.PARKING)) { return true; } // check single point to the right if (checkPointForProviderType(gridObject, objectGridPoint.add(2, 0), ProviderType.PARKING)) { return true; } return false; } else if (gridObject.provides(ProviderType.PARKING_RAMP)) { int yPos = gridObject.getPosition().y; if (yPos == TowerConsts.LOBBY_FLOOR) { return true; } else { GridPoint objectGridPoint = gridObject.getPosition().cpy(); // check below Array<GridObject> gridObjects = gridObject.getGameGrid() .positionCache() .getObjectsAt(objectGridPoint.sub(0, 1), gridObject.getSize(), gridObject); for (GridObject object : gridObjects) { if (object.provides(ProviderType.PARKING_RAMP) && object.getPosition().x == gridObject.getPosition().x) { return true; } } // check above gridObjects = gridObject.getGameGrid() .positionCache() .getObjectsAt(objectGridPoint.add(0, 2), gridObject.getSize(), gridObject); for (GridObject object : gridObjects) { if (object.provides(ProviderType.PARKING_RAMP) && object.getPosition().x == gridObject.getPosition().x) { return true; } } return false; } } } return super.canBeAt(gridObject); } private boolean checkPointForProviderType(GridObject gridObject, GridPoint gridPoint, final ProviderType providerType) { Array<GridObject> gridObjects = gridObject.getGameGrid() .positionCache() .getObjectsAt(gridPoint, TowerConsts.SINGLE_POINT, gridObject); if (gridObjects.size > 0) { for (GridObject object : gridObjects) { if (object.provides(providerType)) { return true; } } } return false; } }