コード例 #1
0
    public SpriteMesh_Managed AddSprite(SpriteRoot sprite)
    {
        if (sprite.manager == this && sprite.AddedToManager)
        {
            return((SpriteMesh_Managed)sprite.spriteMesh);
        }
        if (!this.initialized)
        {
            if (this.spriteAddQueue == null)
            {
                this.spriteAddQueue = new List <SpriteRoot>();
            }
            this.spriteAddQueue.Add(sprite);
            return(null);
        }
        if (this.availableBlocks.Empty)
        {
            this.EnlargeArrays(this.allocBlockSize);
        }
        int index = this.availableBlocks.Head.index;

        this.availableBlocks.Remove(this.availableBlocks.Head);
        SpriteMesh_Managed spriteMesh_Managed = this.sprites[index];

        sprite.spriteMesh            = spriteMesh_Managed;
        sprite.manager               = this;
        sprite.AddedToManager        = true;
        spriteMesh_Managed.drawLayer = sprite.drawLayer;
        this.bones[index]            = sprite.gameObject.transform;
        this.bindPoses[index]        = this.bones[index].worldToLocalMatrix * sprite.transform.localToWorldMatrix;
        this.activeBlocks.Add(spriteMesh_Managed);
        spriteMesh_Managed.Init();
        this.SortDrawingOrder();
        this.vertCountChanged = true;
        this.vertsChanged     = true;
        this.uvsChanged       = true;
        return(spriteMesh_Managed);
    }
コード例 #2
0
ファイル: SpriteManager.cs プロジェクト: xdegtyarev/ld23
	/// <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;
	}