/*
 * The MIT License
 *
 * Copyright 2015 Dra.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package hexwarsim.fieldmap;

import java.awt.Graphics2D;
import kinugasa.game.GameConfig;
import kinugasa.game.KinugasaGame;
import kinugasa.game.LockUtil;
import kinugasa.inputDevice.InputState;
import kinugasa.inputDevice.InputType;
import kinugasa.inputDevice.Keys;
import kinugasa.object.Sprite;
import kinugasa.rpgui.FontModel;
import kinugasa.ui.SimpleTextLabelModel;
import kinugasa.ui.TextLabelSprite;

/**
 * 暫定の解説ファイル.そのうち、きちんとしたマニュアルを作りますので。
 * <br>
 *
 * @version 1.0.0 - 2015/10/02<br>
 * @author Dra<br>
 * <br>
 */
//ゲームのメインクラスで、KinugasaGameを継承します
public class SampleGame extends KinugasaGame {

	//メインメソッドはこのように書きます
	public static void main(String[] args) {
		/*
		 * LockUtilは多重起動防止の仕掛けですが、エラーによりゲームが中断した場合にも
		 * ロックファイルが残ってしまうため、全削除してから起動すると便利です。
		 * 多重起動不要な場合は、コンストラクタでGameConfigから設定可能。
		 */
		LockUtil.deleteAllLockFile();
		/*
		 * このように起動します。argsはkinugasa.game.CMDArgsに登録されます。
		 * （しかしこの辺はあんまりテストしていません）
		 */
		new SampleGame().gameStart(args);
	}

	/*
	 * コンストラクタで、GameConfigを送信します。このクラスで、色々な設定ができます。
	 */
	public SampleGame() {
		//GameConfigに限らず、メソッドチェーンやクローンを使って1行であれこれできるクラスが色々あります。
		super(new GameConfig("Game Title"));
	}

	@Override
	protected void startUp() {
		//gameStart後、1度だけ実行されるメソッド
		//ロードとかお勧め。
		
		//画像ロードのサンプル
		//BufferedImage image = ImageUtil.load("hogehoge.png");
		
		//サウンドのサンプル
		//Sound sound = new SoundBuilder("hogehoge.wav").builde().load();
		
		//再現可能なランダムの初期化のサンプル（STGのリプレイとかに使う）
		//kinugasa.util.Random.initSeed(123456789L);
		//kinugasa.util.Random.d6(2);
	}

	@Override
	protected void dispose() {
		//gameExit後、1度だけ実行されるメソッド
	}

	@Override
	protected void update() {
		//ループで実行されるメソッド?（更新処理）

		//キー入力のサンプル。マウスも同じような感じで使えます。ゲームパッドは現在非対応。
		InputState is = InputState.getInstance();
		if (is.isPressed(Keys.ESCAPE, InputType.SINGLE)) {
			gameExit();//ゲームを正規の流れで終了させるメソッド
		}

		//FPSの取りかたのサンプル
		float fps = getGameTimeManager().getFPS();

		//ウインドウサイズの取りかたのサンプル
		int windowWidth = getWindow().getInternalBounds().width;

	}

	@Override
	protected void draw(Graphics2D g) {
		//ループで実行されるメソッド?（描画処理）
		//デフォルトでダブルバッファリングします。
		//なお、update→drawの順で実行されます。

		//スプライト表示のサンプル。色々なサブクラスがあります。
		Sprite sampleSprite = new TextLabelSprite("hogehoge", new SimpleTextLabelModel("LABEL_MODEL", FontModel.DEFAULT), 12, 12, 1, 1);
		sampleSprite.draw(g);
	}
	/*
	 * その他
	
	 * ・リソースについて・・・プロジェクト直下にフォルダを気って配置すると、（たぶん）取れます。
	 * 例：MyProject/resource/image.png　を配置→　ImageUtil.load("resource/image.png")でロード可能
	 * 
	 * ・ロジックのカプセル化をしたい・・・GameLogicとLogicManagerを使ってください。大体動きます
	 * 
	 *　※ほとんどの処理は、１スレッド上で動作しています。勝手に別スレッドを起動するのは、ImageUtil#screenShotくらいのハズ。
	 * そのため、重い処理はFPSに影響します。
	 */

}
