/// <summary> /// 置き換えデータの読み込み /// </summary> /// <param name="rTC"></param> /// <param name="lChank"></param> /// <returns></returns> private bool FF_LoadStageFileTC(ref SquareTilesTranspose rTC, LoadChank lChank) { LoadChank lChank02; LoadData lData; Chunk chank = new Chunk(); int nCnt; if (lChank != null) { lChank.GetBlockChank(chank); // チャンクブロックチェックしない // IDから処理選択 while ((lData = lChank.FindChank(chank)) != null) { if (chank.id == FSquareTilesTransposeFrame.ID) { SquareTilesTransposeFrame stTCF = new SquareTilesTransposeFrame(); // チェック if (chank.num == 0) { throw new IOException("FSquareTilesTransposeHeader チャンク数が異常です。"); } nCnt = 0; while ((lChank02 = lData.FindData(stTCF)) != null || !lData.GetFindEnd()) { rTC.Add(stTCF); if (lChank02 != null) { if (!this.FF_LoadStageFileTCF(ref rTC, ref stTCF, lChank02)) { return(false); } } lChank02 = null; ++nCnt; stTCF = new SquareTilesTransposeFrame(); } break; } else { // FFID_MAPCHIP_INFO以外のIDが今現在存在しないで // 怪しい値を見つけたらエラーをはき出すようにする throw new IOException("未対応のIDが呼ばれた。"); } } } return(true); }
/// <summary> /// 置き換えタイル群の1フレーム読み込み /// </summary> /// <param name="rTC"></param> /// <param name="rTCF"></param> /// <param name="lChank"></param> /// <returns></returns> private bool FF_LoadStageFileTCF(ref SquareTilesTranspose rTC, ref SquareTilesTransposeFrame rTCF, LoadChank lChank) { FSquareTileInfoMap ffMIM; LoadChank lChank02; LoadData lData; Chunk chank = new Chunk(); int cnt; int i, j; if (lChank != null) { lChank.GetBlockChank(chank); // チャンクブロックチェックしない // IDから処理選択 while ((lData = lChank.FindChank(chank)) != null) { if (chank.id == FSquareTileInfoMap.ID) { ffMIM = new FSquareTileInfoMap(); // チェック if (chank.num == 0) { throw new IOException("FSquareTilesTransposeHeader チャンク数が異常です。"); } rTCF.aaMapChip = new D2ArrayObject <FSquareTileInfoMap>(rTC.tileNumX, rTC.tileNumY); cnt = 0; i = j = 0; while ((lChank02 = lData.FindData(rTCF.aaMapChip[i, j])) != null || !lData.GetFindEnd()) { if (++cnt >= chank.num) { break; } i = cnt / rTC.tileNumX; j = cnt % rTC.tileNumX; } break; } else { // 上記以外のIDが今現在存在しないで // 怪しい値を見つけたらエラーをはき出すようにする throw new IOException("未対応のIDが呼ばれた。"); } } } return(true); }
//########################################################################### //## //## 読み込み //## //########################################################################### #region 読み込み /// <summary> /// スクエアタイルマップをファイルから読み込み開始する /// </summary> /// <param name="rMap"></param> /// <param name="lChank"></param> /// <returns></returns> internal bool FF_LoadStageFile(ref FSquareTileMapHeader rMap, LoadChank lChank) { FSquareTileInfoMap rMIM; LoadChank lChank02; LoadData lData; Chunk chank = new Chunk(); int i, j; // 名前 m_mapName = rMap.GetString(); // m_tileCountX = rMap.tileNumX; // X軸のマップチップ数 m_tileCountY = rMap.tileNumY; // Y軸のマップチップ数 //m_nChipNum = m_tileNumX*m_tileNumY; // チップ数の合計 // サイズ //m_aabbSize.vMin.Init(); //m_aabbSize.vMax.x = (float)m_tileNumX * STAGE_CHIPSIZE; //m_aabbSize.vMin.y = -((float)m_tileNumY * STAGE_CHIPSIZE); m_mapTiles = new D2ArrayObject <FSquareTileInfoMap>(m_tileCountX, m_tileCountY); if (lChank != null) { lChank.GetBlockChank(chank); // チャンクブロックチェックしない // IDから処理選択 while ((lData = lChank.FindChank(chank)) != null) { if (chank.id == FSquareTileInfoMap.ID) { //---------------------------- // MAP上で使う一つのマップチップ //---------------------------- FSquareTileInfoMap mapChip = new FSquareTileInfoMap(); // チェック if (chank.num == 0) { throw new IOException("チャンク数が以上です。"); } m_allTileCount = 0; while ((lChank02 = lData.FindData(mapChip)) != null || !lData.GetFindEnd()) { // データ内部部分書き込み i = m_allTileCount / m_tileCountX; j = m_allTileCount % m_tileCountX; rMIM = m_mapTiles[i, j]; rMIM.L00._n = mapChip.L00._n; rMIM.L01._n = mapChip.L01._n; // 登録 //if ( (rMIM.L00.flags & FSquareTileInfoMap.ANMCHIP) != 0 ) // rAGM.RegistrationChipAnimation(rMIM.L00.anmGroupNo, rMIM.L00.anmTileNo); //if ( (rMIM.L01.flags & FSquareTileInfoMap.ANMCHIP) != 0 ) // rAGM.RegistrationChipAnimation(rMIM.L01.anmGroupNo, rMIM.L01.anmTileNo); // これ以上入れ子は今のところない予定なので入れ子は無視 if (lChank02 != null) { throw new IOException("入れ子"); } ++m_allTileCount; } break; } else if (chank.id == FSquareTileMapRect.ID) { //---------------------------- // イベントなどに使用する長方形 //---------------------------- FSquareTileMapRect eRect = new FSquareTileMapRect(); while ((lChank02 = lData.FindData(eRect)) != null || !lData.GetFindEnd()) { // これ以上入れ子は今のところない予定なので入れ子は無視 if (lChank02 != null) { lChank02 = null; throw new IOException("存在してはいけない入れ子を発見"); } m_eventRect.Add(eRect.GetString(), eRect); eRect = new FSquareTileMapRect(); } break; } else if (chank.id == FSquareTilesTransposeHeader.ID) { //---------------------------- // 置き換えるチップの集まり //---------------------------- SquareTilesTranspose stTC = new SquareTilesTranspose(); // チェック if (chank.num == 0) { throw new IOException("FSquareTilesTransposeHeader チャンク数が異常です。"); } while ((lChank02 = lData.FindData(stTC)) != null || !lData.GetFindEnd()) { m_transPoseTiles.Add(stTC.GetString(), stTC); // AABB //m_aabbSize.vMin.Init(); //m_aabbSize.vMax.x = (float)m_tileNumX * STAGE_CHIPSIZE; //m_aabbSize.vMin.y = -((float)m_tileNumY * STAGE_CHIPSIZE); //stTC.aabb.vMin.x = (float)(tChip.tilePosX*STAGE_CHIPSIZE); //stTC.aabb.vMax.x = stTC.aabb.vMin.x+(float)(tChip.tileNumX*STAGE_CHIPSIZE); //stTC.aabb.vMax.y = -(float)(tChip.tilePosY*STAGE_CHIPSIZE); //stTC.aabb.vMin.y = -(float)(tChip.tileNumY*STAGE_CHIPSIZE)+stTC.aabb.vMax.y; if (lChank02 != null) { if (!this.FF_LoadStageFileTC(ref stTC, lChank02)) { throw new IOException("FSquareTilesTransposeHeader が異常です。"); } lChank02 = null; } stTC = new SquareTilesTranspose(); } break; } else { // FFID_MAPCHIP_INFO以外のIDが今現在存在しないで // 怪しい値を見つけたらエラーをはき出すようにする throw new IOException("未対応のIDが呼ばれた。"); } } } return(true); }
//########################################################################### //## //## 読み込み //## //########################################################################### /// <summary> /// ステージファイルからマップチャンク部分からの読み込み /// </summary> /// <param name="rvImageFile"></param> /// <param name="rBG"></param> /// <param name="lChank"></param> /// <param name="rAGM"></param> /// <param name="nBackgroundoNo"></param> /// <returns></returns> public bool FF_LoadStageFile( string strName, List <ImageSquareTile> rvImageFile, FF_BACKGROUND rBG, LoadChank lChank, short nBackgroundoNo ) { LoadChank lChank02; LoadData lData; Chunk chank = new Chunk(); int nCnt; int i, j; m_strName = strName; m_rvImage = rvImageFile; m_nMyNo = nBackgroundoNo; m_tileNumX = rBG.tileNumX; m_tileNumY = rBG.tileNumY; if (lChank != null) { lChank.GetBlockChank(chank); // チャンクブロックチェックしない // IDから処理選択 while ((lData = lChank.FindChank(chank)) != null) { switch (chank.id) { case FF_BACKGROUND_CHIP.ID: { m_BGCs = new D2ArrayObject <FF_BACKGROUND_CHIP>(m_tileNumX, m_tileNumY); // チェック if (chank.num == 0) { throw new IOException("FF_BACKGROUND_CHIP チャック数が異常です。"); } nCnt = 0; i = j = 0; while ((lChank02 = lData.FindData(m_BGCs[i, j])) != null || !lData.GetFindEnd()) { // 登録 //if( rBGC.uFlg & MCHIP_FLG_ANMCHIP ) // pAGM->RegistrationChipAnimation(rBGC.l.uAnmGroupNo, rBGC.l.uAnmChipNo); // 現在これ以上入れ子はない if (lChank02 != null) { throw new IOException("現在これ以上入れ子はない"); } if (++nCnt >= chank.num) { break; } i = nCnt / m_tileNumX; j = nCnt % m_tileNumX; } break; } case FF_BACKGROUND_RECT.ID: { //FF_BACKGROUND_RECT ffBR = new break; } default: // FFID_MAPCHIP_INFO以外のIDが今現在存在しないで // 怪しい値を見つけたらエラーをはき出すようにする throw new IOException("未対応のIDが呼ばれた。"); } lData = null; } } return(true); }