3D spaceshooter with online scoreboard, online demos, ship building. Now entirely defunct, but might be resurrected
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
sector/src/net/sector/level/ship/DiscoveryTable.java

141 lines
3.1 KiB

package net.sector.level.ship;
import java.util.HashMap;
import java.util.Map;
import net.sector.util.Log;
/**
* Table of discoveries
*
* @author Ondřej Hruška (MightyPork)
*/
public class DiscoveryTable extends HashMap<String, Integer> {
/**
* Table of discoveries - empty
*/
public DiscoveryTable() {}
/**
* Table of discoveries - as copy of other map
*
* @param copied copied map of discovery levels
*/
public DiscoveryTable(Map<String, Integer> copied) {
super(copied);
}
/**
* Check if piece is discovered
*
* @param pieceName piece name
* @return is discovered
*/
public boolean isPieceDiscovered(String pieceName) {
return getDiscoveryLevelForPiece(pieceName) > 0;
}
/**
* Check if piece is discovered
*
* @param discovery discovery
* @return is discovered
*/
public boolean isDiscovered(String discovery) {
return getDiscoveryLevel(discovery) > 0;
}
/**
* Get discovery level for piece name
*
* @param pieceName piece name
* @return max level discovered
*/
public int getDiscoveryLevelForPiece(String pieceName) {
String discovery = PieceRegistry.getPieceDiscoveryKey(pieceName);
return getDiscoveryLevel(discovery);
}
/**
* Get discovered level for discovery key
*
* @param discovery discovery key
* @return level
*/
public int getDiscoveryLevel(String discovery) {
if (!containsKey(discovery)) {
Log.w("DiscoveryTable: requested discovery level of unregistered discovery " + discovery);
return 0;
}
return get(discovery);
}
/**
* Set discovery level (when building table)
*
* @param discovery discovery key
* @param levelToSet levels discovered total to set
*/
public void setDiscoveryLevel(String discovery, int levelToSet) {
int level = DiscoveryRegistry.clampLevel(discovery, levelToSet);
put(discovery, level);
}
/**
* Add discovery levels (when artifact is collected)
*
* @param discovery discovery key
* @param levelsToAdd new levels discovered
*/
public void addDiscoveryLevel(String discovery, int levelsToAdd) {
int level = getDiscoveryLevel(discovery);
setDiscoveryLevel(discovery, level + levelsToAdd);
}
/**
* Get copy
*
* @return copy
*/
public DiscoveryTable copy() {
return new DiscoveryTable(this);
}
/**
* Get max level a discovery can reach (total limit)
*
* @param discovery discovery id
* @return the limit
*/
public static int getDiscoveryLevelMax(String discovery) {
return DiscoveryRegistry.getDiscoveryLevelRange(discovery).getMaxI();
}
/**
* Get if discovery is available for discovering (if dependencies are met)
*
* @param discovery discovery id
* @return is available
*/
public boolean isDiscoveryAvailable(String discovery) {
return DiscoveryRegistry.isDiscoveryAvailable(discovery, this);
}
/**
* Get if can discover given discovery (if it makes sense to spend artifact
* on this)
*
* @param discovery discovery id
* @return can be discovered
*/
public boolean canDiscover(String discovery) {
if (!isDiscoveryAvailable(discovery)) return false;
return getDiscoveryLevel(discovery) < getDiscoveryLevelMax(discovery);
}
}