コード例 #1
0
 internal void GetTexPrimitiveParams(IEnumerator <IValue> enumerator, PrimitiveParamsType type, AnArray paramList, string paramtypename)
 {
     m_TextureEntryLock.AcquireReaderLock(() =>
     {
         foreach (TextureEntryFace face in GetFaces(ParamsHelper.GetInteger(enumerator, paramtypename)))
         {
             GetTexPrimitiveParams(face, type, paramList);
         }
     });
 }
コード例 #2
0
        public void GetPrimitiveParams(IEnumerator <IValue> enumerator, AnArray paramList)
        {
            PrimitiveParamsType paramtype = ParamsHelper.GetPrimParamType(enumerator);

            switch (paramtype)
            {
            case PrimitiveParamsType.Name:
                paramList.Add(Name);
                break;

            case PrimitiveParamsType.Desc:
                paramList.Add(Description);
                break;

            case PrimitiveParamsType.Position:
                paramList.Add(Position);
                break;

            case PrimitiveParamsType.PosLocal:
                paramList.Add(LocalPosition);
                break;

            case PrimitiveParamsType.Rotation:
                paramList.Add(GlobalRotation);
                break;

            case PrimitiveParamsType.RotLocal:
                paramList.Add(LocalRotation);
                break;

            case PrimitiveParamsType.Size:
                paramList.Add(Size);
                break;

            default:
                if (Enum.IsDefined(typeof(PrimitiveParamsType), (int)paramtype))
                {
                    throw new LocalizedScriptErrorException(this, "PRIM0NotAllowedForAgents", "{0} not allowed for agents", paramtype.GetLslName());
                }
                else
                {
                    throw new LocalizedScriptErrorException(this, "PRIMInvalidParameterType0", "Invalid primitive parameter type {0}", paramtype.GetLslName());
                }
            }
        }
コード例 #3
0
 internal void SetTexPrimitiveParams(PrimitiveParamsType paramtype, AnArray.MarkEnumerator enumerator, ref UpdateChangedFlags flags, ref bool isUpdated, string paramtypename, bool updateParams)
 {
     m_TextureEntryLock.AcquireWriterLock(-1);
     try
     {
         var faces = GetFaces(ParamsHelper.GetInteger(enumerator, paramtypename));
         enumerator.MarkPosition();
         foreach (var face in faces)
         {
             enumerator.GoToMarkPosition();
             SetTexPrimitiveParams(face, paramtype, enumerator, ref flags, ref isUpdated, updateParams);
         }
         m_TextureEntryBytes = m_TextureEntry.GetBytes();
     }
     finally
     {
         m_TextureEntryLock.ReleaseWriterLock();
     }
 }
コード例 #4
0
        public void SetPrimitiveParams(AnArray.MarkEnumerator enumerator)
        {
            PrimitiveParamsType paramtype = ParamsHelper.GetPrimParamType(enumerator);

            switch (paramtype)
            {
            case PrimitiveParamsType.Name:
                Name = ParamsHelper.GetString(enumerator, "PRIM_NAME");
                break;

            case PrimitiveParamsType.Desc:
                Description = ParamsHelper.GetString(enumerator, "PRIM_DESC");
                break;

            case PrimitiveParamsType.Position:
                Position = ParamsHelper.GetVector(enumerator, "PRIM_POSITION");
                break;

            case PrimitiveParamsType.PosLocal:
                LocalPosition = ParamsHelper.GetVector(enumerator, "PRIM_POS_LOCAL");
                break;

            case PrimitiveParamsType.Rotation:
                GlobalRotation = ParamsHelper.GetRotation(enumerator, "PRIM_ROTATION").Normalize();
                break;

            case PrimitiveParamsType.RotLocal:
                LocalRotation = ParamsHelper.GetRotation(enumerator, "PRIM_ROT_LOCAL").Normalize();
                break;

            default:
                if (Enum.IsDefined(typeof(PrimitiveParamsType), (int)paramtype))
                {
                    throw new LocalizedScriptErrorException(this, "PRIM0NotAllowedForAgents", "{0} not allowed for agents", paramtype.GetLslName());
                }
                else
                {
                    throw new LocalizedScriptErrorException(this, "PRIMInvalidParameterType0", "Invalid primitive parameter type {0}", paramtype.GetLslName());
                }
            }
        }
コード例 #5
0
        public static string GetLslName(this PrimitiveParamsType paramtype)
        {
            switch (paramtype)
            {
            case PrimitiveParamsType.AllowUnsit: return("PRIM_ALLOW_UNSIT");

            case PrimitiveParamsType.Alpha: return("PRIM_ALPHA");

            case PrimitiveParamsType.AlphaMode: return("PRIM_ALPHA_MODE");

            case PrimitiveParamsType.BumpShiny: return("PRIM_BUMP_SHINY");

            case PrimitiveParamsType.CastShadows: return("PRIM_CAST_SHADOWS");

            case PrimitiveParamsType.Color: return("PRIM_COLOR");

            case PrimitiveParamsType.Desc: return("PRIM_DESC");

            case PrimitiveParamsType.Flexible: return("PRIM_FLEXIBLE");

            case PrimitiveParamsType.FullBright: return("PRIM_FULLBRIGHT");

            case PrimitiveParamsType.Glow: return("PRIM_GLOW");

            case PrimitiveParamsType.Language: return("PRIM_LANGUAGE");

            case PrimitiveParamsType.LinkTarget: return("PRIM_LINK_TARGET");

            case PrimitiveParamsType.LoopSound: return("PRIM_LOOP_SOUND");

            case PrimitiveParamsType.Material: return("PRIM_MATERIAL");

            case PrimitiveParamsType.Name: return("PRIM_NAME");

            case PrimitiveParamsType.Normal: return("PRIM_NORMAL");

            case PrimitiveParamsType.Omega: return("PRIM_OMEGA");

            case PrimitiveParamsType.Phantom: return("PRIM_PHANTOM");

            case PrimitiveParamsType.Physics: return("PRIM_PHYSICS");

            case PrimitiveParamsType.PhysicsShapeType: return("PRIM_PHYSICS_SHAPE_TYPE");

            case PrimitiveParamsType.PointLight: return("PRIM_POINT_LIGHT");

            case PrimitiveParamsType.Position: return("PRIM_POSITION");

            case PrimitiveParamsType.PosLocal: return("PRIM_POS_LOCAL");

            case PrimitiveParamsType.Projector: return("PRIM_PROJECTOR");

            case PrimitiveParamsType.ProjectorAmbience: return("PRIM_PROJECTOR_AMBIENCE");

            case PrimitiveParamsType.ProjectorEnabled: return("PRIM_PROJECTOR_ENABLED");

            case PrimitiveParamsType.ProjectorFocus: return("PRIM_PROJECTOR_FOCUS");

            case PrimitiveParamsType.ProjectorFov: return("PRIM_PROJECTOR_FOV");

            case PrimitiveParamsType.ProjectorTexture: return("PRIM_PROJECTOR_TEXTURE");

            case PrimitiveParamsType.RemoveAllLanguages: return("PRIM_REMOVE_ALL_LANGUAGES");

            case PrimitiveParamsType.RemoveLanguage: return("PRIM_REMOVE_LANGUAGE");

            case PrimitiveParamsType.AllLanguages: return("PRIM_ALL_LANGUAGES");

            case PrimitiveParamsType.ResetParamToDefaultLang: return("PRIM_RESET_PARAM_TO_DEFAULT_LANGUAGE");

            case PrimitiveParamsType.Rotation: return("PRIM_ROTATION");

            case PrimitiveParamsType.RotLocal: return("PRIM_ROT_LOCAL");

            case PrimitiveParamsType.ScriptedSitOnly: return("PRIM_SCRIPTED_SIT_ONLY");

            case PrimitiveParamsType.SitAnimation: return("PRIM_SIT_ANIMATION");

            case PrimitiveParamsType.SitTarget: return("PRIM_SIT_TARGET");

            case PrimitiveParamsType.Size: return("PRIM_SIZE");

            case PrimitiveParamsType.Slice: return("PRIM_SLICE");

            case PrimitiveParamsType.SoundQueueing: return("PRIM_SOUND_QUEUEING");

            case PrimitiveParamsType.SoundRadius: return("PRIM_SOUND_RADIUS");

            case PrimitiveParamsType.SoundVolume: return("PRIM_SOUND_VOLUME");

            case PrimitiveParamsType.Specular: return("PRIM_SPECULAR");

            case PrimitiveParamsType.TempOnRez: return("PRIM_TEMP_ON_REZ");

            case PrimitiveParamsType.TexGen: return("PRIM_TEXGEN");

            case PrimitiveParamsType.Text: return("PRIM_TEXT");

            case PrimitiveParamsType.Texture: return("PRIM_TEXTURE");

            case PrimitiveParamsType.Type: return("PRIM_TYPE");

            case PrimitiveParamsType.UnSitTarget: return("PRIM_UNSIT_TARGET");

            case PrimitiveParamsType.SitText: return("PRIM_SIT_TEXT");

            case PrimitiveParamsType.TouchText: return("PRIM_TOUCH_TEXT");

            case PrimitiveParamsType.TextureAnim: return("PRIM_TEXTURE_ANIM");

            case PrimitiveParamsType.CollisionSound: return("PRIM_COLLISION_SOUND");

            case PrimitiveParamsType.Velocity: return("PRIM_VELOCITY");

            case PrimitiveParamsType.Acceleration: return("PRIM_ACCELERATION");
            }
            return(string.Format("PRIM_{0}", (int)paramtype));
        }
コード例 #6
0
        private void GetTexPrimitiveParams(TextureEntryFace face, PrimitiveParamsType type, AnArray paramList)
        {
            switch (type)
            {
            case PrimitiveParamsType.Texture:
                paramList.Add(m_Part.GetTextureInventoryItem(face.TextureID));
                paramList.Add(new Vector3(face.RepeatU, face.RepeatV, 0));
                paramList.Add(new Vector3(face.OffsetU, face.OffsetV, 0));
                paramList.Add(face.Rotation);
                break;

            case PrimitiveParamsType.Color:
                paramList.Add(face.TextureColor.AsVector3);
                paramList.Add(face.TextureColor.A);
                break;

            case PrimitiveParamsType.Alpha:
                paramList.Add(face.TextureColor.A);
                break;

            case PrimitiveParamsType.BumpShiny:
                paramList.Add((int)face.Shiny);
                paramList.Add((int)face.Bump);
                break;

            case PrimitiveParamsType.FullBright:
                paramList.Add(face.FullBright);
                break;

            case PrimitiveParamsType.TexGen:
                paramList.Add((int)face.TexMapType);
                break;

            case PrimitiveParamsType.Glow:
                paramList.Add(face.Glow);
                break;

            case PrimitiveParamsType.AlphaMode:
                /* [ PRIM_ALPHA_MODE, integer face, integer alpha_mode, integer mask_cutoff ] */
                if (face.MaterialID == UUID.Zero)
                {
                    paramList.Add(PRIM_ALPHA_MODE_BLEND);
                    paramList.Add(0);
                }
                else
                {
                    try
                    {
                        var mat = m_Part.ObjectGroup.Scene.GetMaterial(face.MaterialID);
                        paramList.Add(mat.DiffuseAlphaMode);
                        paramList.Add(mat.AlphaMaskCutoff);
                    }
                    catch
                    {
                        paramList.Add(PRIM_ALPHA_MODE_BLEND);
                        paramList.Add(0);
                    }
                }
                break;

            case PrimitiveParamsType.Normal:
                /* [ PRIM_NORMAL, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ] */
                if (face.MaterialID == UUID.Zero)
                {
                    paramList.Add(UUID.Zero);
                    paramList.Add(new Vector3(1, 1, 0));
                    paramList.Add(Vector3.Zero);
                    paramList.Add(0f);
                }
                else
                {
                    try
                    {
                        var mat = m_Part.ObjectGroup.Scene.GetMaterial(face.MaterialID);
                        paramList.Add(m_Part.GetTextureInventoryItem(mat.NormMap));
                        paramList.Add(new Vector3(mat.NormRepeatX, mat.NormRepeatY, 0) / Material.MATERIALS_MULTIPLIER);
                        paramList.Add(new Vector3(mat.NormOffsetX, mat.NormOffsetY, 0) / Material.MATERIALS_MULTIPLIER);
                        paramList.Add(mat.NormRotation);
                    }
                    catch
                    {
                        paramList.Add(UUID.Zero);
                        paramList.Add(new Vector3(1, 1, 0));
                        paramList.Add(Vector3.Zero);
                        paramList.Add(0f);
                    }
                }
                break;

            case PrimitiveParamsType.Specular:
                /* [ PRIM_SPECULAR, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector color, integer glossiness, integer environment ] */
                if (face.MaterialID == UUID.Zero)
                {
                    paramList.Add(UUID.Zero);
                    paramList.Add(new Vector3(1, 1, 0));
                    paramList.Add(Vector3.Zero);
                    paramList.Add(0f);
                    paramList.Add(Vector3.One);
                    paramList.Add(0);
                    paramList.Add(0);
                }
                else
                {
                    try
                    {
                        var mat = m_Part.ObjectGroup.Scene.GetMaterial(face.MaterialID);
                        paramList.Add(m_Part.GetTextureInventoryItem(mat.SpecMap));
                        paramList.Add(new Vector3(mat.SpecRepeatX, mat.SpecRepeatY, 0) / Material.MATERIALS_MULTIPLIER);
                        paramList.Add(new Vector3(mat.SpecOffsetX, mat.SpecOffsetY, 0) / Material.MATERIALS_MULTIPLIER);
                        paramList.Add(mat.SpecRotation / Material.MATERIALS_MULTIPLIER);
                        paramList.Add(mat.SpecColor.AsVector3);
                        paramList.Add(mat.SpecExp);
                        paramList.Add(mat.EnvIntensity);
                    }
                    catch
                    {
                        paramList.Add(UUID.Zero);
                        paramList.Add(new Vector3(1, 1, 0));
                        paramList.Add(Vector3.Zero);
                        paramList.Add(0f);
                        paramList.Add(Vector3.One);
                        paramList.Add(0);
                        paramList.Add(0);
                    }
                }
                break;

            default:
                throw new ArgumentException(String.Format("Internal error! Primitive parameter type {0} should not be passed to PrimitiveFace", type));
            }
        }
コード例 #7
0
        private void SetTexPrimitiveParams(TextureEntryFace face, PrimitiveParamsType type, AnArray.MarkEnumerator enumerator, ref UpdateChangedFlags flags, ref bool isUpdated, bool updateParams)
        {
            switch (type)
            {
            case PrimitiveParamsType.Texture:
            {
                UUID    textureID = m_Part.GetTextureParam(enumerator, "PRIM_TEXTURE");
                Vector3 repeats   = ParamsHelper.GetVector(enumerator, "PRIM_TEXTURE");
                Vector3 offsets   = ParamsHelper.GetVector(enumerator, "PRIM_TEXTURE");
                float   rot       = (float)ParamsHelper.GetDouble(enumerator, "PRIM_TEXTURE");

                if (updateParams)
                {
                    if (m_Part.TryFetchTexture(textureID))
                    {
                        face.TextureID = textureID;
                    }
                    face.RepeatU  = (float)repeats.X;
                    face.RepeatV  = (float)repeats.Y;
                    face.OffsetU  = (float)offsets.X;
                    face.OffsetV  = (float)offsets.Y;
                    face.Rotation = rot;
                    flags        |= UpdateChangedFlags.Texture;
                    isUpdated     = true;
                }
            }
            break;

            case PrimitiveParamsType.Color:
            {
                Vector3 color = ParamsHelper.GetVector(enumerator, "PRIM_COLOR");
                double  alpha = ParamsHelper.GetDouble(enumerator, "PRIM_COLOR").Clamp(0, 1);
                if (updateParams)
                {
                    face.TextureColor = new ColorAlpha(color, alpha);
                    flags            |= UpdateChangedFlags.Color;
                    isUpdated         = true;
                }
            }
            break;

            case PrimitiveParamsType.Alpha:
            {
                double alpha = ParamsHelper.GetDouble(enumerator, "PRIM_ALPHA").Clamp(0, 1);
                if (updateParams)
                {
                    ColorAlpha color = face.TextureColor;
                    color.A           = alpha;
                    face.TextureColor = color;
                    flags            |= UpdateChangedFlags.Color;
                    isUpdated         = true;
                }
            }
            break;

            case PrimitiveParamsType.BumpShiny:
            {
                Shininess shiny = (Shininess)ParamsHelper.GetInteger(enumerator, "PRIM_BUMP_SHINY");
                Bumpiness bump  = (Bumpiness)ParamsHelper.GetInteger(enumerator, "PRIM_BUMP_SHINY");
                if (updateParams)
                {
                    face.Shiny = shiny;
                    face.Bump  = bump;
                    flags     |= UpdateChangedFlags.Texture;
                    isUpdated  = true;
                }
            }
            break;

            case PrimitiveParamsType.FullBright:
            {
                bool fbright = ParamsHelper.GetBoolean(enumerator, "PRIM_FULLBRIGHT");
                if (updateParams)
                {
                    face.FullBright = fbright;
                    flags          |= UpdateChangedFlags.Color;
                    isUpdated       = true;
                }
            }
            break;

            case PrimitiveParamsType.TexGen:
            {
                MappingType mapType = (MappingType)ParamsHelper.GetInteger(enumerator, "PRIM_TEXGEN");
                if (updateParams)
                {
                    face.TexMapType = mapType;
                    flags          |= UpdateChangedFlags.Texture;
                    isUpdated       = true;
                }
            }
            break;

            case PrimitiveParamsType.Glow:
            {
                float glow = (float)ParamsHelper.GetDouble(enumerator, "PRIM_GLOW").Clamp(0, 1);
                if (updateParams)
                {
                    face.Glow = glow;
                    flags    |= UpdateChangedFlags.Color;
                    isUpdated = true;
                }
            }
            break;

            case PrimitiveParamsType.AlphaMode:
                /* [ PRIM_ALPHA_MODE, integer face, integer alpha_mode, integer mask_cutoff ] */
            {
                Material mat;
                try
                {
                    mat = m_Part.ObjectGroup.Scene.GetMaterial(face.MaterialID);
                }
                catch
                {
                    mat = new Material();
                }
                mat.DiffuseAlphaMode = ParamsHelper.GetInteger(enumerator, "PRIM_ALPHA_MODE");
                mat.AlphaMaskCutoff  = ParamsHelper.GetInteger(enumerator, "PRIM_ALPHA_MODE");

                if (updateParams)
                {
                    mat.DiffuseAlphaMode = mat.DiffuseAlphaMode.Clamp(0, 3);
                    mat.AlphaMaskCutoff  = mat.AlphaMaskCutoff.Clamp(0, 3);
                    mat.MaterialID       = UUID.Random;
                    m_Part.ObjectGroup.Scene.StoreMaterial(mat);
                    face.MaterialID = mat.MaterialID;
                    flags          |= UpdateChangedFlags.Texture;
                    isUpdated       = true;
                }
            }
            break;

            case PrimitiveParamsType.Normal:
                /* [ PRIM_NORMAL, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ] */
            {
                UUID    texture  = m_Part.GetTextureParam(enumerator, "PRIM_NORMAL");
                Vector3 repeats  = ParamsHelper.GetVector(enumerator, "PRIM_NORMAL");
                Vector3 offsets  = ParamsHelper.GetVector(enumerator, "PRIM_NORMAL");
                double  rotation = ParamsHelper.GetDouble(enumerator, "PRIM_NORMAL");

                if (updateParams)
                {
                    repeats.X *= Material.MATERIALS_MULTIPLIER;
                    repeats.Y *= Material.MATERIALS_MULTIPLIER;
                    offsets.X *= Material.MATERIALS_MULTIPLIER;
                    offsets.Y *= Material.MATERIALS_MULTIPLIER;
                    rotation  %= Math.PI * 2;
                    rotation  *= Material.MATERIALS_MULTIPLIER;

                    Material mat;
                    try
                    {
                        mat = m_Part.ObjectGroup.Scene.GetMaterial(face.MaterialID);
                    }
                    catch
                    {
                        mat = new Material();
                    }
                    mat.NormMap      = texture;
                    mat.NormOffsetX  = (int)Math.Round(offsets.X);
                    mat.NormOffsetY  = (int)Math.Round(offsets.Y);
                    mat.NormRepeatX  = (int)Math.Round(repeats.X);
                    mat.NormRepeatY  = (int)Math.Round(repeats.Y);
                    mat.NormRotation = (int)Math.Round(rotation);
                    mat.MaterialID   = UUID.Random;
                    if (m_Part.TryFetchTexture(texture))
                    {
                        m_Part.ObjectGroup.Scene.StoreMaterial(mat);
                        face.MaterialID = mat.MaterialID;
                    }
                    flags    |= UpdateChangedFlags.Texture;
                    isUpdated = true;
                }
            }
            break;

            case PrimitiveParamsType.Specular:
                /* [ PRIM_SPECULAR, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector color, integer glossiness, integer environment ] */
            {
                UUID    texture = m_Part.GetTextureParam(enumerator, "PRIM_NORMAL");
                Vector3 repeats = ParamsHelper.GetVector(enumerator, "PRIM_SPECULAR");
                Vector3 offsets = ParamsHelper.GetVector(enumerator, "PRIM_SPECULAR");
                repeats *= Material.MATERIALS_MULTIPLIER;
                offsets *= Material.MATERIALS_MULTIPLIER;
                double rotation = ParamsHelper.GetDouble(enumerator, "PRIM_SPECULAR");
                rotation %= Math.PI * 2;
                rotation *= Material.MATERIALS_MULTIPLIER;
                var color       = new ColorAlpha(ParamsHelper.GetVector(enumerator, "PRIM_SPECULAR"), 1);
                int glossiness  = ParamsHelper.GetInteger(enumerator, "PRIM_SPECULAR");
                int environment = ParamsHelper.GetInteger(enumerator, "PRIM_SPECULAR");
                if (updateParams)
                {
                    environment = environment.Clamp(0, 255);
                    glossiness  = glossiness.Clamp(0, 255);
                    Material mat;
                    try
                    {
                        mat = m_Part.ObjectGroup.Scene.GetMaterial(face.MaterialID);
                    }
                    catch
                    {
                        mat = new Material();
                    }
                    mat.SpecColor    = color;
                    mat.SpecMap      = texture;
                    mat.SpecOffsetX  = (int)Math.Round(offsets.X);
                    mat.SpecOffsetY  = (int)Math.Round(offsets.Y);
                    mat.SpecRepeatX  = (int)Math.Round(repeats.X);
                    mat.SpecRepeatY  = (int)Math.Round(repeats.Y);
                    mat.SpecRotation = (int)Math.Round(rotation);
                    mat.EnvIntensity = environment;
                    mat.SpecExp      = glossiness;
                    mat.MaterialID   = UUID.Random;
                    if (m_Part.TryFetchTexture(texture))
                    {
                        m_Part.ObjectGroup.Scene.StoreMaterial(mat);
                        face.MaterialID = mat.MaterialID;
                    }
                    flags    |= UpdateChangedFlags.Texture;
                    isUpdated = true;
                }
            }
            break;

            default:
                throw new ArgumentException($"Internal error! Primitive parameter type {type} should not be passed to PrimitiveFace");
            }
        }