Ejemplo n.º 1
0
    // 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();
        }
    }
Ejemplo n.º 2
0
    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;
        }
    }
Ejemplo n.º 3
0
    void attachableObject_Attached(IAttachableObject attachableObject, GameObject obj)
    {
        if (!_isMoving)
        {
            Logger.Info("Player landed on platform, start move...");
            StartMove();

            attachableObject.Attached -= attachableObject_Attached;
        }
    }
Ejemplo n.º 4
0
    private void OnTriggerExit(Collider other)
    {
        IAttachableObject attachableObject = other.GetComponent <IAttachableObject>();

        if (isPlayerEnter)
        {
            attachableObject.ReleaseObject(null);
            isPlayerEnter = false;
        }
    }
Ejemplo n.º 5
0
    private void OnTriggerEnter(Collider other)
    {
        IAttachableObject attachableObject = other.GetComponent <IAttachableObject>();

        if (attachableObject != null)
        {
            attachableObject.AttachObject(transform);
            isPlayerEnter = true;
        }
    }
Ejemplo n.º 6
0
    void OnAttached(IAttachableObject attachableObject, GameObject obj)
    {
        if (!_isMoving)
        {
            Logger.Info("Player landed on platform, start move...");

            _isMoving = true;

            attachableObject.Attached -= OnAttached;
        }
    }
Ejemplo n.º 7
0
    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;
        }
    }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
    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);
        }
    }