//------------------------------------------------------------------------/ // 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); }
//------------------------------------------------------------------------/ // 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); }
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); } }
//------------------------------------------------------------------------/ // 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); } }
public Arguments(Collider target, CollisionMessage message, OnCollisionMessage onCollision) { this.target = target; this.message = message; this.onCollision = onCollision; }
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);
protected override void OnTriggerExit(CollisionMessage message) { Debug.WriteLine($"Trigger Exit {message.Target.Id}"); }
protected override void OnCollisionEnter(CollisionMessage message) { Debug.WriteLine($"Collision Enter {message.Target.Id}"); }