void ProcessViewerEffect(IClientAPI remoteClient, List <ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlockArray[i] = effect; } ForEachClient( delegate(IClientAPI client) { if (client.AgentId != remoteClient.AgentId) { client.SendViewerEffect(effectBlockArray); } } ); }
public void ViewerEffectHandler(IClientAPI sender, List <ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet List <ViewerEffectPacket.EffectBlock> effectBlock = new List <ViewerEffectPacket.EffectBlock>(); for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlock.Add(effect); } ViewerEffectPacket.EffectBlock[] effectBlockArray = effectBlock.ToArray(); IClientAPI[] LocalClients; lock (m_clients) { LocalClients = new IClientAPI[m_clients.Count]; m_clients.Values.CopyTo(LocalClients, 0); } for (int i = 0; i < LocalClients.Length; i++) { if (LocalClients[i].AgentId != sender.AgentId) { LocalClients[i].SendViewerEffect(effectBlockArray); } } }
protected void ProcessViewerEffect(IClientAPI remoteClient, List <ViewerEffectEventHandlerArg> args) { IScene scene = remoteClient.Scene; // TODO: don't create new blocks if recycling an old packet ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; IScenePresence SP; scene.TryGetScenePresence(remoteClient.AgentId, out SP); for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock { AgentID = args[i].AgentID, Color = args[i].Color, Duration = args[i].Duration, ID = args[i].ID, Type = args[i].Type, TypeData = args[i].TypeData }; effectBlockArray[i] = effect; //Save the color if (effect.Type == (int)EffectType.Beam || effect.Type == (int)EffectType.Point || effect.Type == (int)EffectType.Sphere) { Color4 color = new Color4(effect.Color, 0, false); if (SP != null && !(color.R == 0 && color.G == 0 && color.B == 0)) { PerClientSelectionParticles selection = SP.RequestModuleInterface <PerClientSelectionParticles>(); if (selection != null) { selection.EffectColor = args[i].Color; } } } #if (!ISWIN) foreach (IScenePresence client in scene.GetScenePresences()) { if (client.ControllingClient.AgentId != remoteClient.AgentId) { client.ControllingClient.SendViewerEffect(effectBlockArray); } } #else foreach (IScenePresence client in scene.GetScenePresences().Where(client => client.ControllingClient.AgentId != remoteClient.AgentId)) { client.ControllingClient.SendViewerEffect(effectBlockArray); } #endif } }
/// <summary> /// This sends the little particles to the client if they are selecting something or such /// </summary> protected void SendViewerEffects() { if (!IsSelecting) { return; } ISceneChildEntity SOP = m_SelectedUUID; if (SOP == null) //This IS nesessary, this is how we can clear this out { IsSelecting = false; return; } ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[1]; ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock { AgentID = m_presence.UUID, Color = EffectColor, Duration = 0.9f, ID = UUID.Random(), Type = (int)EffectType.Beam }; //This seems to be what is passed by SL when its send from the server //Bean is the line from hand to object byte[] part = new byte[56]; m_presence.UUID.ToBytes(part, 0); //UUID of av first SOP.UUID.ToBytes(part, 16); //UUID of object SOP.AbsolutePosition.ToBytes(part, 32); //position of object first effect.TypeData = part; effectBlockArray[0] = effect; #if (!ISWIN) m_presence.Scene.ForEachClient( delegate(IClientAPI client) { client.SendViewerEffect(effectBlockArray); } ); #else m_presence.Scene.ForEachClient( client => client.SendViewerEffect(effectBlockArray) ); #endif }
private void ViewerEffectHandler(Packet packet, LLAgent agent) { ViewerEffectPacket effect = (ViewerEffectPacket)packet; // Broadcast this viewer effect to everyone for (int i = 0; i < effect.Effect.Length; i++) { ViewerEffectPacket.EffectBlock block = effect.Effect[i]; if (block.AgentID == agent.ID) { m_scene.CreateInterestListEvent(new InterestListEvent(UUID.Combine(block.ID, EFFECT_EVENT_ID), VIEWER_EFFECT, agent.ScenePosition, Vector3.One, block)); } else { m_log.Warn("Skipping ViewerEffect block for " + block.AgentID + " from " + agent.ID + " (" + agent.Name + ")"); } } }
void ProcessViewerEffect(IClientAPI remoteClient, List <ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet bool discardableEffects = true; ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlockArray[i] = effect; if ((EffectType)effect.Type != EffectType.LookAt && (EffectType)effect.Type != EffectType.Beam) { discardableEffects = false; } //m_log.DebugFormat("[YYY]: VE {0} {1} {2}", effect.AgentID, effect.Duration, (EffectType)effect.Type); } ForEachScenePresence(sp => { if (sp.ControllingClient.AgentId != remoteClient.AgentId) { if (!discardableEffects || (discardableEffects && ShouldSendDiscardableEffect(remoteClient, sp))) { //m_log.DebugFormat("[YYY]: Sending to {0}", sp.UUID); sp.ControllingClient.SendViewerEffect(effectBlockArray); } //else // m_log.DebugFormat("[YYY]: Not sending to {0}", sp.UUID); } }); }
void ProcessViewerEffect(IClientAPI remoteClient, List<ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlockArray[i] = effect; } ForEachClient( delegate(IClientAPI client) { if (client.AgentId != remoteClient.AgentId) client.SendViewerEffect(effectBlockArray); } ); }
/// <summary> /// This sends the little particles to the client if they are selecting something or such /// </summary> protected void SendViewerEffects() { if (!IsSelecting) return; ISceneChildEntity SOP = m_SelectedUUID; if (SOP == null) //This IS necessary, this is how we can clear this out { IsSelecting = false; return; } ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[1]; ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock { AgentID = m_presence.UUID, Color = EffectColor, Duration = 0.9f, ID = UUID.Random(), Type = (int) EffectType.Beam }; //This seems to be what is passed by SL when its send from the server //Bean is the line from hand to object byte[] part = new byte[56]; m_presence.UUID.ToBytes(part, 0); //UUID of av first SOP.UUID.ToBytes(part, 16); //UUID of object SOP.AbsolutePosition.ToBytes(part, 32); //position of object first effect.TypeData = part; effectBlockArray[0] = effect; m_presence.Scene.ForEachClient( client => client.SendViewerEffect(effectBlockArray) ); }
protected void ProcessViewerEffect(IClientAPI remoteClient, List<ViewerEffectEventHandlerArg> args) { IScene scene = remoteClient.Scene; // TODO: don't create new blocks if recycling an old packet ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; IScenePresence SP; scene.TryGetScenePresence(remoteClient.AgentId, out SP); for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock { AgentID = args[i].AgentID, Color = args[i].Color, Duration = args[i].Duration, ID = args[i].ID, Type = args[i].Type, TypeData = args[i].TypeData }; effectBlockArray[i] = effect; //Save the color if (effect.Type == (int) EffectType.Beam || effect.Type == (int) EffectType.Point || effect.Type == (int) EffectType.Sphere) { Color4 color = new Color4(effect.Color, 0, false); if (SP != null && !(color.R == 0 && color.G == 0 && color.B == 0)) { PerClientSelectionParticles selection = SP.RequestModuleInterface<PerClientSelectionParticles>(); if (selection != null) { selection.EffectColor = args[i].Color; } } } foreach ( IScenePresence client in scene.GetScenePresences() .Where(client => client.ControllingClient.AgentId != remoteClient.AgentId)) { client.ControllingClient.SendViewerEffect(effectBlockArray); } } }
void ProcessViewerEffect(IClientAPI remoteClient, List<ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet bool discardableEffects = true; ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlockArray[i] = effect; if ((EffectType)effect.Type != EffectType.LookAt && (EffectType)effect.Type != EffectType.Beam) discardableEffects = false; //m_log.DebugFormat("[YYY]: VE {0} {1} {2}", effect.AgentID, effect.Duration, (EffectType)effect.Type); } ForEachScenePresence(sp => { if (sp.ControllingClient.AgentId != remoteClient.AgentId) { if (!discardableEffects || (discardableEffects && ShouldSendDiscardableEffect(remoteClient, sp))) { //m_log.DebugFormat("[YYY]: Sending to {0}", sp.UUID); sp.ControllingClient.SendViewerEffect(effectBlockArray); } //else // m_log.DebugFormat("[YYY]: Not sending to {0}", sp.UUID); } }); }
public void ViewerEffectHandler(IClientAPI sender, List<ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet List<ViewerEffectPacket.EffectBlock> effectBlock = new List<ViewerEffectPacket.EffectBlock>(); for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlock.Add(effect); } ViewerEffectPacket.EffectBlock[] effectBlockArray = effectBlock.ToArray(); IClientAPI[] LocalClients; lock (m_clients) { LocalClients = new IClientAPI[m_clients.Count]; m_clients.Values.CopyTo(LocalClients, 0); } for (int i = 0; i < LocalClients.Length; i++) { if (LocalClients[i].AgentId != sender.AgentId) { LocalClients[i].SendViewerEffect(effectBlockArray); } } }
void ProcessViewerEffect(IClientAPI remoteClient, List<ViewerEffectEventHandlerArg> args) { // TODO: don't create new blocks if recycling an old packet ViewerEffectPacket.EffectBlock[] effectBlockArray = new ViewerEffectPacket.EffectBlock[args.Count]; ScenePresence SP; TryGetScenePresence(remoteClient.AgentId, out SP); for (int i = 0; i < args.Count; i++) { ViewerEffectPacket.EffectBlock effect = new ViewerEffectPacket.EffectBlock(); effect.AgentID = args[i].AgentID; effect.Color = args[i].Color; effect.Duration = args[i].Duration; effect.ID = args[i].ID; effect.Type = args[i].Type; effect.TypeData = args[i].TypeData; effectBlockArray[i] = effect; //Save the color if (effect.Type == 7 || effect.Type == 9) { if(SP != null) SP.EffectColor = args[i].Color; } } ForEachClient( delegate(IClientAPI client) { if (client.AgentId != remoteClient.AgentId) client.SendViewerEffect(effectBlockArray); } ); }
public void TriggerEffects(object sender, ViewerEffect[] effects) { if (OnTriggerEffects != null) { OnTriggerEffects(sender, effects); } ViewerEffectPacket effect = new ViewerEffectPacket(); effect.AgentData.AgentID = UUID.Zero; effect.AgentData.SessionID = UUID.Zero; effect.Effect = new ViewerEffectPacket.EffectBlock[effects.Length]; for (int i = 0; i < effects.Length; i++) { ViewerEffect currentEffect = effects[i]; ViewerEffectPacket.EffectBlock block = new ViewerEffectPacket.EffectBlock(); block.AgentID = currentEffect.AgentID; block.Color = currentEffect.Color.GetBytes(true); block.Duration = currentEffect.Duration; block.ID = currentEffect.EffectID; block.Type = (byte)currentEffect.Type; block.TypeData = currentEffect.TypeData; effect.Effect[i] = block; } udp.BroadcastPacket(effect, PacketCategory.State); }