// Use this for initialization void Start() { #if UNITY_EDITOR if (attachedObject == null) { throw new MissingReferenceException("Game object '" + this.name + "' is missing variable 'attachedObject'."); } #endif _gameObject = ObjectPoolingManager.Instance.GetObject(attachedObject.name); if (movingPlatformType == MovingPlatformType.StartsWhenPlayerLands) { IAttachableObject attachableObject = _gameObject.GetComponent <IAttachableObject>(); if (attachableObject != null) { attachableObject.Attached += attachableObject_Attached; } else { GameManager.instance.player.OnGroundedPlatformChanged += player_OnGroundedPlatformChanged; } } _iTweenPath = GetComponent <iTweenPath>(); _gameObject.transform.position = _iTweenPath.GetFirstNodeInWorldSpace(); _gameObject.SetActive(true); if (movingPlatformType == MovingPlatformType.MovesAlways) { StartMove(); } }
void Start() { _gameObject = ObjectPoolingManager.Instance.GetObject(movingObjectPrefab.name); if (!goingForward) { _progress = 1f - Mathf.Clamp01(startPositionAsPercentage); } else { _progress = Mathf.Clamp01(startPositionAsPercentage); } spline.CalculateLengths(10); if (movingPlatformType == MovingPlatformType.StartsWhenPlayerLands) { IAttachableObject attachableObject = _gameObject.GetComponent <IAttachableObject>(); if (attachableObject != null) { attachableObject.Attached += attachableObject_Attached; } else { GameManager.instance.player.OnGroundedPlatformChanged += player_OnGroundedPlatformChanged; } _gameObject.transform.localPosition = spline.GetLengthAdjustedPoint(_progress); } else { _isMoving = true; } }
void attachableObject_Attached(IAttachableObject attachableObject, GameObject obj) { if (!_isMoving) { Logger.Info("Player landed on platform, start move..."); StartMove(); attachableObject.Attached -= attachableObject_Attached; } }
private void OnTriggerExit(Collider other) { IAttachableObject attachableObject = other.GetComponent <IAttachableObject>(); if (isPlayerEnter) { attachableObject.ReleaseObject(null); isPlayerEnter = false; } }
private void OnTriggerEnter(Collider other) { IAttachableObject attachableObject = other.GetComponent <IAttachableObject>(); if (attachableObject != null) { attachableObject.AttachObject(transform); isPlayerEnter = true; } }
void OnAttached(IAttachableObject attachableObject, GameObject obj) { if (!_isMoving) { Logger.Info("Player landed on platform, start move..."); _isMoving = true; attachableObject.Attached -= OnAttached; } }
void attachableObject_Attached(IAttachableObject attachableObject, GameObject obj) { if (!_isMoving) { Logger.Info("Player landed on platform, start move..."); _isMoving = true; _moveStartTime = Time.time + startDelayOnEnabled; for (int i = 0; i < totalObjectsOnPath; i++) { _gameObjectTrackingInformation[i].gameObject.GetComponent <IAttachableObject>().Attached -= attachableObject_Attached; } for (int i = 0; i < _synchronizedStartObjects.Length; i++) { _synchronizedStartObjects[i].StartMove(); } _needsToUnSubscribeAttachedEvent = false; } }
static void OnCollectionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { IAttachableObject oldValue = (IAttachableObject)e.OldValue; IAttachableObject newValue = (IAttachableObject)e.NewValue; if (object.ReferenceEquals(oldValue, newValue)) { return; } if (oldValue != null && oldValue.AssociatedObject != null) { oldValue.Detach(); } if (newValue != null && d != null) { if (newValue.AssociatedObject != null) { throw new InvalidOperationException(); } newValue.Attach(d); } }
void OnEnable() { Logger.Info("Enabled moving linear path " + this.name); if (_gameManager == null) { _gameManager = GameManager.instance; } if (_synchronizedStartObjects == null) { List <IMoveable> list = new List <IMoveable>(); for (int i = 0; i < synchronizedStartObjects.Count; i++) { IMoveable moveable = synchronizedStartObjects[i].GetComponent <IMoveable>(); if (moveable != null) { list.Add(moveable); } } _synchronizedStartObjects = list.ToArray(); } if (_segmentLengthPercentages == null) {// first calculate lengths float totalLength = 0f; float[] segmentLengths = new float[nodes.Count - 1]; for (int i = 1; i < nodes.Count; i++) { float distance = Vector3.Distance(nodes[i - 1], nodes[i]); segmentLengths[i - 1] = distance; totalLength += distance; } float[] segmentLengthPercentages = new float[segmentLengths.Length]; for (int i = 0; i < segmentLengths.Length; i++) { segmentLengthPercentages[i] = segmentLengths[i] / totalLength; } _segmentLengthPercentages = segmentLengthPercentages; #region get total time if (useTime) { _totalTime = time; } else if (useSpeed) { Logger.Assert(speedInUnitsPerSecond > 0f, "Speed must be greater than 0."); _totalTime = totalLength / speedInUnitsPerSecond; } Logger.Assert(_totalTime > 0f, "Time must be set to a positive value greater than 0"); #endregion } _gameObjectTrackingInformation = new List <GameObjectTrackingInformation>(); for (int i = 0; i < totalObjectsOnPath; i++) { _gameObjectTrackingInformation.Add(new GameObjectTrackingInformation(ObjectPoolingManager.Instance.GetObject(objectToAttach.name), 0f, startPathDirection == StartPathDirection.Forward ? 1f : -1f)); } if (movingPlatformType == MovingPlatformType.StartsWhenPlayerLands) { for (int i = 0; i < totalObjectsOnPath; i++) { IAttachableObject attachableObject = _gameObjectTrackingInformation[i].gameObject.GetComponent <IAttachableObject>(); if (attachableObject != null) { attachableObject.Attached += attachableObject_Attached; _needsToUnSubscribeAttachedEvent = true; } else { GameManager.instance.player.OnGroundedPlatformChanged += player_OnGroundedPlatformChanged; } } } SetStartPositions(); if (movingPlatformType == MovingPlatformType.MovesAlways) { _isMoving = true; _moveStartTime = Time.time + startDelayOnEnabled; Logger.Info("Start moving linear path " + this.name); } }