Skip to content

Instantly share code, notes, and snippets.

@istallia
Last active July 26, 2020 08:34
Show Gist options
  • Save istallia/21bc9db1dfb218a58d2475fb8953988f to your computer and use it in GitHub Desktop.
Save istallia/21bc9db1dfb218a58d2475fb8953988f to your computer and use it in GitHub Desktop.
Stormworks Lua 日本語リファレンス

Stormworks Lua 日本語リファレンス

日本語で読みたかったので自分用に作成。
自分用なのでMarkdownで書いたやつをGithub Gist任せにしてそのまま上げてるだけです。
こちらを参考にしてます。
目次が長すぎるのでスマホだと読みづらいかも。
バージョン: v0.10.15

目次

画面(screen)

onDraw()関数の中でしか呼べないので注意する。座標は左上が(0,0)。

描画色の指定.setColor(r, g, b [, a])

描画色を指定する。aは透明度。
各値の範囲は0~255。以後、色の指定は全部そうなので説明省略。
画面のバックライトの影響か、思っているより明るい色になるので暗めに指定するとよい。

画面のクリア.drawClear()

スクリーン全体を描画色で塗りつぶす。

線の描画.drawLine(x1, y1, x2, y2)

指定した2点間に線を引く。

円の描画.drawCircle(x, y, radius), .drawCircleF(x, y, radius)

指定座標を中心とする円を描く。radiusは半径。
Fがついてる方は円形内部を塗りつぶす。

四角形の描画.drawRect(x, y, width, height), .drawRectF(x, y, width, height)

指定座標を左上とする四角形を描く。widthは幅、heightは高さ。
Fがついてる方は四角形内部を塗りつぶす。

三角形の描画.drawTriangle(x1, y1, x2, y2, x3, y3), .drawTriangleF(x1, y1, x2, y2, x3, y3)

指定した3点間を結んで三角形を描く。
Fがついてる方は三角形内部を塗りつぶす。

テキストの描画.drawText(x, y, text)

指定座標を左上としてテキストを描画する。フォントサイズは4x5。

テキストボックスの描画.drawTextBox(x, y, width, height, text [, h_align, v_align])

指定座標を中心とする四角形の中にテキストを描画する。
h_alignとv_alignで左右及び上下の揃え(-1~1)を指定できる。デフォルトは両方とも-1(左上揃え)。
はみ出した分は収まるように自動で折り返されるが、テキスト量が多すぎる場合は上下にはみ出す。

地図の描画.drawMap(x, y, zoom)

指定座標を左上とした地図を描画する。zoomはスケール、0.1~50。
※zoom÷2がkm単位になるらしい。つまり、大きな数値を指定すると世界が見える。「倍率」と訳してしまうと感覚的に逆になってしまう。

地図の各地形の色の指定.setMapColorOcean(r, g, b [, a]), .setMapColorShallows(r, g, b [, a]), .setMapColorLand(r, g, b [, a]), .setMapColorGrass(r, g, b [, a]), .setMapColorSand(r, g, b [, a]), .setMapColorSnow(r, g, b [, a])

地図の描画で使われる色を指定する。
Oceanは海、Shallowsは浅瀬、Landは陸地、
Grassは草地、Sandは砂、Snowは雪や氷。

画面サイズの取得.getWidth(), .getHeight()

接続されているモニタの幅と高さを取得できる。
複数のモニタを使っててもonDraw()関数が複数回呼ばれるので気にせず取得しよう。

地図関連の座標変換(map)

ワールド座標への変換.screenToMap(mapX, mapY, zoom, screenW, screenH, pixelX, pixelY)

画面上の座標をワールド座標に変換する。返り値は変数2つで受け取る。
mapX、mapY、zoomで地図の描画設定を指定。ほかも適当に設定する。
タッチ入力のGPSナビとかに使えそう。

画面上の座標への変換.mapToScreen(mapX, mapY, zoom, screenW, screenH, worldX, worldY)

ワールド座標を画面上の座標に変換する。同上。

タッチスクリーンについて

Stormworksの日本Wikiには以下のように書かれている。
タッチスクリーンはEQどちらのキーでもタッチできるが、両方のキーを押した場合、2つ目の入力座標が使われる。
点ではなく線を指定するのに使えそうだが、線を指定するような操作が思いつかない。1つ目だけ見ればいいんじゃないかな。

チャンネル 内容
Number 1 画面の幅
Number 2 画面の高さ
Number 3 X座標(1)
Number 4 Y座標(1)
Number 5 X座標(2)
Number 6 Y座標(2)
Bool 1 タッチ信号(1)
Bool 2 タッチ信号(2)

コンポジット入力(input)

入力と出力は完全に独立しているようなので、意図的にgetBoolしたものをsetBoolしない限り、入力側がそのまま出力に現れることはない。
この仕様を知ってないと面倒なことになる。なった。

ブール値の取得.getBool(index)

指定したインデックス(1~32)の真偽値を取得する。

数値の取得.getNumber(index)

指定したインデックス(1~32)の数値を取得する。

コンポジット出力(output)

入力と出力は完全に独立しているようなので、意図的にgetBoolしたものをsetBoolしない限り、入力側がそのまま出力に現れることはない。
また、値を書き込んで放置していてもfalseや0にはならず、最後に書き込んだ値を保持する。
この仕様を知ってないと面倒なことになる。なった。

ブール値の書き込み.setBool(index, value)

指定したインデックス(1~32)に指定したブール値を書き込む。

数値の書き込み.setNumber(index, value)

指定したインデックス(1~32)に指定した数値を書き込む。

プロパティの取得(property)

ラベルは大小文字が区別される。

ブール値の取得.getBool(label)

ラベルを指定してブール値を取得する。

数値の取得.getNumber(label)

ラベルを指定して数値を取得する。

テキストの取得.getText(label)

ラベルを指定してテキストを取得する。

テレメトリ(async)

HTTPリクエストを投げる.httpGet(port, request_body)

localhostに対してHTTPリクエストを投げる。request_bodyでアクセス先のページとGETパラメータを指定する。
例えば、async.httpGet(3000, "/sample.php?key=stormworks")みたいな感じ。
リダイレクトは全くされないので、外部のサイト情報が欲しい場合はlocalhostに立てたサーバ側で代わりに取ってきてもらう。

HTTPリクエストの結果の受け取り.httpReply(port, request_body, response_body)

関数として定義して使う。上の関数でリクエストを投げると、この関数が勝手にコールバックに指定される。受信すると呼び出される。
portrequest_bodyはおそらく上の関数で指定したものと同じ。response_bodyは帰ってきたボディ。普通はこの部分を美味しくいただく。
タイムアウトとかでエラーになっても呼ばれるのかな?そこは要検証。

その他、Luaの機能でよく使いそうなもの

tostring(something), tonumber(something [, base])

数値と文字列の相互変換。ブール値も文字列にできるのかな?
数値変換ではbaseで何進数にするか指定できる。

math.deg(rad), math.rad(deg)

弧度法(2π)と度数法(360°)の相互変換。マイコンの関数ブロックでも使えるようにしてほしい()

math.random([m [, n]])

m~nの範囲でランダムな整数を返す。例外として、無指定ならば0~1の浮動小数点型。
mだけ指定すると、1~mの範囲で返す。mとnは非負整数。
math.randomseed(num)で初期化できる。

string.find(str, pattern [, init [, plain]])

正規表現で文字列を検索し、何文字目でマッチしたかを返す。1文字目が1なので注意。
initで何文字目から検索を始めるか指定できる。
plainはtrueにすると、正規表現ではなく単純な文字列として検索する。

string.gsub(str, pattern, alt [, n])

正規表現で文字列を検索し、マッチしたすべての部分をaltの文字列に置換する。
nを指定すると、先頭から何回置き換えるかに制限を加えられる。

string.upper(str)

文字列中の小文字を大文字に統一する。使うことあるかな?

@istallia
Copy link
Author

async.HTTPRequest(fail_callback, success_callback, url, method, headers, body)
正式に実装されたらこれも追記する

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment