Skip to content

Commit

Permalink
Update CSSDK
Browse files Browse the repository at this point in the history
Update ReHLDS API
  • Loading branch information
s1lentq committed May 13, 2024
1 parent 6c6ff95 commit 92c13f9
Show file tree
Hide file tree
Showing 8 changed files with 432 additions and 24 deletions.
47 changes: 47 additions & 0 deletions reapi/include/cssdk/common/IObjectContainer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, the author gives permission to
* link the code of this program with the Half-Life Game Engine ("HL
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*
*/

#pragma once

class IObjectContainer {
public:
virtual ~IObjectContainer() {}

virtual void Init() = 0;

virtual bool Add(void *newObject) = 0;
virtual bool Remove(void *object) = 0;
virtual void Clear(bool freeElementsMemory) = 0;

virtual void *GetFirst() = 0;
virtual void *GetNext() = 0;

virtual int CountElements() = 0;
virtual bool Contains(void *object) = 0;
virtual bool IsEmpty() = 0;
};
65 changes: 65 additions & 0 deletions reapi/include/cssdk/common/ObjectList.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, the author gives permission to
* link the code of this program with the Half-Life Game Engine ("HL
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*
*/

#pragma once

#include "IObjectContainer.h"

class ObjectList: public IObjectContainer {
public:
EXT_FUNC void Init();
EXT_FUNC bool Add(void *newObject);
EXT_FUNC void *GetFirst();
EXT_FUNC void *GetNext();

ObjectList();
virtual ~ObjectList();

EXT_FUNC void Clear(bool freeElementsMemory = false);
EXT_FUNC int CountElements();
void *RemoveTail();
void *RemoveHead();

bool AddTail(void *newObject);
bool AddHead(void *newObject);
EXT_FUNC bool Remove(void *object);
EXT_FUNC bool Contains(void *object);
EXT_FUNC bool IsEmpty();

typedef struct element_s {
struct element_s *prev; // pointer to the last element or NULL
struct element_s *next; // pointer to the next elemnet or NULL
void *object; // the element's object
} element_t;

protected:
element_t *m_head; // first element in list
element_t *m_tail; // last element in list
element_t *m_current; // current element in list
int m_number;
};
17 changes: 14 additions & 3 deletions reapi/include/cssdk/common/cvardef.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
/***
*
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
*
* This product contains software technology licensed from Id
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
*
* This product contains software technology licensed from Id
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
* All Rights Reserved.
*
* Use, distribution, and modification of this source code and/or resulting
Expand Down Expand Up @@ -36,4 +36,15 @@ typedef struct cvar_s
struct cvar_s *next;
} cvar_t;

using cvar_callback_t = void (*)(const char *pszNewValue);

struct cvar_listener_t
{
cvar_listener_t(const char *var_name, cvar_callback_t handler) :
func(handler), name(var_name) {}

cvar_callback_t func;
const char *name;
};

#endif // CVARDEF_H
8 changes: 4 additions & 4 deletions reapi/include/cssdk/common/quakedef.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@
*/
#pragma once

/* <19039> ../common/quakedef.h:29 */
typedef int BOOL; /* size: 4 */
typedef int BOOL;

// The maximum user messages
#define MAX_USERMESSAGES 256

// user message
#define MAX_USER_MSG_DATA 192

/* <627f> ../common/quakedef.h:137 */
//moved to com_model.h
//typedef struct cache_user_s
//{
// void *data;
//} cache_user_t;

/* <4313b> ../common/quakedef.h:162 */
typedef int (*pfnUserMsgHook)(const char *, int, void *);
223 changes: 223 additions & 0 deletions reapi/include/cssdk/engine/IMessageManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
/*
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/

#pragma once

/**
* @brief Interface for defining message parameters and behavior for a individual message object
*/
class IMessage
{
public:
/**
* @brief The parameter types for a message
*/
enum class ParamType : uint8
{
Byte,
Char,
Short,
Long,
Angle,
Coord,
String,
Entity,
};

/**
* @brief Blocking behavior types for messages
*/
enum class BlockType : uint8
{
Not, // Not a block
Once, // Block once
Set // Set block
};

/**
* @brief Message destinations
*/
enum class Dest : uint8
{
BROADCAST, // Unreliable to all
ONE, // Reliable to one (msg_entity)
ALL, // Reliable to all
INIT, // Write to the init string
PVS, // Ents in PVS of org
PAS, // Ents in PAS of org
PVS_R, // Reliable to PVS
PAS_R, // Reliable to PAS
ONE_UNRELIABLE, // Send to one client, but don't put in reliable stream, put in unreliable datagram
SPEC, // Sends to all spectator proxies
};

virtual ~IMessage() {};

/**
* @brief Returns the number of parameters in the message
* @return The number of parameters
*/
virtual int getParamCount() const = 0;

/**
* @brief Returns the type of the parameter at the given index
* @param index The index of the parameter
* @return The type of the parameter
*/
virtual ParamType getParamType(size_t index) const = 0;

/**
* @brief Returns the integer value of the parameter at the given index
* @param index The index of the parameter
* @return The integer value of the parameter
*/
virtual int getParamInt(size_t index) const = 0;

/**
* @brief Returns the float value of the parameter at the given index
* @param index The index of the parameter
* @return The float value of the parameter
*/
virtual float getParamFloat(size_t index) const = 0;

/**
* @brief Returns the string value of the parameter at the given index
* @param index The index of the parameter
* @return The string value of the parameter
*/
virtual const char* getParamString(size_t index) const = 0;

/**
* @brief Sets the integer value of the parameter at the given index
* @param index The index of the parameter
* @param value The integer value to set
*/
virtual void setParamInt(size_t index, int value) = 0;

/**
* @brief Sets the float value of the parameter at the given index
* @param index The index of the parameter
* @param value The float value to set
*/
virtual void setParamFloat(size_t index, float value) = 0;

/**
* @brief Sets the vector value of the parameter at the given index
* @param index The index of the parameter
* @param pos The vector value to set
*/
virtual void setParamVec(size_t index, const float *pos) = 0;

/**
* @brief Sets the string value of the parameter at the given index
* @param index The index of the parameter
* @param string The string value to set
*/
virtual void setParamString(size_t index, const char *string) = 0;

/**
* @brief Returns the destination of the message
* @return The destination of the message
*/
virtual Dest getDest() const = 0;

/**
* @brief Returns the type of the message
* @return The type of the message
*/
virtual int getType() const = 0;

/**
* @brief Returns the origin of the message
* @return The origin of the message
*/
virtual const float* getOrigin() const = 0;

/**
* @brief Returns the edict associated with the message
* @return The edict associated with the message
*/
virtual struct edict_s* getEdict() const = 0;

/**
* @brief Returns whether the message has been modified
* @return True if the message has been modified, false otherwise
*/
virtual bool isModified() const = 0;

// This must be the last virtual function in class
#ifdef REHLDS_SELF
// Set the copyback buffer for the message
virtual void setCopybackBuffer(struct sizebuf_s *pbuf) = 0;
#endif
};

#define MESSAGEMNGR_VERSION_MAJOR 1
#define MESSAGEMNGR_VERSION_MINOR 0

/**
* @brief Interface manages hooks and blocking behavior game messages
*/
class IMessageManager
{
public:
using hookfunc_t = void (*)(IVoidHookChain<IMessage *> *chain, IMessage *msg);

virtual ~IMessageManager() {};

/**
* @brief Returns the major version of the MessageManager
* @return The major version
*/
virtual int getMajorVersion() const = 0;

/**
* @brief Returns the minor version of the MessageManager
* @return The minor version
*/
virtual int getMinorVersion() const = 0;

/**
* @brief Returns the blocking behavior for the given message type
* @param msgType The message type
* @return The blocking behavior for the given message type
*/
virtual IMessage::BlockType getMessageBlock(int msgType) const = 0;

/**
* @brief Sets the blocking behavior for the given message type
* @param msgType The message type
* @param blockType The blocking behavior to set
*/
virtual void setMessageBlock(int msgType, IMessage::BlockType blockType) = 0;

/**
* @brief Registers a hook function for the given message type
* @param msgType The message type to register the hook for
* @param handler The hook function to register
* @param priority The priority of the hook function (see enum HookChainPriority)
*/
virtual void registerHook(int msgType, hookfunc_t handler, int priority = HC_PRIORITY_DEFAULT) = 0;

/**
* @brief Unregisters a hook function for the given message type
* @param msgType The message type to unregister the hook for
* @param handler The hook function to unregister
*/
virtual void unregisterHook(int msgType, hookfunc_t handler) = 0;
};
Loading

0 comments on commit 92c13f9

Please sign in to comment.