コード例 #1
0
ファイル: LLPrimitive.cs プロジェクト: thoys/simian
 public static bool HasFlag(this LLUpdateFlags updateFlags, LLUpdateFlags flag)
 {
     return (updateFlags & flag) == flag;
 }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: LLPrimitive.cs プロジェクト: jhurliman/simian
 public static bool HasFlag(this LLUpdateFlags updateFlags, LLUpdateFlags flag)
 {
     return (updateFlags & flag) == flag;
 }
コード例 #4
0
        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);
            }
        }