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