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); }
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; } } }