public override IObservable <EventPattern <Geom, GeomCollisionEventArgs> > Process(IObservable <Geom> source) { return(source.SelectMany(geom => { var metadata = geom.Tag as GeomMetadata; if (metadata == null) { throw new InvalidOperationException("Collision geom must have a valid metadata object."); } return Observable.Create <EventPattern <Geom, GeomCollisionEventArgs> >(observer => { CollisionEventHandler handler = (g1, g2, contacts, length) => { if (IncludeContacts) { var output = new ContactGeom[length]; Array.Copy(contacts, output, length); contacts = output; } else { contacts = EmptyContacts; } observer.OnNext(new EventPattern <Geom, GeomCollisionEventArgs>(g1, new GeomCollisionEventArgs(g2, contacts))); }; metadata.Collision += handler; return Disposable.Create(() => metadata.Collision -= handler); }); })); }
// Initialises all variables and assigns appropriate delegates. public override void Initialise() { base.Initialise(); playerLost = false; updateEvent += movementController.RotateEntity; updateEvent += movementController.MultiplyPoints; onPlayerCollision += playerProperties.DecaySanityByAmount; onPlayerCollision += sounds.PlayerImpactSound; }
// 主线程循环 internal static void MainThreadUpdate() { FocusEventHandler.MainThreadUpdate(); ScreenResizeEventHandler.MainThreadUpdate(); CollisionEventHandler.MainThreadUpdate(); TriggerEventHandler.MainThreadUpdate(); PointerEventHandlerForScreen.MainThreadUpdate(); PointerEventHandlerForUI.MainThreadUpdate(); PointerEventHandlerForMesh.MainThreadUpdate(); KeyboardEventHandler.MainThreadUpdate(); FrameLoopEventHandler.MainThreadUpdate(); IntervalEventHandler.MainThreadUpdate(); CustomEventHandler.MainThreadUpdate(); TraceEventHandler.MainThreadUpdate(); }
private static void HandleEntityDeath(GameObject gameObject, Health healthComponent) { if (healthComponent.CurrentHealth > 0) { return; } if (gameObject.CompareTag(Tags.ENEMY)) { CollisionEventHandler enemyObject = gameObject.GetComponent <CollisionEventHandler>(); enemyObject.baseAI.DeathAnimation(); } else if (gameObject.CompareTag(Tags.PLAYER)) { PlayerController playerController = gameObject.GetComponent <PlayerController>(); playerController.Death(); } }
public void Clear() { ClearDirtyData(); m_parent = null; m_Speed = 1.0f; m_SizeScale = 1.0f; m_isEnemy = false; m_entityID = -1; m_SrcTransform = null; m_DstTransform = null; m_effectColliderLayer = -1; m_broadcastfuncName = string.Empty; m_playMask = 0; m_bPlay = false; m_AddhitEvent = null; m_AddAttackCollisionHandle = null; m_ReducehitEvent = null; m_ReduceAttackCollisionHandle = null; m_Attack_nFeedBackID = 0; m_Attack_nAttackEntityID = 0; m_Attack_bEnableCollision = false; m_Attack_eventHandlerCount = 0; m_bRePlay = false; }
public void AddCollisionEvent(CollisionEvent collisionEvent, CollisionEventHandler handler) { _events[collisionEvent] += handler; }
public CollisionHandler(IGridAsset act, CollisionEventHandler a) { actuator = act; action = a; }
/// <summary> 移除碰撞事件侦听 ( Mesh ) </summary> /// <param name="target">侦听对象 ( Mesh GameObject ) </param> /// <param name="listener">碰撞事件侦听函数 ( Params - 侦听对象,碰撞事件类型,碰撞数据 ) </param> public void RemoveCollisionListenerForMesh(GameObject target, Action <GameObject, CollisionEventType, Collision> listener) => CollisionEventHandler.RemoveListener(target, listener);
/// <summary> 添加碰撞事件侦听 ( Mesh ) </summary> /// <param name="target">侦听对象 ( Mesh GameObject ) </param> /// <param name="listener">碰撞事件侦听函数 ( Params - 侦听对象,碰撞事件类型,碰撞数据 ) </param> /// <param name="priority">设置侦听函数执行优先级,数值越高优先级越高。同数值情况下,先添加的侦听函数优先级更高,默认为 0 </param> public void AddCollisionListenerForMesh(GameObject target, Action <GameObject, CollisionEventType, Collision> listener, int priority = 0) => CollisionEventHandler.AddListener(target, listener, priority);