コントローラーを作成、選択するために以下のものを作成しました。
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でも特に問題はないです。
読み込み中
クリックでキャンセルします