File WfItem.c

File List > game > src > nonEntityGameData > WfItem.c

Go to the documentation of this file

#include "WfItem.h"
#include "DynArray.h"
#include "AssertLib.h"
#include "Scripting.h"
#include <stdlib.h>
#include "lua.h"
#include <lualib.h>
#include "WfBasicAxe.h"
#include "WfBasicBow.h"
#include "WfBasicFishingRod.h"
#include "WfBasicHoe.h"
#include "WfBasicPickaxe.h"
#include "WfBasicScythe.h"
#include "WfBasicSword.h"
#include "Log.h"
#include "WfWoodItem.h"

static VECTOR(struct WfItemDef) gItemDefs = NULL;

void WfInitItems()
{
    gItemDefs = NEW_VECTOR(struct WfItemDef);
    WfAddBuiltinItems();
}

void WfAddItemDef(struct WfItemDef* pDef)
{
    gItemDefs = VectorPush(gItemDefs, pDef);
}

void WfAddBuiltinItems()
{
    WfAddBasicAxeDef();
    WfAddBasicSwordDef();
    WfAddBasicPickaxeDef();
    WfAddBasicScytheDef();
    WfAddBasicFishingRodDef();
    WfAddBasicHoeDef();
    WfAddBasicBowDef();
    WfAddWoodItemDef();
}

int l_GetItemUISpriteName(lua_State* L)
{
    if(lua_isinteger(L, -1))
    {
        int arg = lua_tointeger(L, -1);
        if(arg < VectorSize(gItemDefs) && arg >= 0)
        {
            lua_pushstring(L, gItemDefs[arg].UISpriteName);
            return 1;
        }
        else
        {
            Log_Error("l_GetItemUISpriteName ARGUMENT OUT OF RANGE: %i. Itemdefs size: %i", arg, VectorSize(gItemDefs));
        }
    }
    else
    {
        Log_Error("l_GetItemUISpriteName BAD ARGS, expected int");
    }
    lua_pushstring(L, "no-item");
    return 1;
}

void WfRegisterItemScriptFunctions()
{
    Sc_RegisterCFunction("WfGetItemSpriteName", &l_GetItemUISpriteName);
}

const struct WfItemDef* WfGetItemDef(int itemIndex)
{
    if(itemIndex < 0)
    {
        return NULL;
    }
    return &gItemDefs[itemIndex];
}

struct WfItemDef* WfGetItemDefs(int* numDefs)
{
    *numDefs = VectorSize(gItemDefs);
    return gItemDefs;
}