@@ -62,14 +62,76 @@ SendPropMap g_SendPropMap;
6262// -----------------------------------------------------------------------------
6363// edict_t extension
6464// -----------------------------------------------------------------------------
65- object CEdictExt::GetProp ( edict_t * pEdict, const char * prop_name )
65+ int CEdictExt::GetPropInt ( edict_t * pEdict, const char * prop_name )
6666{
67- return CSendProp (pEdict, prop_name).Get ();
67+ CSendProp prop = CSendProp (pEdict, prop_name);
68+ if (prop.GetType () != DPT_Int)
69+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not an int." );
70+
71+ return prop.Get <int >();
6872}
6973
70- void CEdictExt::SetProp ( edict_t * pEdict, const char * prop_name, object value )
74+ float CEdictExt::GetPropFloat ( edict_t * pEdict, const char * prop_name )
7175{
72- CSendProp (pEdict, prop_name).Set (value);
76+ CSendProp prop = CSendProp (pEdict, prop_name);
77+ if (prop.GetType () != DPT_Float)
78+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not a float." );
79+
80+ return prop.Get <float >();
81+ }
82+
83+ const char * CEdictExt::GetPropString ( edict_t * pEdict, const char * prop_name )
84+ {
85+ CSendProp prop = CSendProp (pEdict, prop_name);
86+ if (prop.GetType () != DPT_String)
87+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not a string." );
88+
89+ return prop.Get <const char *>();
90+ }
91+
92+ Vector CEdictExt::GetPropVector ( edict_t * pEdict, const char * prop_name )
93+ {
94+ CSendProp prop = CSendProp (pEdict, prop_name);
95+ if (prop.GetType () != DPT_Vector)
96+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not a vector." );
97+
98+ return prop.Get <Vector>();
99+ }
100+
101+ void CEdictExt::SetPropInt ( edict_t * pEdict, const char * prop_name, int iValue )
102+ {
103+ CSendProp prop = CSendProp (pEdict, prop_name);
104+ if (prop.GetType () != DPT_Int)
105+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not an int." );
106+
107+ prop.Set <int >(iValue);
108+ }
109+
110+ void CEdictExt::SetPropFloat ( edict_t * pEdict, const char * prop_name, float flValue )
111+ {
112+ CSendProp prop = CSendProp (pEdict, prop_name);
113+ if (prop.GetType () != DPT_Float)
114+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not a float." );
115+
116+ prop.Set <float >(flValue);
117+ }
118+
119+ void CEdictExt::SetPropString ( edict_t * pEdict, const char * prop_name, const char * szValue )
120+ {
121+ CSendProp prop = CSendProp (pEdict, prop_name);
122+ if (prop.GetType () != DPT_String)
123+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not a string." );
124+
125+ prop.Set <const char *>(szValue);
126+ }
127+
128+ void CEdictExt::SetPropVector ( edict_t * pEdict, const char * prop_name, Vector vecValue )
129+ {
130+ CSendProp prop = CSendProp (pEdict, prop_name);
131+ if (prop.GetType () != DPT_Vector)
132+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Property is not a vector." );
133+
134+ prop.Set <Vector>(vecValue);
73135}
74136
75137
@@ -186,27 +248,7 @@ CSendProp::CSendProp( edict_t* edict, const char* prop_name )
186248 }
187249}
188250
189- void CSendProp::Set ( object value )
190- {
191- switch (m_send_prop->GetType ())
192- {
193- case DPT_Int: Set<int >(extract<int >(value)); break ;
194- case DPT_Float: Set<float >(extract<float >(value)); break ;
195- case DPT_String: Set<const char *>(extract<const char *>(value)); break ;
196- case DPT_Vector: Set<Vector>(extract<Vector>(value)); break ;
197- }
198- BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Unknown property type." );
199- }
200-
201- object CSendProp::Get ()
251+ inline SendPropType CSendProp::GetType ()
202252{
203- switch (m_send_prop->GetType ())
204- {
205- case DPT_Int: return object (Get<int >());
206- case DPT_Float: return object (Get<float >());
207- case DPT_String: return object (Get<const char *>());
208- case DPT_Vector: return object (Get<Vector>());
209- }
210- BOOST_RAISE_EXCEPTION (PyExc_TypeError, " Unknown property type." );
211- return object (); // Just to disable a warning...
253+ return m_send_prop->GetType ();
212254}
0 commit comments