Seiren Dev Logs

制作したゲームの紹介や開発のお話など

Hashlink extensionでの構造体の扱い

github.com 拡張をお試しで作ったプロジェクトをgithubにアップしました。

で、タイトルの件をちょっと補足です。 チュートリアルではDynamic型でやり取りする方法が載ってたのでその通りしたんですが、 公式のlibだとhl.Abstractというのを使ってるのが多かったのでそっちのがいいのかもしれません。

(例えばこういうところ:https://github.com/HaxeFoundation/hashlink/blob/64d29dea4502f4dbfc653c0afd486afca0d756e4/libs/sdl/sdl/GameController.hx#L3

Hashlinkのextensionを試しに作ってみた

以前から興味があったHashlinkのextension作り、手を出してみました。 bindするCのライブラリは同じく面白そうだなあと思っていたraylibを選択。 結果、ひとまず最初のサンプルを起動することに成功しました。

Hashlinkでraylibを動かす

raylibとhashlinkが使ってるwindows.hとで名前衝突しててraylibの方をリネームしました。 基本的にextensionのチュートリアル通りにやっていけばいけると思います。 あとはhashlink公式のlibsもあるのでその辺のソースも見つつやりました。

機会あればサンプルプロジェクトを整理してアップしようと思います。

haxelib updateで特定のライブラリを除いて一括更新する2

表題の件、前回の記事「haxelib updateで特定のライブラリを除いて一括更新する」で色々試した結果を書いてみました。
少し問題はありますが現実的には上記記事の1.の方法でいいかと思います。

ただ勉強も兼ねてhaxelibでVer指定あるいは除外指定しつつ一括更新するちょっとしたツールを作りました。
以下はその自作ツールの紹介です。
windows10で動作を確認しています。

準備
  • thx.core に依存しているので入ってない場合はインストールする必要があります。
    haxelib install thx.core
  • 上記のUpdateSpecificVer.hxを適当な場所に配置します。
使い方

haxe -cp <UpdateSpecificVer.hxを置いたフォルダ> -lib thx.core --run UpdateSpecificVer <libname1:version libname2:version ...>

haxe -cp c:\hoge -lib thx.core --run UpdateSpecificVer openfl:3.6.1 lime:2.9.1 hxcpp
ライブラリ名とバージョンを記述します。するとそのライブラリは指定したバージョンにセットされます。
ライブラリ名のみを記述するとそのライブラリは何も行われません。
記述がなかったライブラリは最新にアップデートされます。

コンパイルいらずでソースのまま実行できます。
なお起動引数を指定しての実行は--interpではなく--runを使う必要があるようです。
参考
* Haxe --interp arguments?
* --run and --interp: what those commands actually do and what's the difference?

haxelib updateで特定のライブラリを除いて一括更新する

haxelibでインストール済みライブラリを全て最新にしたい場合はhaxelib update --alwaysでワンコマンドでいけます。
しかしライブラリごとに更新する/しないを選択したい場合があります。 自分はhaxeflixelが最新のopenflやlimeに対応していない時にそういう状況になりました。
基本的にはhaxelib updateして更新があるライブラリの「updateしますか?」という問いにyかnを入力することになります。
しかし毎回入力してるとこれが面倒で、対話なしで最新verを使えないライブラリを除いて更新処理してほしくなってきます。もちろんライブラリの更新は変更内容を精査して慎重にやるべきケースもありますが今回は考えないこととします。

いくつか試してみました。
以下はhaxeflixelで使うopenflやlimeのバージョンを固定しつつその他のライブラリを一括で最新にするケースを想定しています。

  1. 固定したいバージョンのライブラリの該当フォルダを開発用に設定する。

    haxelib dev openfl C:\HaxeToolkit\haxe\lib\openfl\3,6,1
    haxelib dev lime C:\HaxeToolkit\haxe\lib\lime\2,9,1
    haxelib update --always
    問題点
    ・Ver固定したいライブラリに更新があった場合、不要なのにDLしてしまう。

  2. ライブラリ使用時に-lib library_name:X.X.Xと記述しバージョンを指定する。
    openflのproject.xmlでは<haxelib name="library_name" version="X.X.X" />
    問題点
    ・openflやlimeのVer指定方法がわからず。
    haxelib update --always するとVer固定したいライブラリに更新があった場合、不要なのにDLしてしまう。

  3. haxelibのローカルリポジトリを作りバージョンを固定したいライブラリはそちらにインストールする。

    haxelib newrepo
    haxelib install hoge 1.0.0
    クラスパスの記述で-cp C:/localrepo/.haxelib/hoge/1,0,0と指定
    openflのproject.xmlでは<classpath name="C:/localrepo/.haxelib/hoge/1,0,0" />
    問題点
    ・openflやlimeのVer指定方法がわからず。
    ・ローカルに無いライブラリはグローバルのものが使われる、という仕様になっておらずちょっと使いにくい印象。

なかなか上手い方法をみつけられません。
そこでupdateで除外指定できるちょっとしたツールを作りました。
haxelib updateで特定のライブラリを除いて一括更新する2 - seirengames
上記記事で公開してます。