public void NextState(IOnPointObject obj) { if (obj.GetObjType() != ObjectType.Reflector) { return; } Vector2Int index = obj.GetCurrentIndex(); int state = obj.GetCurrentState(); int pivotNum = state; int setState = state; for (int i = 0; i < 6; i++) { setState++; setState %= 6; int pointIndex = pointIndex = index.x + index.y * 10; if (setState == 0) { GetPointData(pointIndex, (Pivot)Enum.ToObject(typeof(Pivot), state - 1)).SetObjectType(ObjectType.None); obj.SetState(-1); return; } pivotNum = setState; if (setState != 0) { pivotNum--; } Pivot pivot = (Pivot)Enum.ToObject(typeof(Pivot), pivotNum); PointData data = GetPointData(pointIndex, pivot); if (data == null) { continue; } if (data.CanSetObject()) { GetPointData(pointIndex, (Pivot)Enum.ToObject(typeof(Pivot), state != 0 ? state - 1 : state)).SetObjectType(ObjectType.None); obj.SetState(setState); obj.SetPosition(data.GetPosition()); obj.SetPointIndex(index); data.SetObjectType(obj.GetObjType()); return; } else if (setState == 1) { if (state == 0) { obj.SetState(setState); obj.SetPosition(data.GetPosition()); obj.SetPointIndex(index); data.SetObjectType(obj.GetObjType()); return; } } } }
public void RemoveObj(IOnPointObject obj) { }
public void SetObjPointData(IOnPointObject obj) { int pointIndex = GetCenterPointDataIndex(obj.GetCurrentPosition()); SetObjPointData(obj, new Vector2Int(pointIndex % 10, pointIndex / 10), obj.GetCurrentState()); }
public void SetObjPointData(IOnPointObject obj, Vector2Int index, int state) { int pointIndex = index.x + index.y * 10; int pivotNum; Pivot pivot; PointData data = null; switch (obj.GetObjType()) { case ObjectType.Reflector: int setState = state; for (int i = 0; i < 6; i++) { setState %= 6; pivotNum = setState; if (setState != 0) { pivotNum--; } pivot = (Pivot)Enum.ToObject(typeof(Pivot), pivotNum); data = GetPointData(pointIndex, pivot); if (data == null) { setState++; continue; } if (data.CanSetObject()) { obj.SetState(setState); obj.SetPosition(data.GetPosition()); obj.SetPointIndex(index); data.SetObjectType(obj.GetObjType()); return; } setState++; } obj.SetState(-1); break; case ObjectType.Goal: case ObjectType.Start: case ObjectType.Wall: case ObjectType.Coin: for (int i = 0; i < Enum.GetNames(typeof(Pivot)).Length; i++) { data = GetPointData(pointIndex, (Pivot)Enum.ToObject(typeof(Pivot), i)); if (data == null) { continue; } if (!data.CanSetObject()) { if (i == 0 || data.GetCurrentObjType() == ObjectType.Reflector) { return; } } } for (int i = 0; i < Enum.GetNames(typeof(Pivot)).Length; i++) { data = GetPointData(pointIndex, (Pivot)Enum.ToObject(typeof(Pivot), i)); if (data == null) { continue; } data.SetObjectType(obj.GetObjType()); } Vector3 offset = new Vector3(0, 0, 0); if (obj.GetObjType() == ObjectType.Goal) { offset = m_pivotPoses[state % 4]; } if (obj.GetObjType() == ObjectType.Start) { offset = m_pivotPoses[(state + 2) % 4]; } data = GetPointData(pointIndex, Pivot.Center); obj.SetState(state); obj.SetPointIndex(index); obj.SetPosition(data.GetPosition() + offset); data.SetObjectType(obj.GetObjType()); break; } }
private void StageInit() { m_laser = Instantiate(m_laserPrefab, new Vector3(500, 500, 0), Quaternion.identity); m_laser.DestroyEvent += m_resultManager.ShowGameOverUI; m_goal = Instantiate(m_goalManager, Vector3.zero, Quaternion.identity); m_start = Instantiate(m_startPointManager, Vector3.zero, Quaternion.identity); m_pointsManager.SetObjPointData(m_goal, m_stageData.GoalData.pos, m_stageData.GoalData.state); m_pointsManager.SetObjPointData(m_start, m_stageData.StartData.pos, m_stageData.StartData.state); m_start.SetLaser(m_laser); for (int i = 0; i < m_stageData.WallPoses.Length; i++) { Wall wall = Instantiate(m_wallPrefab, new Vector3(0, 0, 0), Quaternion.identity); IOnPointObject obj = wall; m_walls.Add(wall); m_pointsManager.SetObjPointData(obj, m_stageData.WallPoses[i], 0); } for (int i = 0; i < m_stageData.ReflectorsData.Length; i++) { AReflector reflector = Instantiate(m_reflecterPrefab, new Vector3(0, 0, 0), Quaternion.identity); IOnPointObject obj = reflector; m_staticReflectors.Add(reflector); obj.Init(Vector3.zero, -1, m_stageData.ReflectorsData[i].durable); m_pointsManager.SetObjPointData(obj, m_stageData.ReflectorsData[i].pos, m_stageData.ReflectorsData[i].state); reflector.SetCanMove(false); } for (int i = 0; i < m_stageData.InfinityReflectorsData.Length; i++) { AReflector reflector = Instantiate(m_infinityReflectorPrefab, new Vector3(0, 0, 0), Quaternion.identity); IOnPointObject obj = reflector; obj.Init(Vector3.zero, -1, 99); m_pointsManager.SetObjPointData(obj, m_stageData.InfinityReflectorsData[i].pos, m_stageData.InfinityReflectorsData[i].state); reflector.SetCanMove(false); } m_coin = Instantiate(m_coinManager, Vector3.zero, Quaternion.identity); m_pointsManager.SetObjPointData(m_coin, m_stageData.CoinPos, 0); m_playableReflectorManager.CreateReflector(m_stageData.PlayerSetReflectors); m_playableReflectorManager.SetReflectorEvents( (a) => { return; }, m_pointsManager.SetObjPointData, m_pointsManager.NextState ); if (!isFirstInit) { DisposeEvents(); } RegistEvents(); }