public void getNextFloor(ref float fSpeed) { // 10층 전까지 무조건 1층의 빈공간 부여 // 10~20 :: 20퍼 확률로 빈공간 제거, 이속 max 0.5증가 // 20~40 :: 40퍼 확률로 빈공간 제거, 이속 max 1증가 // 40~60 :: 60퍼 확률로 빈공간 제거, 이속 max 2증가 int nOffset = maxFloor / 10 * 5; if (nOffset >= 90) { nOffset = 90; } fSpeed = maxFloor / 5 * 0.5f; bool bJumpFloor = UnityEngine.Random.Range(0, 100) >= nOffset ? true : false; if (bJumpFloor) { // 쉬는 공간 오브젝트 만들기 RestZone obj = Instantiate(m_restZonePrefabs, m_parentOfObj.transform).GetComponent <RestZone>(); m_restZoneList.Add(obj); obj.setFloor(maxFloor + 1, onHitPlayer); maxFloor += 2; } else { ++maxFloor; } }
/// <summary> /// 일정 시간 안움직이면 발생 /// </summary> void makeRestZoneObstacleOBJ() { int nCurRealFloor = m_nCurMoveLength; RestZone restZone = getCurrentRestZone(); if (restZone != null) { restZone.makeObstacleZone(); } }
private void Camp() { PlayerInventory inventory = GameState.s_playerCharacter.Inventory; if (IEModOptions.MaxCampingSupplies != IEModOptions.MaxCampingSuppliesOptions.Disabled) { if (inventory) { inventory.CampingSuppliesTotal--; } } RestZone.Rest(RestZone.Mode.Camp); }
private static void SetStartBonesToEachPlayer() { ShuffleBones(); RestZone.CopyAllBones(bones); foreach (BonesZone zone in activePlayers) { for (int i = 0; i < 7; i++) { Random random = new Random(); int r = random.Next(0, RestZone.Bones.Count); RestZone.TransferBone(zone, r, true, false, new Point(0, 0)); } } }
IEnumerator moveDownOBJ() { Vector2 offset = new Vector2(0, m_curYoffset); // 올라가기전 RestZone restZone = getCurrentRestZone(); if (restZone != null) { restZone.disableFlag(); } m_fCurMoveRateY = 0; while (m_fCurMoveRateY < m_fMoveCoolTime) { m_fCurMoveRateY += Time.deltaTime; // 올라가기 ... offset.y = m_curYoffset + m_fCurMoveRateY / m_fMoveCoolTime * m_offsetY; m_backgroundScrollMAT.material.mainTextureOffset = offset; // 배경 업데이트 for (int i = 0; i < m_objList.Count; ++i) // 장애물 업데이트 { m_objList[i].moveDown(m_fCurMoveRateY / m_fMoveCoolTime); } for (int i = 0; i < m_restZoneList.Count; ++i) // 휴식 지역 업데이트 { m_restZoneList[i].moveDown(m_fCurMoveRateY / m_fMoveCoolTime); if (m_restZoneList[i].gameObject.activeSelf == false) { DestroyImmediate(m_restZoneList[i].gameObject); m_restZoneList.RemoveAt(i); --i; } } yield return(null); } // 실제 다 올라갔을때 m_curYoffset += m_offsetY; offset.y = m_curYoffset; m_backgroundScrollMAT.material.mainTextureOffset = offset; for (int i = 0; i < m_objList.Count; ++i) // 장애물 업데이트 { m_objList[i].moveDown(1); } for (int i = 0; i < m_restZoneList.Count; ++i) // 휴식 지역 업데이트 { m_restZoneList[i].moveDown(1); if (m_restZoneList[i].gameObject.activeSelf == false) { DestroyImmediate(m_restZoneList[i].gameObject); m_restZoneList.RemoveAt(i); --i; } } ++m_nCurMoveLength; restZone = getCurrentRestZone(); if (restZone != null) { restZone.onFlag(); } m_funcList[(int)FUNC_TYPE.UP_FLOOR](m_nCurMoveLength); m_fCurMoveRateY = m_fMoveCoolTime; }
// Update is called once per frame void Update() { // hp check if (m_bEndGame) { return; } m_fCurrentStayTime += Time.deltaTime; if (m_fCurrentOnHitCoolTime > 0) { m_fCurrentOnHitCoolTime -= Time.deltaTime; } if (m_fCurMoveRateY >= m_fMoveCoolTime * 2 && Input.GetKey(KeyCode.UpArrow)) { // move down another obj list moveVerticalOBJ(); m_fCurrentStayTime = 0; } else if (m_fCurMoveRateY >= m_fMoveCoolTime) { m_fCurMoveRateY += Time.deltaTime; } if (m_fCurMoveRateX >= m_fMoveCoolTime * 2) { int direction = 0; if (Input.GetKey(KeyCode.LeftArrow) && m_nCurCharacterPosX > -2) { --direction; } if (Input.GetKey(KeyCode.RightArrow) && m_nCurCharacterPosX < 2) { ++direction; } if (direction != 0) { StartCoroutine(moveHorizontalCharacter(direction)); m_fCurrentStayTime = 0; } } else if (m_fCurMoveRateX >= m_fMoveCoolTime) { m_fCurMoveRateX += Time.deltaTime; } if (m_fCurrentStayTime >= m_fLimitStayTime) { m_fCurrentStayTime = 0; makeRestZoneObstacleOBJ(); } else if (m_fCurrentStayTime > 0) { RestZone restZone = getCurrentRestZone(); if (restZone != null) { restZone.setColorG(1 - getStayTimeRate()); } } // move another obj horizontal moveHorizontalOBJ(); }