Пример #1
0
        //------------------------------------------------------------------------/
        // Methods
        //------------------------------------------------------------------------/
        /// <summary>
        /// Constructs a proxy in order to observe another GameObject's trigger messages
        /// </summary>
        /// <param name="target"></param>
        /// <param name="type"></param>
        /// <param name="onTrigger"></param>
        /// <param name="persistent"></param>
        /// <returns></returns>
        public static CollisionProxy Construct(Collider target, CollisionMessage type, OnTriggerMessage onTrigger, bool persistent = true)
        {
            var proxy = target.gameObject.AddComponent <CollisionProxy>();

            proxy.type       = type;
            proxy.onTrigger += onTrigger; // AddListener(new UnityAction<Collider>(onCollision));
            proxy.persistent = persistent;
            return(proxy);
        }
Пример #2
0
        //------------------------------------------------------------------------/
        // Methods
        //------------------------------------------------------------------------/
        /// <summary>
        /// Constructs a proxy in order to observe another GameObject's trigger messages
        /// </summary>
        /// <param name="target"></param>
        /// <param name="type"></param>
        /// <param name="onTrigger"></param>
        /// <param name="persistent"></param>
        /// <returns></returns>
        public static StratusCollisionProxy Construct(Collider target, CollisionMessage type, OnTriggerMessage onTrigger, bool persistent = true)
        {
            var proxy = target.gameObject.AddComponent <StratusCollisionProxy>();

            proxy.type       = type;
            proxy.onTrigger += onTrigger;
            proxy.persistent = persistent;
            return(proxy);
        }
 public static bool IsOfKind <S, T>(this CollisionMessage message, out S stateA, out T stateB)
 {
     if (message.GameObjectA.TryGetState(out stateA) && message.GameObjectB.TryGetState(out stateB))
     {
         return(true);
     }
     stateB = default;
     return(false);
 }
Пример #4
0
    private void OnCollision(CollisionMessage message)
    {
        if (message.IsOfKind(out IGolfBallState golfBallStateA, out IGolfBallState golfBallStateB) &&
            golfBallStateA.TeamId != golfBallStateB.TeamId &&
            (!golfBallStateA.IsKing || !golfBallStateB.IsKing))
        {
            golfBallStateA.IsKing = golfBallStateB.IsKing = false;
        }

        var kings = SystemUtils.FindAll <IGolfBallState>().Where(i => i.IsKing);

        if (kings.Count() == 1)
        {
            gameState.IsOver      = true;
            gameState.WinnerColor = kings.First().Color;
        }
    }
        //------------------------------------------------------------------------/
        // Procedures
        //------------------------------------------------------------------------/
        private void OnCollision(CollisionMessage type, Collider collider, Collision collision)
        {
            if (this.type != type)
            {
                return;
            }

            if (isTrigger)
            {
                triggerCallback?.Invoke(collider);
                onTrigger?.Invoke(collider);
            }
            else
            {
                collisionCallback?.Invoke(collision);
                onCollision?.Invoke(collision);
            }
        }
Пример #6
0
        //------------------------------------------------------------------------/
        // Procedures
        //------------------------------------------------------------------------/
        private void OnCollision(CollisionMessage type, Collider collider, Collision collision)
        {
            if (this.type != type)
            {
                return;
            }

            if (debug)
            {
                this.Log($"Collision of type {type} against {collider}");
            }

            if (isTrigger)
            {
                triggerCallback?.Invoke(collider);
                onTrigger?.Invoke(collider);
            }
            else
            {
                collisionCallback?.Invoke(collision);
                onCollision?.Invoke(collision);
            }
        }
Пример #7
0
 public Arguments(Collider target, CollisionMessage message, OnCollisionMessage onCollision)
 {
     this.target      = target;
     this.message     = message;
     this.onCollision = onCollision;
 }
Пример #8
0
 public Arguments(Collider target, CollisionMessage message, OnTriggerMessage onTrigger)
 {
     this.target    = target;
     this.message   = message;
     this.onTrigger = onTrigger;
 }
 protected virtual void OnTriggerExit(CollisionMessage collisionMessage)
 {
 }
 protected virtual void OnCollisionExit(CollisionMessage collisionMessage)
 {
 }
 protected abstract void OnTriggerExit(CollisionMessage message);
 protected abstract void OnCollisionExit(CollisionMessage message);
Пример #13
0
 protected override void OnTriggerExit(CollisionMessage message)
 {
     Debug.WriteLine($"Trigger Exit {message.Target.Id}");
 }
Пример #14
0
 protected override void OnCollisionEnter(CollisionMessage message)
 {
     Debug.WriteLine($"Collision Enter {message.Target.Id}");
 }