protected override void DestroyCar(Road.Car car, Vector3 position) { car.endPos = position; car.endTime = Score.timer; var carInfo = new StatisticsManager.EnemyMoveInfo( car.startPos, car.startTime, car.endPos, car.endTime); StatisticsManager.PushCarInfo(carInfo); }
private void DeactivateFirstRoadInQueue() { unusedRoads.Enqueue(usedRoads.Dequeue()); var r = roadsRenderingNow.Dequeue(); for (int i = 0; i < r.cars.Count; i++) { Road.Car car = r.cars[i]; Rigidbody rb = car.rigidbody; unusedCars.Enqueue(car); } }
protected virtual void DestroyCar(Road.Car car, Vector3 position) { }
protected virtual void SpawnCar(Road.Car car, Vector3 position) { }
public void MoveCars() { foreach (Road r in roadsRenderingNow) { //if (roadsRenderingNow.Count > 0) // Debug.Log("roadsRenderingNow.Count " + roadsRenderingNow.Count); float sdist; for (int i = 0; i < r.cars.Count; i++) { Road.Car car = r.cars[i]; Rigidbody rb = car.rigidbody; bool state = false; sdist = rb.position.x - car.startPos.x; if (sdist > 0) { state = rb.position.x - character.position.x > 50; } if (sdist < 0) { state = rb.position.x - character.position.x < -50; } if (character.position.z - rb.position.z > 10 || state) { unusedCars.Enqueue(car); r.cars.RemoveAt(i); //Debug.Log("Destroy state" + state); DestroyCar(car, rb.position); } else { rb.MovePosition(rb.position + Time.fixedDeltaTime * r.carsSpeed * Vector3.right); } } sdist = r.center.z - character.position.z; if (sdist < 50 && sdist > 10 && r.cars.Count < 3 && unusedCars.Count > 0) { Road.Car car = unusedCars.Dequeue(); Rigidbody rb = car.rigidbody; float speedSign = Mathf.Sign(r.carsSpeed); float xOffset = speedSign * -50; Vector3 carPos = new Vector3(character.position.x + xOffset, r.center.y, r.center.z); float carSpacing = 10 + 10 * Level.difficulty; //if (r.cars.Count > 0 && Vector3.Distance(carPos, r.cars[r.cars.Count - 1].rigidbody.position) < carSpacing) // carPos = r.cars[r.cars.Count - 1].rigidbody.position + Mathf.Sign(xOffset) * carSpacing * Vector3.left; if (r.cars.Count > 0 && ( Mathf.Abs(carPos.x - r.lastCarStartPos.x) < carSpacing || speedSign * (r.lastCarStartPos.x - carPos.x) < 0)) { carPos = r.lastCarStartPos + speedSign * carSpacing * Vector3.left; } rb.position = carPos; rb.rotation = r.carsSpeed < 0 ? inversCarRotation : carPrefab.transform.rotation; rb.velocity = Vector3.zero; r.cars.Add(car); r.lastCarStartPos = carPos; SpawnCar(car, carPos); } } }
protected override void SpawnCar(Road.Car car, Vector3 position) { car.startPos = position; car.startTime = Score.timer; }