package fight3D;
import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsConfiguration;
import java.util.ArrayList;
import framework.RWT.RWTContainer;
import framework.RWT.RWTLabel;
import framework.RWT.RWTLine;
import framework.RWT.RWTSelectionCanvas3D;
import framework.RWT.RWTVirtualController;
import framework.RWT.RWTVirtualKey;
import framework.model3D.BaseObject3D;
public class CharacterSelectContainer extends RWTContainer {
/**
*
*/
private static final long serialVersionUID = 8354537837334374243L;
Game game;
static final int PLAYER_NUM = 2; // 総プレイヤー数
private RWTSelectionCanvas3D objectCanvas;
private boolean flag = false; // 確認画面のフラグ
private ArrayList<Character> characters = new ArrayList<Character>();
private int pn = 0;
private int character[] = new int[PLAYER_NUM];
protected RWTLabel activatedLabel = new RWTLabel();
private RWTLabel s1 = new RWTLabel();
private RWTLabel s2 = new RWTLabel();
private RWTLabel m5 = new RWTLabel();
private RWTLabel m6 = new RWTLabel();
private RWTLine l1 = new RWTLine();
private RWTLine l2 = new RWTLine();
// コンストラクタ
public CharacterSelectContainer(Game g) {
game = g;
}
// フレームに追加してサイズが確定した後に中身を構築する
public void build(GraphicsConfiguration gc) {
// 初期化
removeAll();
setBackground(Color.BLACK);
// キャラクターを描画するためのキャンバス(相対的キャンバス)を追加
objectCanvas = new RWTSelectionCanvas3D();
objectCanvas.setRelativePosition(0.03f, 0.675f);
objectCanvas.setRelativeSize(0.25f, 0.3f);
addCanvas(objectCanvas);
//画面タイトル、戻るアイコン、メッセージエリア・1
s1.setRelativePosition(0.20f,0.10f);
s1.setString("「キャラクター選択」");
s1.setColor(Color.WHITE);
Font f1 = new Font("",Font.PLAIN,20);
s1.setFont(f1);
addWidget(s1);
s2.setRelativePosition(0.025f,0.05f);
s2.setString("B:タイトル画面へ");
s2.setColor(Color.WHITE);
Font f2 = new Font("",Font.PLAIN,8);
s2.setFont(f2);
addWidget(s2);
m5.setRelativePosition(0.60f,0.05f);
m5.setString((pn+1) + "Pはキャラクターを選択して下さい。");
m5.setColor(Color.YELLOW);
addWidget(m5);
m6.setRelativePosition(0.60f,0.10f);
m6.setString("A:決定");
m6.setColor(Color.YELLOW);
addWidget(m6);
//全キャラクターの数
int n = CharacterManager.getInstance().getNumberOfCharacters(); //キャラクターの総数
//全キャラクターの登録
for(int i=0;i<n;i++){
characters.add(i, CharacterManager.getInstance().getCharacter(i));
}
//キャラクターボタンの表示
for(int i=0;i<n;i++){
String str = characters.get(i).getName()+ RWTLabel.NEW_PARAGRAPH + characters.get(i).getComment();
CharacterSelectImageButton cb = new CharacterSelectImageButton(str, characters.get(i).getModel(),activatedLabel,i, this);
cb.setString(characters.get(i).getName());
cb.setColor(Color.YELLOW);
cb.setRelativePosition(0.10f + i % 3 * 0.3f, (i / 3 + 1) * 0.3f);
addSelectableWidget(cb, i%3, i/3);
}
//選択キャラクター、メッセージエリア・2
addWidget(activatedLabel);
//ライン
l1.setRelativePosition(0.00f, 0.15f, 1.00f, 0.15f);
l1.setColor(Color.WHITE);
addWidget(l1);
l2.setRelativePosition(0.00f, 0.65f, 1.00f, 0.65f);
l2.setColor(Color.WHITE);
addWidget(l2);
repaint();
}
public void updateObjectCanvas(BaseObject3D o) {
if (objectCanvas != null) objectCanvas.setObject(o);
}
// キーボードを押した瞬間
public void keyPressed(RWTVirtualKey key) {
if (key.getPlayer() == -1) {
key.assignPlayer(1);
}
}
// キーボードを離した瞬間
public void keyReleased(RWTVirtualKey key) {
if (key.getVirtualKey() == RWTVirtualController.UP && pn < PLAYER_NUM)
cursorMoveUp();
if (key.getVirtualKey() == RWTVirtualController.DOWN
&& pn < PLAYER_NUM)
cursorMoveDown();
if (key.getVirtualKey() == RWTVirtualController.RIGHT
&& pn < PLAYER_NUM)
cursorMoveRight();
if (key.getVirtualKey() == RWTVirtualController.LEFT
&& pn < PLAYER_NUM)
cursorMoveLeft();
if (key.getVirtualKey() == RWTVirtualController.BUTTON_A) {
// キャラクター番号を入力
if (pn < 2) {
character[pn] = ((CharacterSelectImageButton) getSelectedWidget()).number;
// 選択したキャラクターの番号
pn++; // プレイヤーの追加
m5.setString((pn + 1) + "Pはキャラクターを選択して下さい。");
addWidget(m5);
repaint();
}
// 確認画面
if (pn == PLAYER_NUM) {
s2.setString("");
addWidget(s2);
m5.setString("これでよろしいですか。");
addWidget(m5);
m6.setString("A:決定 B:戻る");
addWidget(m6);
repaint();
if (flag == true) {
// 次の画面へ
game.goNextGameState();
game.setPlayerNum(pn);
game.setCharacter(character);
}
flag = true;
}
}
if (key.getVirtualKey() == RWTVirtualController.BUTTON_B) {
// 確認画面
if (flag == true) {
pn = 0; // 入力した情報を初期化
s2.setString("B:タイトル画面へ");
addWidget(s2);
m5.setString((pn + 1) + "Pはキャラクターを選択して下さい。");
addWidget(m5);
m6.setString("A:決定");
addWidget(m6);
repaint();
flag = false;
} else {
game.goPrevGameState();
}
}
}
// キーボードを押して離す
public void keyTyped(RWTVirtualKey key) {
}
}