public static bool HasFlag(this LLUpdateFlags updateFlags, LLUpdateFlags flag) { return (updateFlags & flag) == flag; }
private void SetStatus(ISceneEntity entity, int flags, int enabledInt) { bool enabled = (enabledInt != 0); LLPrimitive prim = entity as LLPrimitive; if (prim == null) { return; } UpdateFlags updateFlags = 0; LLUpdateFlags llUpdateFlags = 0; if ((flags & LSLConstants.STATUS_CAST_SHADOWS) == LSLConstants.STATUS_CAST_SHADOWS) { if (enabled) { prim.Prim.Flags |= PrimFlags.CastShadows; } else { prim.Prim.Flags &= ~PrimFlags.CastShadows; } updateFlags |= UpdateFlags.FullUpdate; } if ((flags & LSLConstants.STATUS_PHANTOM) == LSLConstants.STATUS_PHANTOM) { if (enabled) { prim.Prim.Flags |= PrimFlags.Phantom; } else { prim.Prim.Flags &= ~PrimFlags.Phantom; } updateFlags |= UpdateFlags.PhantomStatus; } if ((flags & LSLConstants.STATUS_BLOCK_GRAB) == LSLConstants.STATUS_BLOCK_GRAB) { prim.BlockGrab = enabled; } if ((flags & LSLConstants.STATUS_DIE_AT_EDGE) == LSLConstants.STATUS_DIE_AT_EDGE) { if (enabled) { prim.Prim.Flags |= PrimFlags.DieAtEdge; } else { prim.Prim.Flags &= ~PrimFlags.DieAtEdge; } llUpdateFlags |= LLUpdateFlags.PrimFlags; } if ((flags & LSLConstants.STATUS_PHYSICS) == LSLConstants.STATUS_PHANTOM) { prim.DynamicsEnabled = enabled; updateFlags |= UpdateFlags.PhysicalStatus; } if ((flags & LSLConstants.STATUS_RETURN_AT_EDGE) == LSLConstants.STATUS_RETURN_AT_EDGE) { if (enabled) { prim.Prim.Flags |= PrimFlags.ReturnAtEdge; } else { prim.Prim.Flags &= ~PrimFlags.ReturnAtEdge; } llUpdateFlags |= LLUpdateFlags.PrimFlags; } if ((flags & LSLConstants.STATUS_ROTATE_X) == LSLConstants.STATUS_ROTATE_X) { prim.AllowRotateX = enabled; } if ((flags & LSLConstants.STATUS_ROTATE_Y) == LSLConstants.STATUS_ROTATE_Y) { prim.AllowRotateY = enabled; } if ((flags & LSLConstants.STATUS_ROTATE_Z) == LSLConstants.STATUS_ROTATE_Z) { prim.AllowRotateZ = enabled; } if ((flags & LSLConstants.STATUS_SANDBOX) == LSLConstants.STATUS_SANDBOX) { if (enabled) { prim.Prim.Flags |= PrimFlags.Sandbox; } else { prim.Prim.Flags &= ~PrimFlags.Sandbox; } llUpdateFlags |= LLUpdateFlags.PrimFlags; } entity.Scene.EntityAddOrUpdate(this, prim, updateFlags, (uint)llUpdateFlags); }
private void AgentSetAppearanceHandler(Packet packet, LLAgent agent) { AgentSetAppearancePacket set = (AgentSetAppearancePacket)packet; UpdateFlags updateFlags = 0; LLUpdateFlags llUpdateFlags = 0; m_log.Debug("Updating avatar appearance with " + set.VisualParam.Length + " visual params, texture=" + (set.ObjectData.TextureEntry.Length > 1 ? "yes" : "no")); //TODO: Store this for cached bake responses for (int i = 0; i < set.WearableData.Length; i++) { //AvatarTextureIndex index = (AvatarTextureIndex)set.WearableData[i].TextureIndex; //UUID cacheID = set.WearableData[i].CacheID; //m_log.DebugFormat("WearableData: {0} is now {1}", index, cacheID); } // Create a TextureEntry if (set.ObjectData.TextureEntry.Length > 1) { agent.TextureEntry = new Primitive.TextureEntry(set.ObjectData.TextureEntry, 0, set.ObjectData.TextureEntry.Length); llUpdateFlags |= LLUpdateFlags.Textures; #region Bake Cache Check for (int i = 0; i < BAKE_INDICES.Length; i++) { int j = BAKE_INDICES[i]; Primitive.TextureEntryFace face = agent.TextureEntry.FaceTextures[j]; if (face != null && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE) { m_log.Debug("Baked texture " + (AvatarTextureIndex)j + " set to " + face.TextureID); } } #endregion Bake Cache Check } if (agent.Scale != set.AgentData.Size) { // This will be modified in UpdateHeight() if VisualParams are also sent agent.Scale = set.AgentData.Size; updateFlags |= UpdateFlags.Scale; } // Create a block of VisualParams if (set.VisualParam.Length > 1) { byte[] visualParams = new byte[set.VisualParam.Length]; for (int i = 0; i < set.VisualParam.Length; i++) { visualParams[i] = set.VisualParam[i].ParamValue; } agent.VisualParams = visualParams; agent.UpdateHeight(); // Create the event that generates an AvatarAppearance packet for this agent m_scene.CreateInterestListEvent(new InterestListEvent ( UUID.Combine(agent.ID, APPEARANCE_EVENT_ID), AVATAR_APPEARANCE, agent.ScenePosition, agent.Scale, agent )); } if (updateFlags != 0 || llUpdateFlags != 0) { m_scene.EntityAddOrUpdate(this, agent, updateFlags, (uint)llUpdateFlags); } }