/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.grid; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.happydroids.droidtowers.employee.JobCandidate; import com.happydroids.droidtowers.entities.CommercialSpace; import com.happydroids.droidtowers.entities.Elevator; import com.happydroids.droidtowers.entities.GridObject; import com.happydroids.droidtowers.math.GridPoint; import com.happydroids.droidtowers.types.GridObjectType; import com.happydroids.droidtowers.types.GridObjectTypeFactory; import com.happydroids.droidtowers.types.ProviderType; import java.util.List; @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) public class GridObjectState { private String typeId; private GridPoint position; private GridPoint size; private String name; private int variationId; private int loanFromCousinVinnie; private List<JobCandidate> employees; private int numberOfElevatorCars; public GridObjectState() { } public GridObjectState(GridObject gridObject) { typeId = gridObject.getGridObjectType().getId(); position = gridObject.getPosition(); size = gridObject.getSize(); name = gridObject.hasCustomName() ? gridObject.getName() : null; variationId = gridObject.getVariationId(); loanFromCousinVinnie = gridObject.getAmountLoanedFromCousinVinnie(); if (gridObject instanceof Elevator) { numberOfElevatorCars = ((Elevator) gridObject).getNumElevatorCars(); } } public GridObject materialize(GameGrid gameGrid) { GridObjectType objectType = GridObjectTypeFactory.findTypeById(typeId); if (objectType != null) { GridObject object = objectType.makeGridObject(gameGrid); if (object != null) { if (name != null) { object.setName(name); } object.setPosition(position.x, position.y); object.setSize(size.x, size.y); object.setPlaced(true); if (variationId > 0) { object.setVariationId(variationId); } object.addLoanFromCousinVinnie(loanFromCousinVinnie); if (object instanceof Elevator) { ((Elevator) object).setNumElevatorCars(numberOfElevatorCars); } object.updateSprite(); gameGrid.addObject(object); return object; } } throw new RuntimeException("Cannot find type: " + typeId); } }