diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 1a6d5e58dd..a7238fd6af 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -50,6 +50,8 @@ namespace OpenSim.Framework Whisper = 0, Say = 1, Shout = 2, + StartTyping = 4, + StopTyping = 5, Broadcast = 0xFF } ; diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs index 7414340c3a..978f34e7c7 100644 --- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs @@ -83,11 +83,7 @@ namespace OpenSim.Region.ClientStack break; case PacketType.ChatFromViewer: ChatFromViewerPacket inchatpack = (ChatFromViewerPacket) Pack; - if (Helpers.FieldToUTF8String(inchatpack.ChatData.Message) == "") - { - //empty message so don't bother with it - break; - } + string fromName = ""; //ClientAvatar.firstname + " " + ClientAvatar.lastname; byte[] message = inchatpack.ChatData.Message; byte type = inchatpack.ChatData.Type; diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs index f12612ebf6..d5edc6d6b8 100644 --- a/OpenSim/Region/Environment/Modules/ChatModule.cs +++ b/OpenSim/Region/Environment/Modules/ChatModule.cs @@ -143,7 +143,6 @@ namespace OpenSim.Region.Environment.Modules new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0); fromName = avatar.Firstname + " " + avatar.Lastname; fromAgentID = e.Sender.AgentId; - avatar = null; } string typeName; @@ -166,82 +165,101 @@ namespace OpenSim.Region.Environment.Modules break; } - m_log.Verbose("CHAT", - fromName + " (" + e.Channel + " @ " + scene.RegionInfo.RegionName + ") " + typeName + ": " + - e.Message); - - if (m_irc.Connected) + if (e.Message.Length > 0) { - m_irc.PrivMsg(fromName, scene.RegionInfo.RegionName, e.Message); - } + m_log.Verbose("CHAT", + fromName + " (" + e.Channel + " @ " + scene.RegionInfo.RegionName + ") " + typeName + ": " + + e.Message); - if (e.Channel == 0) - { - foreach (Scene m_scene in m_scenes) + if (m_irc.Connected) { - m_scene.ForEachScenePresence(delegate(ScenePresence presence) + m_irc.PrivMsg(fromName, scene.RegionInfo.RegionName, e.Message); + } + + if (e.Channel == 0) + { + foreach (Scene m_scene in m_scenes) + { + m_scene.ForEachScenePresence(delegate(ScenePresence presence) { if (!presence.IsChildAgent) { int dis = -100000; LLVector3 avatarRegionPos = presence.AbsolutePosition + - new LLVector3( - scene.RegionInfo.RegionLocX * 256, - scene.RegionInfo.RegionLocY * 256, - 0); + new LLVector3( + scene.RegionInfo.RegionLocX * 256, + scene.RegionInfo.RegionLocY * 256, + 0); dis = Math.Abs((int)avatarRegionPos.GetDistanceTo(fromRegionPos)); switch (e.Type) { - case ChatTypeEnum.Whisper: - if (dis < m_whisperdistance) - { - //should change so the message is sent through the avatar rather than direct to the ClientView - presence.ControllingClient.SendChatMessage(message, - type, - fromPos, - fromName, - fromAgentID); - } - break; - case ChatTypeEnum.Say: - if (dis < m_saydistance) - { - //Console.WriteLine("sending chat"); - presence.ControllingClient.SendChatMessage(message, - type, - fromPos, - fromName, - fromAgentID); - } - break; - case ChatTypeEnum.Shout: - if (dis < m_shoutdistance) - { - presence.ControllingClient.SendChatMessage(message, - type, - fromPos, - fromName, - fromAgentID); - } - break; - - case ChatTypeEnum.Broadcast: + case ChatTypeEnum.Whisper: + if (dis < m_whisperdistance) + { + //should change so the message is sent through the avatar rather than direct to the ClientView presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName, fromAgentID); - break; - default: - break; + } + break; + case ChatTypeEnum.Say: + if (dis < m_saydistance) + { + //Console.WriteLine("sending chat"); + presence.ControllingClient.SendChatMessage(message, + type, + fromPos, + fromName, + fromAgentID); + } + break; + case ChatTypeEnum.Shout: + if (dis < m_shoutdistance) + { + presence.ControllingClient.SendChatMessage(message, + type, + fromPos, + fromName, + fromAgentID); + } + break; + + case ChatTypeEnum.Broadcast: + presence.ControllingClient.SendChatMessage(message, + type, + fromPos, + fromName, + fromAgentID); + break; + default: + break; } } }); + } } } + else + { + if (avatar != null) + { + switch (e.Type) + { + case ChatTypeEnum.StartTyping: + avatar.setTyping(true); + break; + case ChatTypeEnum.StopTyping: + avatar.setTyping(false); + break; + } + } + } + } } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 76d307fa35..ab19973b55 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -53,6 +53,8 @@ namespace OpenSim.Region.Environment.Scenes private LLVector3 m_requestedSitOffset = new LLVector3(); private float m_sitAvatarHeight = 2.0f; + private bool m_isTyping = false; + private Quaternion m_bodyRot; private byte[] m_visualParams; private AvatarWearable[] m_wearables; @@ -367,7 +369,6 @@ namespace OpenSim.Region.Environment.Scenes AddToPhysicalScene(); m_physicsActor.Flying = isFlying; - m_scene.SendAllSceneObjectsToClient(this); } @@ -662,6 +663,10 @@ namespace OpenSim.Region.Environment.Scenes { SendAnimPack(Animations.AnimsLLUUID["CROUCH"], 1); } + else if (m_isTyping) + { + SendAnimPack(Animations.AnimsLLUUID["TYPE"], 1); + } else { SendAnimPack(Animations.AnimsLLUUID["STAND"], 1); @@ -670,7 +675,6 @@ namespace OpenSim.Region.Environment.Scenes } } - protected void AddNewMovement(Vector3 vec, Quaternion rotation) { if (m_isChildAgent) @@ -708,6 +712,19 @@ namespace OpenSim.Region.Environment.Scenes m_forcesList.Add(newVelocity); } + public void setTyping(bool typing) + { + if (m_isChildAgent) + { + MainLog.Instance.Warn("setTyping called on child agent"); + return; + } + + m_isTyping = typing; + + UpdateMovementAnimations(true); + } + #endregion #region Overridden Methods diff --git a/bin/data/avataranimations.xml b/bin/data/avataranimations.xml index 2238474b56..2a537274ff 100644 --- a/bin/data/avataranimations.xml +++ b/bin/data/avataranimations.xml @@ -11,4 +11,5 @@ 7a4e87fe-de39-6fcb-6223-024b00893244 201f3fdf-cb1f-dbec-201f-7333e328ae7c 47f5f6fb-22e5-ae44-f871-73aaaf4a6022 + c541c47f-e0c0-058b-ad1a-d6ae3a4584d9