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) { } }