public Vector3 GetPoint(WaypointsMover mover, float time) { //if (IsCurved) { float fullLength = BezierApproximation.GetLength(_moversParts[mover]); float remainedLength = fullLength * (time - 0.001f); for (int i = 0; i < _moversParts[mover].Count - 1; i++) { Vector3 point1 = _moversParts[mover][i]; Vector3 point2 = _moversParts[mover][i + 1]; float lineLength = Vector3.Distance(point1, point2); if (lineLength < remainedLength) { remainedLength -= lineLength; } else { return(point1 + (point2 - point1).normalized * remainedLength); } } throw new Exception("Get point error for time:" + time + ", remainedLength: " + remainedLength); } // else // { // Vector3 point1 = _moversParts[mover][0]; // Vector3 point2 = _moversParts[mover][1]; // float fullLength = Vector3.Distance(point1, point2); // float remainedLength = fullLength*time; // return point1 + (point2 - point1).normalized * remainedLength; // } }
public void OnEnable() { _waypointsMover = target as WaypointsMover; if (Mathf.Abs(WaypointsMover.InitSpeed - _waypointsMover.Speed) < 0.00001f) { _waypointsMover.Speed = 0.2f * Camera.main.orthographicSize; } }
public void SpawnGems() { Path path = GemPaths[Random.Range(0, GemPaths.Length)]; for (int i = 0; i < 10; i++) { WaypointsMover gem = Instantiate(GemPrefabs); gem.Go(path); } }
public void LaunchRockets() { foreach (Path path in RocketPaths) { WaypointsMover mover = Instantiate(RocketPrefab); mover.OneWayFinished += OnOneWayFinished; mover.Go(path); mover.transform.SetParent(transform); } }
private WaypointsMover GenerateCharacter(Path path) { Transform character = PrefabUtility.InstantiatePrefab(_levelsMap.CharacterPrefab) as Transform; character.transform.parent = _levelsMap.transform; WaypointsMover waypointsMover = character.gameObject.AddComponent <WaypointsMover>(); waypointsMover.Path = path; waypointsMover.Speed = Camera.main.orthographicSize; return(waypointsMover); }
public float GetLength(WaypointsMover mover, int fromInd, int toInd, bool isForwardDirection) { //if (IsCurved) { Vector3 handle1 = isForwardDirection ? GetHandle1(mover, fromInd) : GetHandle2(mover, fromInd); Vector3 handle2 = isForwardDirection ? GetHandle2(mover, toInd) : GetHandle1(mover, toInd); return(BezierApproximation.GetLength(_capturedPositions[mover][fromInd], handle1, _capturedPositions[mover][toInd], handle2, LinesCount)); } // else // { // return Vector3.Distance(_capturedPositions[mover][fromInd], _capturedPositions[mover][toInd]); // } }
public Vector3 CapturePosition(WaypointsMover mover, int waypointIndex) { Transform waypoint = Waypoints[waypointIndex]; //RandomWaypoint randomWaypoint = waypoint.GetComponent<RandomWaypoint>(); Vector3 position = waypoint.position; if (!_capturedPositions.ContainsKey(mover)) { _capturedPositions[mover] = new Dictionary <int, Vector3>(); } _capturedPositions[mover][waypointIndex] = position; return(position); }
void OnOneWayFinished(object sender, EventArgs e) { WaypointsMover mover = sender as WaypointsMover; mover.OneWayFinished -= OnOneWayFinished; ParticleSystem explosion = Instantiate(ExplosionPrefab); explosion.transform.position = mover.transform.position; Destroy(explosion.gameObject, explosion.duration); mover.GetComponent <SpriteRenderer>().enabled = false; mover.GetComponentInChildren <ParticleSystem>().Stop(); Destroy(mover.gameObject, 2f); }
public void StartNextPart(WaypointsMover mover, int fromInd, int toInd, bool isForwardDirection) { Vector3 toPosition = CapturePosition(mover, toInd); //if (IsCurved) { Vector3 handle1 = isForwardDirection ? GetHandle1(mover, fromInd) : GetHandle2(mover, fromInd); Vector3 handle2 = isForwardDirection ? GetHandle2(mover, toInd) : GetHandle1(mover, toInd); _moversParts[mover] = BezierApproximation.GetLines(_capturedPositions[mover][fromInd], handle1, toPosition, handle2, LinesCount); } // else // { // _moversParts[mover] = new List<Vector3> {_capturedPositions[mover][fromInd], toPosition}; // } ClearDestroyedMovers(); }
void Start() { arrow = FindObjectOfType <WaypointsMover>(); }
public Vector3 CapturePosition(WaypointsMover mover, int waypointIndex) { Transform waypoint = Waypoints[waypointIndex]; //RandomWaypoint randomWaypoint = waypoint.GetComponent<RandomWaypoint>(); Vector3 position = waypoint.position; if (!_capturedPositions.ContainsKey(mover)) _capturedPositions[mover] = new Dictionary<int, Vector3>(); _capturedPositions[mover][waypointIndex] = position; return position; }
public float GetLength(WaypointsMover mover, int fromInd, int toInd, bool isForwardDirection) { //if (IsCurved) { Vector3 handle1 = isForwardDirection ? GetHandle1(mover, fromInd) : GetHandle2(mover, fromInd); Vector3 handle2 = isForwardDirection ? GetHandle2(mover, toInd) : GetHandle1(mover, toInd); return BezierApproximation.GetLength(_capturedPositions[mover][fromInd], handle1, _capturedPositions[mover][toInd], handle2, LinesCount); } // else // { // return Vector3.Distance(_capturedPositions[mover][fromInd], _capturedPositions[mover][toInd]); // } }
public void StartNextPart(WaypointsMover mover, int fromInd, int toInd, bool isForwardDirection) { Vector3 toPosition = CapturePosition(mover, toInd); //if (IsCurved) { Vector3 handle1 = isForwardDirection ? GetHandle1(mover, fromInd) : GetHandle2(mover, fromInd); Vector3 handle2 = isForwardDirection ? GetHandle2(mover, toInd) : GetHandle1(mover, toInd); _moversParts[mover] = BezierApproximation.GetLines(_capturedPositions[mover][fromInd], handle1, toPosition, handle2, LinesCount); } // else // { // _moversParts[mover] = new List<Vector3> {_capturedPositions[mover][fromInd], toPosition}; // } ClearDestroyedMovers(); }
public Vector3 GetPoint(WaypointsMover mover, float time) { //if (IsCurved) { float fullLength = BezierApproximation.GetLength(_moversParts[mover]); float remainedLength = fullLength*(time - 0.001f); for (int i = 0; i < _moversParts[mover].Count - 1; i++) { Vector3 point1 = _moversParts[mover][i]; Vector3 point2 = _moversParts[mover][i + 1]; float lineLength = Vector3.Distance(point1, point2); if (lineLength < remainedLength) { remainedLength -= lineLength; } else { return point1 + (point2 - point1).normalized*remainedLength; } } throw new Exception("Get point error for time:" + time + ", remainedLength: " + remainedLength); } // else // { // Vector3 point1 = _moversParts[mover][0]; // Vector3 point2 = _moversParts[mover][1]; // float fullLength = Vector3.Distance(point1, point2); // float remainedLength = fullLength*time; // return point1 + (point2 - point1).normalized * remainedLength; // } }
private Vector3 GetHandle2(WaypointsMover mover, int ind) { Vector3 dPos = _capturedPositions[mover][ind] - Waypoints[ind].position; return GetHandle2(ind) + dPos; }
private Vector3 GetHandle2(WaypointsMover mover, int ind) { Vector3 dPos = _capturedPositions[mover][ind] - Waypoints[ind].position; return(GetHandle2(ind) + dPos); }