// Removes the sprite with the specified managed mesh from the manager. public void RemoveSprite(SpriteMesh_Managed sprite) { vertices[sprite.mv1] = Vector3.zero; vertices[sprite.mv2] = Vector3.zero; vertices[sprite.mv3] = Vector3.zero; vertices[sprite.mv4] = Vector3.zero; // Remove the sprite from the billboarded list // since that list should only contain active // sprites: /* if (sprite.billboarded) activeBillboards.Remove(sprite); else */ activeBlocks.Remove(sprite); // Reset the bone: if (gameObject != null) bones[sprite.index] = transform; // Clean the sprite's settings: sprite.Clear(); sprite.sprite.spriteMesh = null; sprite.sprite = null; availableBlocks.Add(sprite); vertsChanged = true; }
public void RemoveChild(GameObject go) { IUIObject obj = (IUIObject)go.GetComponent("IUIObject"); if (obj != null) { if (uiObjs.Rewind()) { do { if (uiObjs.Current.val == obj) { uiObjs.Remove(uiObjs.Current); break; } } while (uiObjs.MoveNext()); } if (obj.Container == (IUIContainer)this) { obj.Container = null; } } else { UIPanelBase panel = (UIPanelBase)go.GetComponent(typeof(UIPanelBase)); if (panel != null) { if (childPanels.Rewind()) { do { if (childPanels.Current.val == panel) { childPanels.Remove(childPanels.Current); break; } } while (childPanels.MoveNext()); } if (panel.Container == (IUIContainer)this) { panel.Container = null; } } } RemoveSubject(go); }
/// <summary> /// Adds the specified sprite to the SpriteManager. /// </summary> /// <param name="go">Reference to the desired sprite.</param> /// <returns>A reference to the sprite's managed mesh.</returns> public SpriteMesh_Managed AddSprite(SpriteRoot sprite) { int spriteIndex; // See if the sprite is already added: if(sprite.manager == this && sprite.AddedToManager) return (SpriteMesh_Managed)sprite.spriteMesh; /* if (ensureUnique) if (AlreadyAdded(sprite)) return (SpriteMesh_Managed) sprite.spriteMesh; */ // See if we're ready to add sprites yet, // and if not, add the sprite to our deferred // add queue: if(!initialized) { if (spriteAddQueue == null) spriteAddQueue = new List<SpriteRoot>(); spriteAddQueue.Add(sprite); return null; } // Get an available sprite: if (availableBlocks.Empty) EnlargeArrays(allocBlockSize); // If we're out of available sprites, allocate some more: // Use a sprite from the list of available blocks: spriteIndex = availableBlocks.Head.index; availableBlocks.Remove(availableBlocks.Head); // Now that we're using this one, remove it from the available list // Assign the new sprite: SpriteMesh_Managed newSpritesMesh = sprites[spriteIndex]; sprite.spriteMesh = newSpritesMesh; sprite.manager = this; sprite.AddedToManager = true; newSpritesMesh.drawLayer = sprite.drawLayer; // Associate the sprite's bone: bones[spriteIndex] = sprite.gameObject.transform; // meshRenderer.bones = bones; bindPoses[spriteIndex] = bones[spriteIndex].worldToLocalMatrix * sprite.transform.localToWorldMatrix; /* // Save this to an active list now that it is in-use: if (billboarded) { newSprite.billboarded = true; activeBillboards.Add(newSprite); } else */ activeBlocks.Add(newSpritesMesh); newSpritesMesh.Init(); // Sort the draw layers: SortDrawingOrder(); // Set our flags: vertCountChanged = true; vertsChanged = true; uvsChanged = true; return newSpritesMesh; }
// Helper method that removes a pointer listener from a list: protected void RemovePtrListener(EZLinkedList<EZLinkedListNode<PointerInfoDelegate>> list, PointerInfoDelegate del) { for (EZLinkedListIterator<EZLinkedListNode<PointerInfoDelegate>> i = list.Begin(); !i.Done; i.Next()) { if (i.Current.val == del) { // Save it: EZLinkedListNode<PointerInfoDelegate> node = i.Current; // Remove it from the active list: list.Remove(i.Current); // Add it to our free pool: listenerPool.Add(node); // We're done. i.End(); break; } } }