Controller.scala
package com.halcat.game import org.lwjgl.input._ import org.lwjgl.util.input._ import org.eclipse.swt._ import events._ import layout._ import widgets._ object Controller { private var controller: Controller = _ def create { Controllers.create val display = new Display val shell = new Shell(display, SWT.DIALOG_TRIM) val count = Controllers.getControllerCount var index = 0 if (count != 0) { shell.setLayout(new GridLayout(1, false)) shell.setText("コントローラーの選択") val label = new Label(shell, SWT.CENTER) label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)) label.setText("使用するコントローラーを選択してください。") label.pack val group = new Group(shell, SWT.SHADOW_OUT) group.setLayout(new FillLayout(SWT.VERTICAL)) for (i <- 0 to count) { val radioButton = new Button(group, SWT.RADIO) if (i == 0) radioButton.setSelection(true) if (i == count) radioButton.setText("何も選択しない") else radioButton.setText(Controllers.getController(i) .getName) radioButton.addSelectionListener(new SelectionAdapter { override def widgetSelected(e: SelectionEvent) { index = i } }) radioButton.pack } group.pack val okButton = new Button(shell, SWT.PUSH) okButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)) okButton.setText("OK") okButton.addSelectionListener(new SelectionAdapter { override def widgetSelected(e: SelectionEvent) { shell.dispose } }) okButton.pack shell.pack shell.open while (!shell.isDisposed) if (!display.readAndDispatch) display.sleep display.dispose controller = if (index != count) Controllers.getController(index) else new ControllerAdapter } else { controller = new ControllerAdapter } } def destroy = Controllers.destroy def poll = Controllers.poll }
認識したコントローラーの名前を表示し、選択したラジオボタンのインデックスからコントロラーを作成しています。
ACT3D.initの先頭にController.createを追加し、ACT3D.cleanupにController.destroyを追加します。
実行すると、
このようなウィンドウが表示され、コントローラーを選択できるようになります。
「何も選択しない」を選ぶと、controllerにはダミーが入れられます。
controllerにダミーが入っている場合は、キーボード操作になる予定です。
このプログラムにはSWTが使われていますが、LWJGLが環境依存なので、それに合わせて使っているだけです。
SwingやAWTでも特に問題はないです。
読み込み中
クリックでキャンセルします
画像が存在しません
0 件のコメント:
コメントを投稿