bool IsPositionInTurnChunksNullArea(int pos) { if (pos < Constants.turningTerm) { return(false); } StageEditorST sest = FindEditSTByPos(pos); if (sest != null) { return(false); //뭐라도 있으니까 상관없음. } //널인 경우라면. 회전 청크 보간 청크라서 널인지를 파악 //4는 굉장히 회전 청크의 상태에 의존한 값임! for (int i = -1; i >= -4; i--) { sest = FindEditSTByPos(pos + i); if (sest != null && sest.IsTurnChunks()) { return(true); } } return(false); }
void ModerateListForTurnChunks(int pos)//pos는 회전 청크가 생긴 지점. { StageEditorST sest = FindEditSTByPos(pos); if (sest.whichTurn == E_WhichTurn.NOT_TURN) { ErrorManager.SpurtError("회전 청크도 아닌데 지우겠다고"); } for (int i = 1; i < Constants.turningTerm; i++) { if (i < 5) //새로 생긴 회전 청크를 위해 비워두는 구간. { sest = FindEditSTByPos(pos + i); if (sest != null) //여기 뭔가 있으면 { sest.ReadyForGrave(); EditSTList.Remove(sest); } } //이후 애들은 터닝텀에 걸리므로 턴청크일때 삭제해줘야함. else { sest = FindEditSTByPos(pos + i); if (sest != null && sest.IsTurnChunks()) { sest.ReadyForGrave(); EditSTList.Remove(sest); } } } }
void ClearAndShowChunks() { DisappearAllChunks(); if (position < Constants.firstObjSpawn) { ErrorManager.SpurtError("포지션이 2보다 작음!!"); } if (position == Constants.firstObjSpawn) { ClearAndStartingShowChunks(); return; } if (startingBlock.activeSelf == true) { startingBlock.SetActive(false); } for (int i = 0; i < candidates.Length; i++) { if (i == 0 && IsPositionInTurnChunksNullArea(position + candidates[0])) { continue; } StageEditorST sest = MakeChunk(candidates[i], position); if (sest.IsTurnChunks()) //회전 청크가 나오면 그만만듦 { break; } } }
//얘들 나중에 인터페이스로 뺼까 말까 한번 고민해보자. //아니면 콜백을 걸어놓든지. public void ChangeObjThisChunk(int spawnPointNum, E_SPAWN_OBJ_TYPE objType) { StageEditorST sest = FindEditSTByPos(position); if (sest == null) { ErrorManager.SpurtError("절대 있을 수 없는 , 호출을 잘못한 듯."); } sest.ChangeObj(spawnPointNum, objType); }
public bool CanItBeTurnChunks() { if (position < Constants.turningTerm) { return(false); } for (int i = -1; i > -Constants.turningTerm; i--) //전 터닝텀 구간 까지 터닝 청크가 있는지 체크. { StageEditorST sest = FindEditSTByPos(position + i); if (sest != null && sest.IsTurnChunks()) { return(false); } } return(true); }
void PosAdjustByTurnChunkInFront() { if (position < Constants.turningTerm - 1) { position++; return; } StageEditorST sest = FindEditSTByPos(position); //현재 포지션이 턴청크라면! if (sest != null && sest.IsTurnChunks()) { position += 5; //턴청크 구간 점프 } else { position++; } }
StageEditorST MakeChunk(int candidateNum, int standardPos) { int pos = candidateNum + standardPos; for (int i = 0; i < EditSTList.Count; i++) { if (EditSTList[i].pos == pos) { EditSTList[i].showThisToEditor(standardPos, chunkMargin); return(EditSTList[i]); } } StageEditorST sest = new StageEditorST(pos, E_WhichTurn.NOT_TURN); EditSTList.Add(sest); sest.showThisToEditor(standardPos, chunkMargin); return(sest); }
void ReadyForSaving() //중간 공백등에 모두 조정. { SortEditSTList(); int nowPosEdit = EditSTList[0].pos; if (nowPosEdit != Constants.firstObjSpawn) { ErrorManager.SpurtError("초기 시작 위치가 2가 아님."); } int lastPos = EditSTList[EditSTList.Count - 1].pos; StageEditorST sest; while (nowPosEdit < lastPos) { sest = FindEditSTByPos(nowPosEdit); if (sest.IsTurnChunks()) //턴청크 면 { ModerateListForTurnChunks(nowPosEdit); nowPosEdit += 5; sest = FindEditSTByPos(nowPosEdit); //다음 점프 포인트에도 청크가 없다면 만들어줌. if (nowPosEdit < lastPos && sest == null) { StageEditorST newSest = new StageEditorST(nowPosEdit, E_WhichTurn.NOT_TURN); EditSTList.Add(newSest); } } else //턴청크가 아닐때 { sest = FindEditSTByPos(nowPosEdit + 1); if (sest == null) { StageEditorST newSest = new StageEditorST(nowPosEdit + 1, E_WhichTurn.NOT_TURN); EditSTList.Add(newSest); } nowPosEdit++; } } SortEditSTList(); }
void ClearAndShowChunks() { DisappearAllChunks(); //받은 포지션 값의 청크가 회전 청크인지, 그 범위에 포함인지, 등을 알아내어 적절한 처리를 꼭 해줄것!! if (position < Constants.firstObjSpawn) { ErrorManager.SpurtError("포지션이 2보다 작음!!"); } if (position == Constants.firstObjSpawn) { ClearAndStartingShowChunks(); return; } if (startingBlock.activeSelf == true) { startingBlock.SetActive(false); } for (int i = 0; i < candidates.Length; i++) { //-1 경우에만 전에 턴청크 때문에 안그려줘야하는지 체크해줄 필요가 있어. if (i == 0 && IsPositionInTurnChunksNullArea(position + candidates[0])) { continue; } StageEditorST sest = MakeChunk(candidates[i], position); if (sest.IsTurnChunks()) //회전 청크가 나오면 그만만듦 { break; } } }
void Start() { if (StageManager.fileNameForEdit == null) { ErrorManager.SpurtError("파일 이름이 없음!"); } List <StageEditorST> list = StageDataMgr.GetInstance().CheckTheStage(StageManager.fileNameForEdit); EditSTList = new List <StageEditorST>(); for (int i = 0; i < list.Count; i++) { StageEditorST sest = new StageEditorST(list[i].pos, list[i].whichTurn, list[i].soa); EditSTList.Add(sest); } MapObjPoolingGeneration(); StartCoroutine(BringToWorkspace()); ClearAndShowChunks(); }
public void ChangeFloorChunk(E_WhichTurn whichTurn) { if (CanItBeTurnChunks() == false) { Debug.Log("회전 조건 충족 못함"); return; } StageEditorST sest = FindEditSTByPos(position); if (sest == null) { ErrorManager.SpurtError("절대 있을 수 없는 , 호출을 잘못한 듯."); } sest.ChangeFloor(whichTurn); if (whichTurn != E_WhichTurn.NOT_TURN) //회전 청크로 바꿨다면 조정 { ModerateListForTurnChunks(position); } ClearAndShowChunks(); //청크를 바꿨으면 빈공간 나가리가 쭉 생기게 되니까. }