モジュール変数は配列ではないので、IDや順番を考えながら使うものではありません。考え方を変えてください。
IDや順番はHSP側が勝手に管理してくれるのでプログラマ側は手を出せない反面、気にする必要がありません。空きスペースが出たら勝手に使ってくれます。
IDで管理したいなら配列変数使えばいいのです。
#module PlaylistItem Filename, idx
;曲(Filename)と曲順(idx)の情報を持たせる。
#modinit str _filename
mref id, 2 ;モジュール変数の内部での動きの確認用
Filename = _filename
;曲順としては最後に追加
idx = idx_max
idx_max++
return id
#modcfunc PlaylistItem_GetFileName
return Filename
#modcfunc PlaylistItem_GetIndex
return idx
#modfunc PlaylistItem_SetIndex int p_idx
idx = p_idx
return idx
#modfunc PlaylistItem_GetIndexMax
return idx_max
;-------------------
; デストラクタ
#modterm
seiretu idx
idx_max--
return
#global
;--------------------------------------------------
#module Playlist
; 曲追加
#deffunc Playlist_Add str _filename
newmod Item, PlaylistItem, _filename
return stat
; 曲削除
#deffunc Playlist_Delete int _index
delmod Item._index
return
; モジュール変数に登録された内容全てを表示
#deffunc Playlist_PrintAllItem
foreach Item
mes "(" + cnt + ") " + PlaylistItem_GetIndex(Item.cnt) + " : "+ PlaylistItem_GetFileName(Item.cnt)
loop
return
; 欠けたindexをならす
#deffunc seiretu int delidx
foreach Item
idx = PlaylistItem_GetIndex(Item.cnt)
if idx >= delidx {
idx--
PlaylistItem_SetIndex Item.cnt, idx
}
loop
return
; 曲順で並べ替えて取り出す
#deffunc Playlist_PrintList
PlaylistItem_GetIndexMax Item
idx_max = stat
repeat idx_max
i = cnt
foreach Item
if PlaylistItem_GetIndex(Item.cnt) = i {
mes "(" + cnt + ") " + PlaylistItem_GetIndex(Item.cnt) + " : "+ PlaylistItem_GetFileName(Item.cnt)
}
loop
loop
return
#global
;--------------------------------------------------
mes "(モジュール内のインデックス) " + "曲順:" + "曲名"
Playlist_Add "abc.mp3"
mes "登録: " + stat
mes "---" : Playlist_PrintAllItem : mes "-------"
Playlist_Add "123.wav"
mes "登録: " + stat
mes "---" : Playlist_PrintAllItem : mes "-------"
Playlist_Delete 0 ;こういう消し方ではなく、曲名や曲順をforeachで探して消すようにする。
Playlist_Add "music.mp3"
mes "登録: " + stat
mes "---" : Playlist_PrintAllItem : mes "-------"
Playlist_Add "alarm.wav"
mes "登録: " + stat
mes "---" : Playlist_PrintAllItem : mes "-------"
pos 200,30
mes "モジュール変数内を表示"
Playlist_PrintAllItem
mes "-------"
mes "曲順ソートして取り出し"
Playlist_PrintList
超適当に書いてみました。
無理に今ままで(配列変数)と同じ運用をしようとせず、モジュール変数はこういうことが出来る別のものなんだと理解した方がいいですよ。
参考になる資料
http://wiki.hsp.moe/hsp3%EF%BC%8F%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%A4%89%E6%95%B0.html