2016-03-27 11:49:47 +02:00
|
|
|
/*
|
|
|
|
===========================================================================
|
2023-12-31 13:32:46 +01:00
|
|
|
Copyright (C) 2023 the OpenMoHAA team
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
|
|
|
|
OpenMoHAA source code is free software; you can redistribute it
|
|
|
|
and/or modify it under the terms of the GNU General Public License as
|
|
|
|
published by the Free Software Foundation; either version 2 of the License,
|
|
|
|
or (at your option) any later version.
|
|
|
|
|
|
|
|
OpenMoHAA source code is distributed in the hope that it will be
|
|
|
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with OpenMoHAA source code; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
===========================================================================
|
|
|
|
*/
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
#pragma once
|
2016-03-27 11:49:47 +02:00
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
typedef enum {
|
|
|
|
INV_MOVE_NONE,
|
|
|
|
INV_MOVE_BOB,
|
|
|
|
INV_MOVE_SPIN
|
|
|
|
} inv_move_type;
|
2016-03-27 11:49:47 +02:00
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
typedef enum {
|
|
|
|
INV_CASCADE_LEFT,
|
|
|
|
INV_CASCADE_RIGHT
|
|
|
|
} inv_cascade_type;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
INV_HUDANGLES_BASE,
|
|
|
|
INV_HUDANGLES_COMPASS,
|
|
|
|
INV_HUDANGLES_COMPASS_NEEDLE
|
|
|
|
} inv_hudangles_type;
|
|
|
|
|
|
|
|
class item_properties_t : public Class
|
|
|
|
{
|
2016-03-27 11:49:47 +02:00
|
|
|
public:
|
2023-12-31 13:32:46 +01:00
|
|
|
float scale;
|
|
|
|
Vector angles;
|
|
|
|
Vector angledeltas;
|
|
|
|
Vector rotateoffset;
|
|
|
|
Vector offset;
|
|
|
|
inv_move_type move;
|
|
|
|
str model;
|
|
|
|
str anim;
|
2016-03-27 11:49:47 +02:00
|
|
|
};
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
class inventory_item_t : public Class
|
|
|
|
{
|
2016-03-27 11:49:47 +02:00
|
|
|
public:
|
2023-12-31 13:32:46 +01:00
|
|
|
str name;
|
|
|
|
str ammoname;
|
|
|
|
int equip;
|
|
|
|
int width;
|
|
|
|
int height;
|
|
|
|
int barwidth;
|
|
|
|
int barheight;
|
|
|
|
int baroffsetY;
|
|
|
|
int baroffsetX;
|
|
|
|
float modelWindowX;
|
|
|
|
float modelWindowY;
|
|
|
|
float modelWindowWidth;
|
|
|
|
float modelWindowHeight;
|
|
|
|
bool selShaderOnTop;
|
|
|
|
bool checkammo;
|
|
|
|
str command;
|
|
|
|
inv_hudangles_type anglesType;
|
|
|
|
item_properties_t hudprops;
|
|
|
|
item_properties_t invprops;
|
|
|
|
UIReggedMaterial *bgshader;
|
|
|
|
UIReggedMaterial *barshader;
|
|
|
|
UIReggedMaterial *selshader;
|
2016-03-27 11:49:47 +02:00
|
|
|
};
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
class inventory_type_t
|
|
|
|
{
|
2016-03-27 11:49:47 +02:00
|
|
|
public:
|
2023-12-31 13:32:46 +01:00
|
|
|
str name;
|
|
|
|
bool bg_tile;
|
|
|
|
UIReggedMaterial *texture;
|
|
|
|
UIReggedMaterial *bg;
|
|
|
|
UIReggedMaterial *hoverTexture;
|
|
|
|
UIReggedMaterial *selTexture;
|
|
|
|
Container<inventory_item_t *> items;
|
|
|
|
|
|
|
|
int IndexOfItemPtr(inventory_item_t *item);
|
2016-03-27 11:49:47 +02:00
|
|
|
};
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
inline int inventory_type_t::IndexOfItemPtr(inventory_item_t *item)
|
2016-03-27 11:49:47 +02:00
|
|
|
{
|
2023-12-31 13:32:46 +01:00
|
|
|
for (int i = items.NumObjects(); i > 0; i--) {
|
|
|
|
if (items.ObjectAt(i) == item) {
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
2016-03-27 11:49:47 +02:00
|
|
|
}
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
class inventory_t
|
|
|
|
{
|
2016-03-27 11:49:47 +02:00
|
|
|
public:
|
2023-12-31 13:32:46 +01:00
|
|
|
int typewidth;
|
|
|
|
int typeheight;
|
|
|
|
int horizoffset;
|
|
|
|
int vertoffset;
|
|
|
|
int align;
|
|
|
|
inv_cascade_type cascade;
|
|
|
|
str selectsound;
|
|
|
|
str rejectsound;
|
|
|
|
str changesound;
|
|
|
|
Container<inventory_type_t *> types;
|
|
|
|
|
|
|
|
void Clear() { types.ClearObjectList(); }
|
2016-03-27 11:49:47 +02:00
|
|
|
};
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
class invlistener : public Listener
|
|
|
|
{
|
2016-03-27 11:49:47 +02:00
|
|
|
protected:
|
2023-12-31 13:32:46 +01:00
|
|
|
inventory_t *inv;
|
|
|
|
inventory_type_t *curtype;
|
|
|
|
inventory_item_t *curitem;
|
|
|
|
int defaultWidth;
|
|
|
|
int defaultHeight;
|
|
|
|
int defaultBarWidth;
|
|
|
|
int defaultBarHeight;
|
|
|
|
int defaultBarOffsetX;
|
|
|
|
int defaultBarOffsetY;
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
public:
|
2023-12-31 13:32:46 +01:00
|
|
|
CLASS_PROTOTYPE(invlistener);
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
protected:
|
2023-12-31 13:32:46 +01:00
|
|
|
void verify_curitem(void);
|
|
|
|
void verify_curtype(void);
|
|
|
|
void verify_one_arg(Event *ev);
|
2016-03-27 11:49:47 +02:00
|
|
|
|
|
|
|
public:
|
2023-12-31 13:32:46 +01:00
|
|
|
invlistener(inventory_t *i);
|
|
|
|
invlistener();
|
|
|
|
|
|
|
|
bool Load(Script& script);
|
|
|
|
void InvSelectSound(Event *ev);
|
|
|
|
void InvRejectSound(Event *ev);
|
|
|
|
void InvChangeSound(Event *ev);
|
|
|
|
void InvWidth(Event *ev);
|
|
|
|
void InvHeight(Event *ev);
|
|
|
|
void InvHorizOffset(Event *ev);
|
|
|
|
void InvVertOffset(Event *ev);
|
|
|
|
void InvAlign(Event *ev);
|
|
|
|
void InvCascade(Event *ev);
|
|
|
|
void Typedef(Event *ev);
|
|
|
|
void OpenBrace(Event *ev);
|
|
|
|
void CloseBrace(Event *ev);
|
|
|
|
void ButtonShader(Event *ev);
|
|
|
|
void HoverShader(Event *ev);
|
|
|
|
void SelShader(Event *ev);
|
|
|
|
void Background(Event *ev);
|
|
|
|
void BackgroundTile(Event *ev);
|
|
|
|
void Width(Event *ev);
|
|
|
|
void Height(Event *ev);
|
|
|
|
void BarWidth(Event *ev);
|
|
|
|
void BarHeight(Event *ev);
|
|
|
|
void BarOffsetX(Event *ev);
|
|
|
|
void BarOffsetY(Event *ev);
|
|
|
|
void Item(Event *ev);
|
|
|
|
void Ammo(Event *ev);
|
|
|
|
void Equip(Event *ev);
|
|
|
|
void CheckAmmo(Event *ev);
|
|
|
|
void Command(Event *ev);
|
|
|
|
void BGShader(Event *ev);
|
|
|
|
void BarShader(Event *ev);
|
|
|
|
void SelItemShader(Event *ev);
|
|
|
|
void SelItemShaderOnTop(Event *ev);
|
|
|
|
void RotateOffset(Event *ev);
|
|
|
|
void Offset(Event *ev);
|
|
|
|
void Model(Event *ev);
|
|
|
|
void Anim(Event *ev);
|
|
|
|
void Scale(Event *ev);
|
|
|
|
void Angles(Event *ev);
|
|
|
|
void AngleDeltas(Event *ev);
|
|
|
|
void Move(Event *ev);
|
|
|
|
void ModelWindow(Event *ev);
|
|
|
|
void HudRotateOffset(Event *ev);
|
|
|
|
void HudOffset(Event *ev);
|
|
|
|
void HudModel(Event *ev);
|
|
|
|
void HudAnim(Event *ev);
|
|
|
|
void HudScale(Event *ev);
|
|
|
|
void HudAngles(Event *ev);
|
|
|
|
void HudAngleDeltas(Event *ev);
|
|
|
|
void HudMove(Event *ev);
|
|
|
|
void HudCompassAngles(Event *ev);
|
|
|
|
void HudCompassNeedleAngles(Event *ev);
|
2016-03-27 11:49:47 +02:00
|
|
|
};
|
|
|
|
|
2023-12-31 13:32:46 +01:00
|
|
|
bool CL_LoadInventory(const char *filename, inventory_t *inv);
|
|
|
|
inventory_item_t *CL_GetInvItemByName(inventory_t *inv, const char *name);
|
|
|
|
qboolean CL_HasInventoryItem(const char *name);
|
|
|
|
void CL_AmmoCount(const char *name, int *ammo_count, int *max_ammo_count);
|