Exemplo n.º 1
0
    public static ExtendedMeshParams DeSerializeExtendedMeshParams(byte[] buffer, ref int offset, int length)
    {
        ExtendedMeshParams parameter = new ExtendedMeshParams();

        parameter.Flags = (ExtendedMeshFlags)DeSerializeUInt32_Le(buffer, ref offset, length);
        return(parameter);
    }
Exemplo n.º 2
0
        public void HandleObjectExtraParams(Message m)
        {
            const ushort FlexiEP        = 0x10;
            const ushort LightEP        = 0x20;
            const ushort SculptEP       = 0x30;
            const ushort ProjectionEP   = 0x40;
            const ushort ExtendedMeshEP = 0x70;

            var req = (ObjectExtraParams)m;

            if (req.CircuitSessionID != req.SessionID ||
                req.CircuitAgentID != req.AgentID)
            {
                return;
            }
            IAgent agent;

            if (!Agents.TryGetValue(req.AgentID, out agent))
            {
                return;
            }

            foreach (var data in req.ObjectData)
            {
#if DEBUG
                m_Log.DebugFormat("ObjectExtraParams localid={0}", data.ObjectLocalID);
#endif

                ObjectPart part;
                if (!Primitives.TryGetValue(data.ObjectLocalID, out part))
                {
                    continue;
                }
                if (!CanEdit(agent, part.ObjectGroup, part.ObjectGroup.GlobalPosition))
                {
                    continue;
                }

                switch (data.ParamType)
                {
                case FlexiEP:
                    if (!data.ParamInUse)
                    {
                        FlexibleParam flexi = part.Flexible;
                        flexi.IsFlexible = false;
                        part.Flexible    = flexi;
                    }
                    else
                    {
                        part.Flexible = FlexibleParam.FromUdpDataBlock(data.ParamData);
                    }
                    break;

                case LightEP:
                    if (!data.ParamInUse)
                    {
                        PointLightParam light = part.PointLight;
                        light.IsLight   = false;
                        part.PointLight = light;
                    }
                    else
                    {
                        part.PointLight = PointLightParam.FromUdpDataBlock(data.ParamData);
                    }
                    break;

                case SculptEP:
                    if (data.ParamInUse && data.ParamData.Length >= 17)
                    {
                        byte[] param = data.ParamData;
                        ObjectPart.PrimitiveShape shape = part.Shape;
                        shape.SculptMap        = new UUID(param, 0);
                        shape.SculptType       = (PrimitiveSculptType)(param[16] & 0x3F);
                        shape.IsSculptInverted = (param[16] & 0x40) != 0;
                        shape.IsSculptMirrored = (param[16] & 0x80) != 0;
                        part.Shape             = shape;
                    }
                    break;

                case ProjectionEP:
                    if (!data.ParamInUse)
                    {
                        ProjectionParam proj = part.Projection;
                        proj.IsProjecting = false;
                        part.Projection   = proj;
                    }
                    else
                    {
                        part.Projection = ProjectionParam.FromUdpDataBlock(data.ParamData);
                    }
                    break;

                case ExtendedMeshEP:
                    if (!data.ParamInUse)
                    {
                        ExtendedMeshParams mesh = part.ExtendedMesh;
                        mesh.Flags        = ExtendedMeshParams.MeshFlags.None;
                        part.ExtendedMesh = mesh;
                    }
                    else
                    {
                        part.ExtendedMesh = ExtendedMeshParams.FromUdpDataBlock(data.ParamData);
                    }
                    break;
                }
            }
        }