protected override void UpdateInternal() { base.UpdateInternal(); // Trigger left for all entities that currently left the trigger area. foreach (var entity in m_prevQuery) { if (!QueryResult.Contains(entity)) { if (MyVisualScriptLogicProvider.AreaTrigger_Left != null) { MyPlayer.PlayerId playerId; if (MySession.Static.Players.ControlledEntities.TryGetValue(entity.EntityId, out playerId)) { var identity = MySession.Static.Players.TryGetPlayerIdentity(playerId); MyVisualScriptLogicProvider.AreaTrigger_Left(Name, identity.IdentityId); } } m_resultsToRemove.Add(entity); } } // Remove all entities that left. foreach (var entity in m_resultsToRemove) { m_prevQuery.Remove(entity); } m_resultsToRemove.Clear(); // Add and trigger for all entities that entered area. foreach (var entity in QueryResult) { if (m_prevQuery.Add(entity) && MyVisualScriptLogicProvider.AreaTrigger_Entered != null) { MyPlayer.PlayerId playerId; if (MySession.Static.Players.ControlledEntities.TryGetValue(entity.EntityId, out playerId)) { var identity = MySession.Static.Players.TryGetPlayerIdentity(playerId); MyVisualScriptLogicProvider.AreaTrigger_Entered(Name, identity.IdentityId); } } } }