core/CellRecipientFilter.h
author Nicholas Hastings <skamonkey@gmail.com>
Thu Aug 15 10:18:27 2013 -0400 (2013-08-15)
changeset 4015 5f1fcac17b60
parent 3970 f105ae16b49e
permissions -rw-r--r--
Fixed chat trigger crash regression on ep1 (bug 5394, r=asherkin).
     1 /**
     2  * vim: set ts=4 :
     3  * =============================================================================
     4  * SourceMod
     5  * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
     6  * =============================================================================
     7  *
     8  * This program is free software; you can redistribute it and/or modify it under
     9  * the terms of the GNU General Public License, version 3.0, as published by the
    10  * Free Software Foundation.
    11  * 
    12  * This program is distributed in the hope that it will be useful, but WITHOUT
    13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
    15  * details.
    16  *
    17  * You should have received a copy of the GNU General Public License along with
    18  * this program.  If not, see <http://www.gnu.org/licenses/>.
    19  *
    20  * As a special exception, AlliedModders LLC gives you permission to link the
    21  * code of this program (as well as its derivative works) to "Half-Life 2," the
    22  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
    23  * by the Valve Corporation.  You must obey the GNU General Public License in
    24  * all respects for all other code used.  Additionally, AlliedModders LLC grants
    25  * this exception to all derivative works.  AlliedModders LLC defines further
    26  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
    27  * or <http://www.sourcemod.net/license.php>.
    28  *
    29  * Version: $Id$
    30  */
    31 
    32 #ifndef _INCLUDE_SOURCEMOD_CELLRECIPIENTFILTER_H_
    33 #define _INCLUDE_SOURCEMOD_CELLRECIPIENTFILTER_H_
    34 
    35 #include <irecipientfilter.h>
    36 #include <sp_vm_types.h>
    37 
    38 class CellRecipientFilter : public IRecipientFilter
    39 {
    40 public:
    41 	CellRecipientFilter() : m_IsReliable(false), m_IsInitMessage(false), m_Size(0) {}
    42 	~CellRecipientFilter() {}
    43 public: //IRecipientFilter
    44 	bool IsReliable() const;
    45 	bool IsInitMessage() const;
    46 	int GetRecipientCount() const;
    47 #if SOURCE_ENGINE == SE_DOTA
    48 	CEntityIndex GetRecipientIndex(int slot) const;
    49 #else
    50 	int GetRecipientIndex(int slot) const;
    51 #endif
    52 public:
    53 	void Initialize(const cell_t *ptr, size_t count);
    54 	void SetToReliable(bool isreliable);
    55 	void SetToInit(bool isinitmsg);
    56 	void Reset();
    57 private:
    58 	cell_t m_Players[255];
    59 	bool m_IsReliable;
    60 	bool m_IsInitMessage;
    61 	size_t m_Size;
    62 };
    63 
    64 inline void CellRecipientFilter::Reset()
    65 {
    66 	m_IsReliable = false;
    67 	m_IsInitMessage = false;
    68 	m_Size = 0;
    69 }
    70 
    71 inline bool CellRecipientFilter::IsReliable() const
    72 {
    73 	return m_IsReliable;
    74 }
    75 
    76 inline bool CellRecipientFilter::IsInitMessage() const
    77 {
    78 	return m_IsInitMessage;
    79 }
    80 
    81 inline int CellRecipientFilter::GetRecipientCount() const
    82 {
    83 	return m_Size;
    84 }
    85 
    86 #if SOURCE_ENGINE == SE_DOTA
    87 inline CEntityIndex CellRecipientFilter::GetRecipientIndex(int slot) const
    88 #else
    89 inline int CellRecipientFilter::GetRecipientIndex(int slot) const
    90 #endif
    91 {
    92 	int ret;
    93 	if ((slot < 0) || (slot >= GetRecipientCount()))
    94 	{
    95 		ret = -1;
    96 	}
    97 	else
    98 	{
    99 		ret = static_cast<int>(m_Players[slot]);
   100 	}
   101 
   102 #if SOURCE_ENGINE == SE_DOTA
   103 	return CEntityIndex(ret);
   104 #else
   105 	return ret;
   106 #endif
   107 }
   108 
   109 inline void CellRecipientFilter::SetToInit(bool isinitmsg)
   110 {
   111 	m_IsInitMessage = isinitmsg;
   112 }
   113 
   114 inline void CellRecipientFilter::SetToReliable(bool isreliable)
   115 {
   116 	m_IsReliable = isreliable;
   117 }
   118 
   119 inline void CellRecipientFilter::Initialize(const cell_t *ptr, size_t count)
   120 {
   121 	memcpy(m_Players, ptr, count * sizeof(cell_t));
   122 	m_Size = count;
   123 }
   124 
   125 #endif //_INCLUDE_SOURCEMOD_CELLRECIPIENTFILTER_H_