public void Initialize() { //renderer.material.color = color; _idx = 0; //Player prefab = bricReality?ScreenManager.instance.playerRealityPrefab:ScreenManager.instance.playerFantasyPrefab; Player prefab = ((int)realityLevel>=(int)RealityLevel.Player)?ScreenManager.instance.playerRealityPrefab:ScreenManager.instance.playerFantasyPrefab; _player = GameObject.Instantiate(prefab) as Player; _player.Initialize(this); GameObject prefab2 = ((int)realityLevel>=(int)RealityLevel.Princess)?ScreenManager.instance.princessRealityPrefab:ScreenManager.instance.princessFantasyPrefab; //GameObject prefab2 = bricReality?ScreenManager.instance.princessRealityPrefab:ScreenManager.instance.princessFantasyPrefab; _princess = GameObject.Instantiate(prefab2) as GameObject; _princess.transform.localScale = new Vector3( _princess.transform.localScale.x/(float)level, _princess.transform.localScale.y/(float)level, _princess.transform.localScale.z ); _princess.transform.position = new Vector3( transform.position.x, transform.position.y + Camera.main.orthographicSize - _princess.transform.localScale.y*3, _princess.transform.position.z ); _nextBlocPosition = new Vector3( transform.position.x, transform.position.y - transform.localScale.y/2f, 0 ); //CreateNextBloc(); float cumulatedWidth = 0; while (cumulatedWidth<Camera.main.orthographicSize*2 && Mathf.Approximately(cumulatedWidth,Camera.main.orthographicSize*2)==false) { CreateNextBloc(); cumulatedWidth += _lastBlockBounds.size.y; } _firstBloc = _blocs[0]; _destroyBlocPosition = new Vector3( transform.position.x, transform.position.y - transform.localScale.y/2f, 0 ); _generateBlocPosition = new Vector3( transform.position.x, transform.position.y + transform.localScale.y/2f, 0 ); }
private void CreateNextBloc() { BricGenerator blocPrefab = ScreenManager.instance.NextBloc(ref _idx); BricGenerator bloc = GameObject.Instantiate(blocPrefab,_nextBlocPosition,Quaternion.identity) as BricGenerator; bloc.reality = bricReality; bloc.realityPercent = screenReality; bloc.realityLevel = realityLevel; bloc.transform.position = _nextBlocPosition; bloc.transform.localScale /= level; _lastBlockBounds = new Bounds(_nextBlocPosition,Vector3.zero); if (bloc.transform.childCount>0) { foreach(Transform t in bloc.transform) { if (t.gameObject.tag!="Obstacle" && t.renderer!=null) { _lastBlockBounds.Encapsulate(t.renderer.bounds); } } } else { _lastBlockBounds = bloc.renderer.bounds; } bloc.transform.Translate(bloc.transform.up * _lastBlockBounds.size.y/2f); _nextBlocPosition = new Vector3( bloc.transform.position.x, bloc.transform.position.y + _lastBlockBounds.size.y/2f, bloc.transform.position.z ); _blocs.Add (bloc); _lastBloc = bloc; }
void Update() { foreach(BricGenerator bloc in _blocs) { bloc.transform.Translate(-bloc.transform.up * ScreenManager.instance.speed * Time.deltaTime); } //if ((Camera.main.transform.position.x+_cameraWidth)>=_nextBlocPosition.x) { if (_lastBloc.transform.position.y+_lastBlockBounds.size.y/2f<=_generateBlocPosition.y) { /* * Quand la moitié du bloc est sortie du générateur. */ _nextBlocPosition = new Vector3( _generateBlocPosition.x, _lastBloc.transform.position.y+_lastBlockBounds.size.y/2f, _generateBlocPosition.z ); CreateNextBloc(); } if (_blocs.Count>0 && _firstBloc.transform.position.y<(_destroyBlocPosition.y-_lastBlockBounds.size.y/2f)) { _blocs.RemoveAt(0); GameObject.Destroy(_firstBloc.gameObject); if (_blocs.Count>0) { _firstBloc = _blocs[0]; } _nextBlocPosition = _generateBlocPosition; } }
public BricGenerator NextBloc(ref int idx) { if (_currentBric!=null) { _currentScreenGeneration++; BricGenerator ogo = _currentBric; if(_currentScreenGeneration>=_screens.Count) { _currentScreenGeneration = 0; _currentBric = null; } return ogo; } //BricGenerator go = brics[idx]; //idx = (idx+1)%brics.Length; //return go; BricGenerator go = null; switch(difficulty) { case 1: go = easyBrics[Random.Range (0,easyBrics.Length)]; break; case 2: { int bidx = Random.Range (0,easyBrics.Length + mediumBrics.Length); if (bidx<easyBrics.Length) { go = easyBrics[bidx]; } else { bidx -= easyBrics.Length; go = mediumBrics[bidx]; } } break; case 3: go = mediumBrics[Random.Range (0,mediumBrics.Length)]; break; case 4: { int bidx = Random.Range (0,mediumBrics.Length + hardBrics.Length); if (bidx<mediumBrics.Length) { go = mediumBrics[bidx]; } else { bidx -= mediumBrics.Length; go = hardBrics[bidx]; } } break; case 5: go = hardBrics[Random.Range (0,hardBrics.Length)]; break; } _currentScreenGeneration++; if(_currentScreenGeneration>=_screens.Count) { _currentScreenGeneration = 0; _currentBric = null; } else { _currentBric = go; } _generatedBrics++; Debug.Log (_generatedBrics); return go; }