145 lines
5.9 KiB
Text
145 lines
5.9 KiB
Text
import "ssc/common.sun";
|
||
import "ssc-sup39/common.sun";
|
||
// 描画の関数をインポート(対応するGeckoコードも忘れずに!)
|
||
import "ssc-sup39/draw.sun";
|
||
|
||
// 平行移動のための行列(48 byte: 817d0000~817d002f)
|
||
var const mtx = $817d0000;
|
||
// mtxを(dx, dy)=(210, 324)の平行移動行列にする
|
||
setMTX(mtx, MTX_NEW, 210.0, 324.0);
|
||
|
||
while (1) {
|
||
// 線の太さを16にする
|
||
setLineWidth(16);
|
||
|
||
// 描画の座標にmtxを適用する
|
||
setMTX(MTX_LOADIMM, mtx);
|
||
// コントローラ入力の背景となる長方形の描画(描画行列をリセットしない)
|
||
drawRect($0000003f, STROKE_NONE, -8.0, -8.0, 182.0, 112.0, false);
|
||
|
||
/**** メインスティックとCスティックの描画 ****/
|
||
// メインスティック
|
||
var const MStickX = 28.0; // 中心のx座標
|
||
var const MStickY = 42.0; // 中心のy座標
|
||
var const MStickCS = $eeeeeebf; // 輪郭(線)の色
|
||
var const MStickCF = $eeeeeedf; // スティック本体の円(塗りつぶし)の色
|
||
// Cスティック
|
||
var const CStickX = 60.0;
|
||
var const CStickY = 82.0;
|
||
var const CStickCS = $ffd300bf;
|
||
var const CStickCF = $ffd300df;
|
||
// スティック共通
|
||
var const StickRS = 20.0; // (輪郭の)半径
|
||
var const StickRF = 13.0; // (スティック本体の円の)半径
|
||
var const StickRO = 12.0; // スティックの最大移動
|
||
|
||
// メインスティックの輪郭(8角形)
|
||
// 描画の変換表列を【mtx * (半径=StickRS, x座標=MStickX, y座標=MStickY)の行列】にする
|
||
setMTX(MTX_LOADIMM, mtx, StickRS, MStickX, MStickY);
|
||
// mtx*(MStickX, MStickY)で半径StickRSの8角形・MStickCS色の輪郭(stroke)が描画される
|
||
drawNgon(FILL_NONE, MStickCS, 8);
|
||
|
||
// Cスティックの輪郭(8角形)
|
||
setMTX(MTX_LOADIMM, mtx, StickRS, CStickX, CStickY);
|
||
drawNgon(FILL_NONE, CStickCS, 8);
|
||
|
||
// メインスティック本体(円->32角形で近似)
|
||
setMTX(MTX_LOADIMM, mtx, StickRF,
|
||
// readRAM(addrMStickX, TYPE_FLOAT)でメインスティック入力(0.0~1.0)を読み込む
|
||
// 入力が1.0の時に中心(MStickX)からStickROだけ平行移動させる
|
||
MStickX+readRAM(addrMStickX, TYPE_FLOAT)*StickRO,
|
||
// 上が負であることに注意
|
||
MStickY-readRAM(addrMStickY, TYPE_FLOAT)*StickRO
|
||
);
|
||
drawNgon(MStickCF, STROKE_NONE, 32);
|
||
|
||
// Cスティック本体(円->32角形で近似)
|
||
setMTX(MTX_LOADIMM, mtx, StickRF,
|
||
CStickX+readRAM(addrCStickX, TYPE_FLOAT)*StickRO,
|
||
CStickY-readRAM(addrCStickY, TYPE_FLOAT)*StickRO
|
||
);
|
||
drawNgon(CStickCF, STROKE_NONE, 32);
|
||
|
||
/**** ボタンの描画 ****/
|
||
// ボタン入力(16bit)
|
||
var btn = readRAM(addrButton, 16);
|
||
var const AButtonX = 134.0;
|
||
var const AButtonY = 56.0;
|
||
var const AButtonR = 18.0;
|
||
var const AButtonC = $2ee5b8bf;
|
||
var const BButtonX = 109.0;
|
||
var const BButtonY = 79.0;
|
||
var const BButtonR = 9.0;
|
||
var const BButtonC = $ff1a1abf;
|
||
|
||
// Aボタンの輪郭と本体(24角形で円を近似)
|
||
setMTX(MTX_LOADIMM, mtx, AButtonR, AButtonX, AButtonY);
|
||
// [Aが押された場合 ? AButtonC色で塗りつぶす : 塗りつぶしなし]
|
||
drawNgon([btn&PRESS_A ? AButtonC : FILL_NONE], AButtonC, 24);
|
||
// Bボタンの輪郭と本体(16角形で円を近似)
|
||
setMTX(MTX_LOADIMM, mtx, BButtonR, BButtonX, BButtonY);
|
||
drawNgon([btn&PRESS_B ? BButtonC : FILL_NONE], BButtonC, 16);
|
||
|
||
var const XButtonX = 160.0;
|
||
var const XButtonY = 40.0;
|
||
var const XButtonR = 8.0;
|
||
var const XButtonC = $eeeeeebf;
|
||
var const YButtonX = 115.0;
|
||
var const YButtonY = 31.0;
|
||
var const YButtonR = 8.0;
|
||
var const YButtonC = $eeeeeebf;
|
||
var const ZButtonX = 140.0;
|
||
var const ZButtonY = 21.0;
|
||
var const ZButtonR = 5.0;
|
||
var const ZButtonC = $9494ffbf;
|
||
var const SButtonX = 87.0; // スタート
|
||
var const SButtonY = 54.0;
|
||
var const SButtonR = 5.0;
|
||
var const SButtonC = $eeeeeebf;
|
||
// Xボタンの輪郭と本体(16角形で円を近似)
|
||
setMTX(MTX_LOADIMM, mtx, XButtonR, XButtonX, XButtonY);
|
||
drawNgon([btn&PRESS_X ? XButtonC : FILL_NONE], XButtonC, 16);
|
||
// Yボタンの輪郭と本体(16角形で円を近似)
|
||
setMTX(MTX_LOADIMM, mtx, YButtonR, YButtonX, YButtonY);
|
||
drawNgon([btn&PRESS_Y ? YButtonC : FILL_NONE], YButtonC, 16);
|
||
// Zボタンの輪郭と本体(16角形で円を近似)
|
||
setMTX(MTX_LOADIMM, mtx, ZButtonR, ZButtonX, ZButtonY);
|
||
drawNgon([btn&PRESS_Z ? ZButtonC : FILL_NONE], ZButtonC, 16);
|
||
// スタートボタンの輪郭と本体(16角形で円を近似)
|
||
setMTX(MTX_LOADIMM, mtx, SButtonR, SButtonX, SButtonY);
|
||
drawNgon([btn&PRESS_S ? SButtonC : FILL_NONE], SButtonC, 16);
|
||
|
||
/**** トリガーの描画 ****/
|
||
var const LTriggerX0 = 8.0;
|
||
var const RTriggerX1 = 166.0;
|
||
var const TriggerW = 64.0;
|
||
var const TriggerY0 = 0.0;
|
||
var const TriggerH = 8.0;
|
||
var const TriggerFill = $dfdfdfbf;
|
||
var const TriggerStroke = $eeeeeebf;
|
||
// Lトリガーの輪郭
|
||
setMTX(MTX_LOADIMM, mtx, TriggerW, TriggerH, LTriggerX0, TriggerY0);
|
||
drawRect(FILL_NONE, TriggerStroke, 0, 0, 1, 1, false);
|
||
// Lトリガーの塗りつぶし
|
||
setMTX(MTX_LOADIMM, mtx,
|
||
// Lが押された ? 1.0倍 : 0.9倍の入力(0.0~1.0)
|
||
TriggerW * [btn&PRESS_L ? 1.0 : 0.9*readRAM(addrLTrig, TYPE_FLOAT)],
|
||
TriggerH, LTriggerX0, TriggerY0);
|
||
drawRect(TriggerFill, STROKE_NONE, 0, 0, 1, 1, false);
|
||
// Rトリガーの輪郭
|
||
setMTX(MTX_LOADIMM, mtx, -TriggerW, TriggerH, RTriggerX1, TriggerY0);
|
||
drawRect(FILL_NONE, TriggerStroke, 0, 0, 1, 1, false);
|
||
// Rトリガーの塗りつぶし
|
||
setMTX(MTX_LOADIMM, mtx,
|
||
// 左側に延びることに注意
|
||
TriggerW*[btn&PRESS_R ? -1.0 : -0.9*readRAM(addrRTrig, TYPE_FLOAT)],
|
||
TriggerH, RTriggerX1, TriggerY0);
|
||
drawRect(TriggerFill, STROKE_NONE, 0, 0, 1, 1, false);
|
||
|
||
/**** その他(常に)描画したものがあれば ****/
|
||
drawRect($00ffff1a, 232, 438, 362, 462); // (描画の行列をリセット)
|
||
drawText(234, 460, 20, $de4977ff, $f6f6f6ff, "ミファーxシド");
|
||
|
||
// 各フレームの描画はここまで
|
||
yield;
|
||
}
|