示例#1
0
OOTint	MIOSprite_New (OOTint pmPicID, SRCPOS *pmSrcPos)
{
    SpriteInfo		*mySpriteInfo;
    char		myAllocMessage [4096];
    static int		myStSpriteCount = 1;
    
    MIO_CheckOuputIsToWindow ("Sprite.New");
    MIO_CheckOuputWindowIsInGraphicsMode ("Sprite.New");
    MIO_MakePopupWindowVisible ();
    
    mySpriteInfo = (SpriteInfo *) malloc (sizeof (SpriteInfo));
    if (mySpriteInfo == NULL)
    {
	SET_ERRNO (E_PIC_CANT_ALLOC_MEM_FOR_PIC);
	return 0;
    }

//    mySpriteInfo -> picID = pmPicID;
    MIOPic_GetInfoForSprite (pmPicID, &(mySpriteInfo -> picWidth),
			     &(mySpriteInfo -> picHeight),
			     &(mySpriteInfo -> picTransparentColour),
			     &(mySpriteInfo -> picMDPicInfo));
    mySpriteInfo -> x = MIO_selectedRunWindowInfo -> width / 2;
    mySpriteInfo -> y = MIO_selectedRunWindowInfo -> height / 2;
    mySpriteInfo -> spriteRect = MyGetSpriteRect (mySpriteInfo);
    mySpriteInfo -> spriteHeight = FOREGROUND_HEIGHT + myStSpriteCount;
    mySpriteInfo -> centered = FALSE;
    mySpriteInfo -> visible = FALSE;
    myStSpriteCount++;

    MDIO_sprintf (myAllocMessage, "Allocated from picture %d", pmPicID);
    mySpriteInfo -> spriteID = MIO_IDAdd (SPRITE_ID, mySpriteInfo, pmSrcPos, 
					  myAllocMessage, NULL);

    // Couldn't allocate an identifier.  Return the default font ID.
    if (mySpriteInfo -> spriteID == 0)
    {
	MyFreeSprite (mySpriteInfo);
	return 0;
    }

    MIOPic_IncremementSpriteUse (pmPicID);

    MyAddToQueue (MIO_selectedRunWindowInfo, mySpriteInfo);

    return mySpriteInfo -> spriteID;
} // MIOSprite_New
extern OOTint MIOHashmap_New (SRCPOS *pmSrcPos)
{
	hashmap *newmap;
	OOTint myID;

	newmap = newHashmap(32); // arbitrary size hint

	myID = MIO_IDAdd (HASHMAP_ID, newmap, pmSrcPos, "Hashmap", NULL); //comparison bit is set to "Hasmap" just because

    // Couldn't allocate an identifier.  Return the default font ID.
    if (myID == 0)
    {
		deleteHashmap(newmap);
    }
        	    
    return myID;
}