// Path: src/util/UDim.java
// public class UDim {
// 	public UDim() {
// 		this(0, 0, 0, 0);
// 	}
// 	public UDim(FVec offset) {
// 		this(offset.getX(), offset.getY(), 0, 0);
// 	}
// 	public UDim(float offsetx, float offsety) {
// 		this(offsetx, offsety, 0, 0);
// 	}
// 	public UDim(FVec offset, FVec scale) {
// 		this(offset.getX(), offset.getY(), scale.getX(), scale.getY());
// 	}
// 	public UDim(float offsetx, float offsety, float scalex, float scaley) {
// 		mXOffset = offsetx;
// 		mYOffset = offsety;
// 		mXScale = scalex;
// 		mYScale = scaley;
// 	}
// 	
// 	public FVec getOffset() {
// 		return new FVec(mXOffset, mYOffset);
// 	}
// 	
// 	public float getXOffset() {
// 		return mXOffset;
// 	}
// 
// 	public float getYOffset() {
// 		return mYOffset;
// 	}
// 	
// 	public FVec getScale() {
// 		return new FVec(mXScale, mYScale);
// 	}
// 
// 	public float getXScale() {
// 		return mXScale;
// 	}
// 
// 	public float getYScale() {
// 		return mYScale;
// 	}
// 
// 	private float mXOffset, mYOffset, mXScale, mYScale;
// }
// 
// Path: src/game/Agent.java
// public static enum TurnState {
// 	Ready,	//ready to move
// 	Moved,	//moved
// 	Done,	//used ability
// }
// 
// Path: src/game/AgentInfo.java
// public static abstract class Ability {
// 	public abstract void apply(Agent src, Agent target, Vec trg);
// 	public abstract void select(Agent src);
// 	public abstract int range();
// 	public abstract int damage();
// 	public abstract int minSize();
// 	public final String getName() {
// 		return mName;
// 	}
// 	public final String getDesc() {
// 		return mDesc;
// 	}
// 	public final void setName(String s) {
// 		mName = s;
// 	}
// 	public final void setDesc(String s) {
// 		mDesc = s;
// 	}
// 	private String mDesc = "";
// 	private String mName = "";
// }
// 
// Path: src/game/NodeMap.java
// public static class Node {
// 	public static enum Type {
// 		Warez,
// 		Battle;
// 	}
// 	public static enum Status {
// 		Unknown,
// 		Visible, Open,
// 		Defeated;
// 	}
// 	public void setDefeated() {
// 		NStatus = Status.Defeated;
// 		for (Node n : Adjacent) {
// 			if (n.NStatus == Status.Unknown || n.NStatus == Status.Visible)
// 				n.NStatus = Status.Open;
// 		}
// 	}
// 	public void setVisible() {
// 		NStatus = Status.Visible;
// 	}
// 	public void setOpen() {
// 		NStatus = Status.Open;
// 	}
// 	public boolean isOpen() {
// 		return NStatus == Status.Defeated || NStatus == Status.Open;
// 	}
// 	public String Name;
// 	public DataBattleInfo DataBattle;
// 	public List<WarezItem> Warez;
// 	public Type NType;
// 	public Status NStatus;
// 	public String Title;
// 	public String Desc;
// 	public Image Image;
// 	public Image DarkImage;
// 	public Vec Pos;
// 	public ArrayList<Node> Adjacent = new ArrayList<Node>();
// 	public int GroupId;
// }
// 
// Path: src/gui/WidgetRoot.java
// public class WidgetRoot extends Widget {
// 	public void invokeLayout(Vec windowsize) {
// 		setSize(new UDim(windowsize.fvec()));
// 		internalOnLayout(true);
// 	}
// 	
// 	public void invokeRender(RenderTarget t) {
// 		internalOnRender(t);
// 	}
// 	
// 	public void invokeEvent(Event e) {
// 		Input in = e.getInput();
// 		in.setPrevMouseTarget();
// 		//
// 		if (e.getEventType() == EventType.Key) {
// 			if (in.getKeyTarget() == null) {
// 				internalOnEvent(e);
// 			} else {
// 				KeyEvent ke = (KeyEvent)e;
// 				switch (ke.getKeyEventType()) {
// 				case Press:
// 					in.getKeyTarget().onKeyDown.fire(ke);
// 					break;
// 				case Release:
// 					in.getKeyTarget().onKeyUp.fire(ke);
// 					break;
// 				}
// 			}
// 		} else {
// 			internalOnEvent(e);
// 		}
// 		//
// 		if (in.getMouseTarget() != in.getPrevMouseTarget()) {
// 			if (in.getPrevMouseTarget() != null)
// 				in.getPrevMouseTarget().onMouseLeave.fire(new MouseEvent(MouseEventType.Leave, in));
// 			if (in.getMouseTarget() != null)
// 				in.getMouseTarget().onMouseEnter.fire(new MouseEvent(MouseEventType.Enter, in));
// 		}
// 	}
// }


import java.awt.Color;
import java.util.ArrayList;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import util.UDim;
import game.Agent.TurnState;
import game.AgentInfo.Ability;
import game.NodeMap.Node;
import gui.WidgetRoot;
import json.*;
		MessageInfo msg = getMessageLibrary().getMessageToShowOnEvent("defeat", battle.getInfo().getName());
		if (msg != null) {
			newMessage(msg);
		}
	}

	public void newMessage(MessageInfo msg) {
		mNewMessages.add(msg);
	}

	public Inventory getInventory() {
		return mInventory;
	}
	
	public AgentLibrary getAgentLibrary() {
		return mAgentLibrary;
	}
	
	public DataBattleLibrary getDataBattleLibrary() {
		return mDataBattleLibrary;
	}

	public MessageLibrary getMessageLibrary() {
		return mMessageLibrary;
	}

	public ArrayList<MessageInfo> getNewMessages() {
		return mNewMessages;
	}

// Path: src/util/UDim.java
// public class UDim {
// 	public UDim() {
// 		this(0, 0, 0, 0);
// 	}
// 	public UDim(FVec offset) {
// 		this(offset.getX(), offset.getY(), 0, 0);
// 	}
// 	public UDim(float offsetx, float offsety) {
// 		this(offsetx, offsety, 0, 0);
// 	}
// 	public UDim(FVec offset, FVec scale) {
// 		this(offset.getX(), offset.getY(), scale.getX(), scale.getY());
// 	}
// 	public UDim(float offsetx, float offsety, float scalex, float scaley) {
// 		mXOffset = offsetx;
// 		mYOffset = offsety;
// 		mXScale = scalex;
// 		mYScale = scaley;
// 	}
// 	
// 	public FVec getOffset() {
// 		return new FVec(mXOffset, mYOffset);
// 	}
// 	
// 	public float getXOffset() {
// 		return mXOffset;
// 	}
// 
// 	public float getYOffset() {
// 		return mYOffset;
// 	}
// 	
// 	public FVec getScale() {
// 		return new FVec(mXScale, mYScale);
// 	}
// 
// 	public float getXScale() {
// 		return mXScale;
// 	}
// 
// 	public float getYScale() {
// 		return mYScale;
// 	}
// 
// 	private float mXOffset, mYOffset, mXScale, mYScale;
// }
// 
// Path: src/game/Agent.java
// public static enum TurnState {
// 	Ready,	//ready to move
// 	Moved,	//moved
// 	Done,	//used ability
// }
// 
// Path: src/game/AgentInfo.java
// public static abstract class Ability {
// 	public abstract void apply(Agent src, Agent target, Vec trg);
// 	public abstract void select(Agent src);
// 	public abstract int range();
// 	public abstract int damage();
// 	public abstract int minSize();
// 	public final String getName() {
// 		return mName;
// 	}
// 	public final String getDesc() {
// 		return mDesc;
// 	}
// 	public final void setName(String s) {
// 		mName = s;
// 	}
// 	public final void setDesc(String s) {
// 		mDesc = s;
// 	}
// 	private String mDesc = "";
// 	private String mName = "";
// }
// 
// Path: src/game/NodeMap.java
// public static class Node {
// 	public static enum Type {
// 		Warez,
// 		Battle;
// 	}
// 	public static enum Status {
// 		Unknown,
// 		Visible, Open,
// 		Defeated;
// 	}
// 	public void setDefeated() {
// 		NStatus = Status.Defeated;
// 		for (Node n : Adjacent) {
// 			if (n.NStatus == Status.Unknown || n.NStatus == Status.Visible)
// 				n.NStatus = Status.Open;
// 		}
// 	}
// 	public void setVisible() {
// 		NStatus = Status.Visible;
// 	}
// 	public void setOpen() {
// 		NStatus = Status.Open;
// 	}
// 	public boolean isOpen() {
// 		return NStatus == Status.Defeated || NStatus == Status.Open;
// 	}
// 	public String Name;
// 	public DataBattleInfo DataBattle;
// 	public List<WarezItem> Warez;
// 	public Type NType;
// 	public Status NStatus;
// 	public String Title;
// 	public String Desc;
// 	public Image Image;
// 	public Image DarkImage;
// 	public Vec Pos;
// 	public ArrayList<Node> Adjacent = new ArrayList<Node>();
// 	public int GroupId;
// }
// 
// Path: src/gui/WidgetRoot.java
// public class WidgetRoot extends Widget {
// 	public void invokeLayout(Vec windowsize) {
// 		setSize(new UDim(windowsize.fvec()));
// 		internalOnLayout(true);
// 	}
// 	
// 	public void invokeRender(RenderTarget t) {
// 		internalOnRender(t);
// 	}
// 	
// 	public void invokeEvent(Event e) {
// 		Input in = e.getInput();
// 		in.setPrevMouseTarget();
// 		//
// 		if (e.getEventType() == EventType.Key) {
// 			if (in.getKeyTarget() == null) {
// 				internalOnEvent(e);
// 			} else {
// 				KeyEvent ke = (KeyEvent)e;
// 				switch (ke.getKeyEventType()) {
// 				case Press:
// 					in.getKeyTarget().onKeyDown.fire(ke);
// 					break;
// 				case Release:
// 					in.getKeyTarget().onKeyUp.fire(ke);
// 					break;
// 				}
// 			}
// 		} else {
// 			internalOnEvent(e);
// 		}
// 		//
// 		if (in.getMouseTarget() != in.getPrevMouseTarget()) {
// 			if (in.getPrevMouseTarget() != null)
// 				in.getPrevMouseTarget().onMouseLeave.fire(new MouseEvent(MouseEventType.Leave, in));
// 			if (in.getMouseTarget() != null)
// 				in.getMouseTarget().onMouseEnter.fire(new MouseEvent(MouseEventType.Enter, in));
// 		}
// 	}
// }


// Path: src/game/GameSession.java
import java.awt.Color;
import java.util.ArrayList;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import util.UDim;
import game.Agent.TurnState;
import game.AgentInfo.Ability;
import game.NodeMap.Node;
import gui.WidgetRoot;
import json.*;

		MessageInfo msg = getMessageLibrary().getMessageToShowOnEvent("defeat", battle.getInfo().getName());
		if (msg != null) {
			newMessage(msg);
		}
	}

	public void newMessage(MessageInfo msg) {
		mNewMessages.add(msg);
	}

	public Inventory getInventory() {
		return mInventory;
	}
	
	public AgentLibrary getAgentLibrary() {
		return mAgentLibrary;
	}
	
	public DataBattleLibrary getDataBattleLibrary() {
		return mDataBattleLibrary;
	}

	public MessageLibrary getMessageLibrary() {
		return mMessageLibrary;
	}

	public ArrayList<MessageInfo> getNewMessages() {
		return mNewMessages;
	}

	public void setGuiRoot(WidgetRoot r) {