package com.aionemu.gameserver.dataholders;
import gnu.trove.THashMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlIDREF;
import javax.xml.bind.annotation.XmlRootElement;
import com.aionemu.gameserver.model.PlayerClass;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.templates.item.ItemTemplate;
/**
* This table contains all nesessary data for new players.
* <br/>
* Created on: 09.08.2009 18:20:41
*
* @author Aquanox
*/
@XmlRootElement(name="player_initial_data")
@XmlAccessorType(XmlAccessType.FIELD)
public class PlayerInitialData
{
@XmlElement(name="player_data")
private List<PlayerCreationData> dataList = new ArrayList<PlayerCreationData>();
@XmlElement(name="elyos_spawn_location", required = true)
private LocationData elyosSpawnLocation;
@XmlElement(name="asmodian_spawn_location", required = true)
private LocationData asmodianSpawnLocation;
private THashMap<PlayerClass, PlayerCreationData> data = new THashMap<PlayerClass, PlayerCreationData>();
void afterUnmarshal(Unmarshaller u, Object parent)
{
for (PlayerCreationData pt : dataList)
{
data.put(pt.getRequiredPlayerClass(), pt);
}
dataList.clear();
dataList = null;
}
public PlayerCreationData getPlayerCreationData(PlayerClass cls)
{
return data.get(cls);
}
public int size()
{
return data.size();
}
public LocationData getSpawnLocation(Race race)
{
switch(race)
{
case ASMODIANS:
return asmodianSpawnLocation;
case ELYOS:
return elyosSpawnLocation;
default:
throw new IllegalArgumentException();
}
}
/**
* Player creation data holder.
*/
public static class PlayerCreationData
{
@XmlAttribute(name="class")
private PlayerClass requiredPlayerClass;
@XmlElement(name="items")
private ItemsType itemsType;
// @XmlElement(name="shortcuts")
// private ShortcutType shortcutData;
PlayerClass getRequiredPlayerClass()
{
return requiredPlayerClass;
}
public List<ItemType> getItems()
{
return Collections.unmodifiableList(itemsType.items);
}
static class ItemsType
{
@XmlElement(name = "item")
public List<ItemType> items = new ArrayList<ItemType>();
}
public static class ItemType
{
@XmlAttribute(name = "id")
@XmlIDREF
public ItemTemplate template;
@XmlAttribute(name="count")
public int count;
public ItemTemplate getTemplate()
{
return template;
}
public int getCount()
{
return count;
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder();
sb.append("ItemType");
sb.append("{template=").append(template);
sb.append(", count=").append(count);
sb.append('}');
return sb.toString();
}
}
// public static class ShortcutType
// {
// public List<Shortcut> shortcuts;
// }
}
/**
* Location data holder.
*/
public static class LocationData
{
@XmlAttribute(name="map_id")
private int mapId;
@XmlAttribute(name="x")
private float x;
@XmlAttribute(name="y")
private float y;
@XmlAttribute(name="z")
private float z;
@XmlAttribute(name="heading")
private byte heading;
LocationData() {
//
}
public int getMapId()
{
return mapId;
}
public float getX()
{
return x;
}
public float getY()
{
return y;
}
public float getZ()
{
return z;
}
public byte getHeading()
{
return heading;
}
}
}