[[FrontPage]]
*Spirytusとは [#va38f45d]
Spirytusとは96度ほどのアルコール濃度を誇る美味しいウオツカです。&br;読み込むには[[Stolichnaya3>Stolicinayaリファレンス]]以降のパッチを当てた上でloadlib関数を使う必要があります。
*Spirytusの関数の大まかな分類 [#ga7e21fa]
Spirytusライブラリに含まれる関数は大きく、「RC本体の関数の発展版の関数」と「スピリタス窓(以下スピ窓)関係の関数」の二つに分けられ、後者は「スピ窓を操作する関数」と「スピ窓に描画する関数」の二つに分類可能です。
**RC本体の関数の発展版の関数 [#t9f57774]
-入力拡張系の関数
--_EXKEY&br;RC本体では使われていないキーへの入力を取得する。使い方は_KEYと同じ。&br;引数は&br;0:Return, 1:Shift, 2:Ctrl, 3:Space, 4:BackSpace, 
5:Insert&br;6:Delete, 7:Home, 8:End, 9:PageUp, 10:PageDown&br;
引数は17-28でも同じ働きをする
--_NUMKEY&br;テンキーへの入力を取得する。NUMLOCKの状態に注意せよ。使い方は_KEYと同じ。&br;引数は0〜9がテンキーの0〜9に対応&br;引数は29-38でも同じ働きをする
--_OPKEY&br;テンキーの演算子への入力に対応。使い方は_KEYと同じ。&br;引数は0:+, 1:-, 2:*, 3:/, 4:.(小数点ね)&br;引数は39-43でも同じ働きをする&br;
&color(red){注意 _EXKEY _NUMKEY _OPKEYはRC窓にフォーカスがないと常に0を返します};
--_RAWKEY&br;キーボードのキーの状態を直接に取得する。使い方は_KEYと同じ。&br;引数はWindowsの仮想キーコードそのままである。&br;なお、_EXKEYと違って、RC窓にフォーカスがないときにも検出可能なのが特徴。&br;参考までに仮想キーコードの一部を示す。&br;A-Z A=65, Z=90.すなわち、64+nでアルファベットのn文字目のキー が取得できる&br;0-9 0=48, 9=57.すなわち 48+nでnのキーが取得できる。&br;Return:13, Shift:16, BackSpace:9&br;↑:38, ←:37, →:39, ↓:40
--_RAWKEYDOWN&br;_RAWKEYに対応し、キーが押された瞬間を検知する。&br;使い方としては_KEYDOWNといっしょ。
-ファイル入出力拡張系関数
--_EXFOPEN
--_EXFCLOSE
--_EXFPUTS
--_EXFGETS&br;この4つについては、標準のシナリオ関数の_FOPEN系と同等に動作するが、&br; _EXFOPENでファイルを開く際、RigidChipsの実行ファイルのあるディレクトリから見て&br; 下位のディレクトリのファイルであれば自由に開くことができる。&br; 返り値は&br; 成功した場合、&br;_EXFOPEN:ファイルポインタ(number)&br;_EXFCLOSE:0&br;_EXFPUTS:0&br;_EXFGETS:1行分の文字列&br;失敗した場合&br;  すべて:-1, "エラーメッセージ"の2つ&br; なお、_EXFOPEN系のファイルポインタと_FOPEN系のファイルポインタは独立しているので注意されたし&br; また、_EXFOPENは同時に16ファイル(0~15)までしか開けない。&br;&color(red){注意 モデルを読み直しても_EXF〜のハンドルは自動的には閉じません。すでに閉じているハンドルを_EXFCLOSEしても害はないので、読み込み時に0〜15すべて_EXFCLOSEしておくといいかもしれません};
-その他拡張系関数
--_NTICKS&br;ノイズの位相値を取得する。使い方はどこかにあるノイズ公式参照&br;
&color(red){↓↓_SETLIMITVELOCITYの効果はモデルを変更しても続きます。くれぐれも必要がなくなったら忘れず戻してください。↓↓}; 
--_SETLIMITVELOCITY(0/1, vel)&br;第一引数が0ならコアの、1ならコア以外の、最大速度をvel[m/s]に設定する。&br;速度を出しすぎた状態で地形に衝突するとものすごい勢いでコアだけが飛ばされたりするので注意
--_GETLIMITVELOCITY(0/1)&br;第一引数が0ならコアの、1ならコア以外の、最大速度を取得する。&br;
&color(red){↑↑_SETLIMITVELOCITYの効果はモデルを変更しても続きます。くれぐれも必要がなくなったら忘れず戻してください。↑↑}; 
--GetDamageText()&br;チャットウィンドウ(Network窓)の右上の被弾情報欄の内容を取得する。&br;解析等はしないので同志ら各員の努力に期待する。&br;一応、(.-)%s(.-)%s(.-)%s(.-)\nでマッチさせるといいかな
--GetPortNumber()&br;ネットワークに接続中の場合、そのポート番号を取得する(stringとして)。&br;取得できなかった場合は""(空文字列)を返す
--GetHostName()&br;ネットワークに接続中の場合、そのホストアドレスを取得する(stringとして)。&br; 取得できなかった場合は""(空文字列)を返す
--GetKokuchiText()&br;ネットワークに接続中の場合、チャットの告知欄の内容を取得する(stringとして)。&br; 取得できなかった場合は""(空文字列)を返す
--RefleshLand()&br;_LOADLAND後にLANDが表示されない現象を解決する関数。_LOADLANDを使う場合は必ず_LOADLANDの直後に呼び出してください。
--GetTickCount()&br;システム起動からの時間をミリ秒単位で取得する関数・・・だが、&br;実際の使い方はforで山ほど関数を呼び出したりして、その前後でGetTickCountし、&br;返り値の差をとることで経過時間を計ること。最適化にご利用ください
--InitMTRand(seed)&br;MT法を用いた乱数を初期化する。MT法が分からなければぐぐること><
--MTRand()&br;MT法を用いて32Bit整数の乱数を作成する
--MTRandReal()&br;MT法を用いて[0,1)の実数の乱数を作成する
--GetLandName()&br;現在読み込んでいるLandの名前を返す。
--GetLongLandName()&br;現在読み込んでいるLandのフルパスを返す。
--GetModelName()&br;現在読み込んでいるModelの名前を返す。
--GetLongModelName()&br;現在読み込んでいるModelのフルパスを返す。
--GetLocalTime()&br;year,month,day,date,hour,min,sec,msecで実時間を取得 
**スピ窓関係の関数 [#vab484e9]
-スピ窓を操作する関数
--CreateWindow(width = CW_USEDEFAULT, height = CW_USEDEFAULT, isTransparent=0, colorKey=#000000)&br;表示用のスピ窓を作成する。引数を省略した場合はシステムのデフォルト値を用いる。&br;isTransparentに1(決してtrueではない)を指定した場合、作成される窓でカラーキーが有効となる。&br;カラーキーはcolorKey引数で指定すること。
--DestroyWindow()&br;
スピ窓を破棄する。
--IsWindowCreated()&br;
スピ窓がすでに存在すれば1を、なければ0を返す。
--ActivateRCWindow()&br;
RC窓をアクティブにする。どんなウィンドウがアクティブになっていても強制的にフォーカスを移すので&br;必要ならばIsSpirytusWindowActive等で確認してから用いること
--ActivateSpirytusWindow()&br;
スピ窓をアクティブにする。どんなウィンドウがアクティブになっていても強制的にフォーカスを移すので&br;必要ならばIsRCWindowActive等で確認してから用いること
--SwitchActiveWindow()&br;
RC窓とスピ窓の間でアクティブな方を切り替える。Tabを押したときのNetwork窓と同じような挙動である。&br;&color(red){注意:スピ窓からRC窓をアクティブにしようとする時は_KEY系は無効(RCにフォーカスがないから)なので、	この関数は_RAWKEY系とともに用いるべき};
--MinimizeSpirytusWindow/MinimizeWindow()&br;
スピ窓を最小化する。すでに最小化されている場合はそのまま
--RestoreSpirytusWindow/RestoreWindow()&br;
スピ窓の最小化を解除する。すでに解除されている場合はそのまま
--SwitchMinimized()&br;
スピ窓の最小化・通常サイズを切り替える
--IsWindowMinimized()&br;
スピ窓が最小化されていれば1を、そうでなければ0を返す。
--IsWindowActive/IsSpirytusWindowActive()&br;
スピ窓がアクティブなら1を、そうでなければ0を返す
--IsRCWindowActive()&br;
RC窓がアクティブなら1を、そうでなければ0を返す
--GetWindowSize/GetSpirytusWindowSize()&br;
スピ窓のサイズを返す。返り値は width, heightの二つ。スピ窓が存在しない場合は(-1,-1)を返す。
--SetWindowSize/SetSpirytusWindowSize(width, height)&br;
スピ窓のサイズを変更する。
--GetRCOrigin()&br;
スピ窓上でRCの画面の原点に相当する座標を返す。返り値はx, yの二つ。
--MoveWindow(x, y)&br;
スピ窓を移動する。「RCの表示領域の左上から見て(x、y)にスピ窓の表示領域の左上がある」位置へ移動する。&br;すなわち、MoveWindow(x, y)した直後にGetRCOrigin()の値は-x,-yとなる。
--GetTitleHeight/GetMenuHeight/GetBorderWidth()&br;
それぞれ、タイトルバーの高さ、メニューバーの高さ、ウィンドウの淵の幅を返す。正確な位置合わせよう。
-スピ窓に描画するための関数
--Repaint()&br;スピ窓を更新する。
--◇Clear(color = #000000)&br;スピ窓をcolorの色で塗りつぶす
--◇DrawBitmap(handle, destX, destY, srcX, srcY, srcWidth, srcHeight)&br;handleのビットマップをスピ窓上の(destX, destY)に描画する。描画されるのは読み込んだ画像の&br;(srcX, srcY)から(srcWidth x srcHeight)の範囲。また、描画時に画像外の範囲が含まれる場合の挙動は未知。&br;多くの場合まったく表示されない。
--◇DrawBitmap(handle, destX, destY, destWidth, destHeight srcX, srcY, srcWidth, srcHeight)&br;基本的にDrawBitmapと同じであるが描画先でのサイズを(destWidth x destHeight)で指定し、&br;拡大縮小描画を行える
--◇ReleaseBitmap(handle)&br;handleのビットマップを開放する。
--GetBitmapSize(handle)&br;handleのビットマップの大きさを取得する。返り値は(width, height)&br;handleが無効等のエラーが発生した場合は(-1,-1)を返す。
--SetBitmapPixel(handle, x, y, color)&br;Bitmap上の(x,y)のピクセルをcolorの色にする。
--GetBitmapPixel(handle, x, y, color)&br;Bitmap上の(x,y)のピクセル)のピクセルの色を返す。
--◇SetPixel(x, y, color)&br;スピ窓上の(x,y)のピクセルをcolorの色にする。きわめて重いので注意
--GetPixel(x,y)&br;スピ窓上の(x,y)のピクセルの色を返す。きわめて重いので注意
--◇BeginLine(color = #FFFFFF, width = 1)&br;GDIによる線描画を開始する。colorが線の色、widthが線の太さ&br;線描画はBeginLineとEndLineの間で行う必要がある
--◇EndLine()&br;GDIによる線描画を終了する。
--◇MoveTo(x, y)&br;カレントポジションを(x,y)に移動する。RCの_MOVE2Dと同等と考えよ
--◇LineTo(x, y)&br;カレントポジションから(x,y)に直線を描画し、カレントポジションを移動する。RCの_LINE2Dと同等と考えよ
--◇DrawRectangle(x, y, width, height, color)&br;点(x,y)を左上とし、横幅width高さheightの長方形をcolorの色で縁だけ描く。&br;colorを省略した場合はrawGDIモードとなる。
--◇FillRectangle(x, y, width, height, color)&br;点(x,y)を左上とし、横幅width高さheightの長方形をcolorの色で塗りつぶす&br;colorを省略した場合はrawGDIモードとなる。
--◇DrawCircle(x,y,radius, color)&br;点(x,y)を中心に半径radiusの円をcolorの色で縁だけ描く&br;colorを省略した場合はrawGDIモードとなる。
--◇FillCircle(x,y,radius, color)&br;点(x,y)を中心に半径radiusの円をcolorの色で塗りつぶす&br;colorを省略した場合はrawGDIモードとなる。
--◇DrawPie(rectLeft, rectTop, rectWidth, rectHeight, beginX, beginY, endX, endY, color)&br;(rectLeft, rectTop)を左上とし、(rectWidth x rectHeight)のサイズを持つ長方形中に&br;(beginX, beginY)から始まって(endX, endY)までの扇形を #反時計回りで#縁だけ描画する&br; colorを省略した場合はrawGDIモードとなる。
--◇FillPie(rectLeft, rectTop, rectWidth, rectHeight, beginX, beginY, endX, endY, color)&br;(rectLeft, rectTop)を左上とし、(rectWidth x rectHeight)のサイズを持つ長方形中に&br;(beginX, beginY)から始まって(endX, endY)までの扇形を #反時計回りで#塗りつぶす&br; colorを省略した場合はrawGDIモードとなる。		 
--◇TextOut(str, x, y, color = #FFFFFF)&br;(x,y)の点を左上隅としてstrの内容をcolorの色で描画する。&br;rawGDIモードにかかわらず最後にSelectObjectで選択したフォントを使って描画するので注意&br;1行の高さはGetTextHeight()を用いること。
-スピ窓に描画するためのリソースを管理する関数
--CreatePen(color=#FFFFFF, width=1, style=PS_SOLID)&br;rawGDIモード用にペンを作成し、ハンドルを返す。&br;引数は 色、幅、スタイルである。スタイルの説明は添付のlua参照。下の表でもいいよ!&br;&color(red){注意! 0と6以外を引数に指定する場合は、widthは1じゃないとミリ};
|引数|説明|
|0|ふつうの実線|
|1|破線(線があるほうが長い)|
|2|点線(五分五分)|
|3|一点鎖線(なんだろ?)|
|4|二点鎖線(しらねー)|
|5|NULL(描画しない)|
|6|長方形なんかでふつうは&br;外枠を描くところ、内枠を描く|
--CreateBrush(color=#FFFFFF)&br;rawGDIモード用にブラシを作成し、ハンドルを返す。&br;引数はブラシの色である
--CreateFont(size=13, type=FF_SWISS, isBold=0, isItalic=0, isUnderline=0, isStrikeout=0)&br;rawGDIモード及びTextOut用にフォントを作成し、ハンドルを返す。&br;引数は 大きさ、フォントの形状、太字の有無、イタリックの有無、下線の有無、打ち消し線の有無。&br;フォントの指定方法は添付のlua参照のこと。&br;なお、初期設定のフォントは CreateFont(13, 0, 1)である。&br;フォントについては以下の表も参照
|引数|説明|
|0|一番ふつうのフォント(ぷろぽぉしょなる)|
|1|HやIに飾りのついたフォント(ぷろぽぉしょなる)|
|2|普通のフォント(ぷろぽぉしょなるじゃない)|
|3|手書き風・・らしい|
|4|装飾つき・・・らしい|
--GetTextHeight()&br;現在選択されているフォントの1行あたりの高さをピクセル単位で返す。&br;それなりに負荷が高い関数のため、結果の値を保存して用いるようにすること。
--◇SelectObject(handle)&br;handleで指定したペン・ブラシ・フォントを選択する。&br;rawGDIモードでの描画及びTextOut以外には関係のない話である
--◇DeleteObject(handle)&br;handleで指定したペン・ブラシ・フォントを削除する。選択中のまま削除すると何が起きても(゚?゚)シラネ&br;また、実際に削除されるのはRepaintが実行された後、次のRepaintが実行されるまでの間で不定であるから&br;「for DeleteObject(i) end」 > 直後にCreatePen(..)等のコードは、先にペンが作成され、その後ペンが削除される。
--DeleteAllObject()&br;すべてのGDIハンドル(フォント・ペン・ブラシ・・・)を削除する。モデル読み込み時に一度実行すべし。&br;この関数は即時に実行される。&br;後は1モデルの間なら削除は考えなくても普通大丈夫
--ReleaseAllBitmap()&br;ビットマップを解放する。モデル読み込み時に一度実行すべし。この関数は即時に実行される。&br;後は1モデルの間なら削除は考えなくても普通大丈夫
--LoadBitmap(fileName, colorKey=null)&br;fileNameの名前のビットマップを RCのフォルダを基点として 読み込み、カラーキーにcolorKeyをセットし、&br;ハンドルを返す。読み込めなかった場合は(nil, error)が返る。&br;カラーキーが必要ない場合は指定しなければよい&br;例:LoadBitmap("./bmp/def.bmp) > RigidChips\bmp\def.bmp を読み込む。
*Spirytus更新履歴 [#d77ec38d]
-Ver0.493 追加した関数
--GetKokuchiText
-Ver0.492 追加した関数
--GetHostName
--GetPortNumber
-Ver0.49 追加した関数
--RefreshLand
-Ver0.48  追加した関数
--SetBitmapPixel
--GetBitmapPixel
-Ver0.47  追加した関数
--InitMTRand
--MTRand
--MTRandReal
-Ver0.46  追加した関数
--GetDamageText
--GetTickCount
--NTICKS
--ソースを整理
--Q周りを高速化
--エラー・成功時の返り値をnil, 0 に整理
--rawGDIモードの内部挙動を変更
--パッチを当てる部分の説明でmod7>mod9, orz3>orz5に説明を修正
-Ver0.42b 追加した関数
--ActivateRCWindow
--ActivateSpirytusWindow
--MinimizeSpirytusWindow
--RestoreSpirytusWindow
-Ver0.42 追加した関数
--SwitchActiveWindow
--SwitchMinimized
--IsMinimized
--GetTitleHeight,GetMenuHeight,GetBorderWidth
--GDIObject, Bitmapの管理をstd::mapに変更して高速化(双方向リストから二分木に変更)
-Ver0.41b LoadBitmap関数の仕様を変更(読み込みの基点が変更)
-Ver0.41 追加した関数
--IsRCWindowActive
--DrawStretchBitmap
--_RAWKEY
--_RAWKEYDOWN
--_SPMX
--_SPMY
--LoadBitmapでカラーキを指定しないと読み込みに失敗するバグを修正
-Ver0.4 追加した関数
--MoveWindow
--CreatePen
--CreateBrush
--CreateFont
--SelectObject
--DeleteObject
--LoadBitmap
--DrawBitmap
--ReleaseBitmap
--SetPixel
--GetPixel
--DrawPie
--FillPie
--Spirytus窓が最小化されているときに命令がQにたまる不具合を修正
-Ver0.38	
--IsWindowActive, Get/SetWindowSize, GetRCOriginを追加
--Draw/FillRectangle DrawCircleを追加
--描画1回あたりの命令数の制限を512から無限に拡張
-Ver0.35b rc_rc_OpenSpirytusとの記述を修正
-Ver0.35 Textoutの行数・字数制限を解除
--実験的にFillCircleを追加
--窓生成時にクラッシュするバグを撲滅(?)
-Ver0.33 透明ウィンドウに対応
--CreateWindowに変更(窓作成時にもアクティブを奪われない)
--Repaint関数を修正(InvalidateRectの第3引数を修正)
-Ver0.30 
--_EXFILE系を追加。
--open_spirytusを用いた登録を採用。
--IsWindowCreatedを追加し、その他のGDI用関数にも同等のチェックコードを追加してクラッシュを防止
-Ver0.29
--デモにGDIを追加.
--チャットウィンドウがアクティブでも_EXKEYが反応するバグを修正(実行速度に改善の余地あり)
-Ver0.20 初公開版

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS