Skip to content

Commit e9c5a82

Browse files
committed
Optimized Entity.<get/set>_property_edict methods.
Removed Entity._<get/set>_property methods.
1 parent 2c309b5 commit e9c5a82

1 file changed

Lines changed: 16 additions & 58 deletions

File tree

  • addons/source-python/packages/source-python/entities

addons/source-python/packages/source-python/entities/_base.py

Lines changed: 16 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
from engines.trace import Ray
4040
from engines.trace import TraceFilterSimple
4141
# Entities
42-
from _entities._entity import BaseEntity
4342
from entities import BaseEntityGenerator
43+
from entities import Edict
4444
from entities import TakeDamageInfo
4545
from entities.classes import server_classes
4646
from entities.constants import DamageTypes
@@ -59,6 +59,7 @@
5959
# Mathlib
6060
from mathlib import NULL_VECTOR
6161
# Memory
62+
from memory import get_object_pointer
6263
from memory import make_object
6364
from memory.helpers import MemberFunction
6465
# Players
@@ -68,6 +69,14 @@
6869
from studio.constants import INVALID_ATTACHMENT_INDEX
6970

7071

72+
# =============================================================================
73+
# >> FORWARD IMPORTS
74+
# =============================================================================
75+
# Source.Python Imports
76+
# Entities
77+
from _entities._entity import BaseEntity
78+
79+
7180
# =============================================================================
7281
# >> GLOBAL VARIABLES
7382
# =============================================================================
@@ -529,7 +538,7 @@ def get_property_edict(self, name):
529538
Name of the property to retrieve.
530539
:rtype: Edict
531540
"""
532-
return self._get_property(name, 'Edict')
541+
return make_object(Edict, self.get_property_pointer(name))
533542

534543
def get_property_float(self, name):
535544
"""Return the float property.
@@ -687,29 +696,6 @@ def get_property_vector(self, name):
687696
except ValueError:
688697
return self.get_datamap_property_vector(name)
689698

690-
def _get_property(self, name, prop_type):
691-
"""Verify the type and return the property."""
692-
# Loop through all entity server classes
693-
for server_class in self.server_classes:
694-
695-
# Is the name a member of the current server class?
696-
if name not in server_class.properties:
697-
continue
698-
699-
# Is the type the correct type?
700-
if prop_type != server_class.properties[name].prop_type:
701-
raise TypeError('Property "{0}" is of type {1} not {2}'.format(
702-
name, server_class.properties[name].prop_type, prop_type))
703-
704-
# Return the property for the entity
705-
return getattr(
706-
make_object(server_class._properties, self.pointer), name)
707-
708-
# Raise an error if the property name was not found
709-
raise ValueError(
710-
'Property "{0}" not found for entity type "{1}"'.format(
711-
name, self.classname))
712-
713699
def set_property_bool(self, name, value):
714700
"""Set the boolean property.
715701
@@ -744,7 +730,11 @@ def set_property_edict(self, name, value):
744730
:param Edict value:
745731
The value to set.
746732
"""
747-
self._set_property(name, 'Edict', value)
733+
if not isinstance(value, Edict):
734+
raise TypeError(
735+
f'"{value}" of type "{type(value)}" is not a valid Edict.'
736+
)
737+
self.set_property_pointer(name, get_object_pointer(value))
748738

749739
def set_property_float(self, name, value):
750740
"""Set the float property.
@@ -915,38 +905,6 @@ def set_property_vector(self, name, value):
915905
except ValueError:
916906
self.set_datamap_property_vector(name, value)
917907

918-
def _set_property(self, name, prop_type, value):
919-
"""Verify the type and set the property."""
920-
# Loop through all entity server classes
921-
for server_class in self.server_classes:
922-
923-
# Is the name a member of the current server class?
924-
if name not in server_class.properties:
925-
continue
926-
927-
# Is the type the correct type?
928-
if prop_type != server_class.properties[name].prop_type:
929-
raise TypeError('Property "{0}" is of type {1} not {2}'.format(
930-
name, server_class.properties[name].prop_type, prop_type))
931-
932-
# Set the property for the entity
933-
setattr(make_object(
934-
server_class._properties, self.pointer), name, value)
935-
936-
# Is the property networked?
937-
if server_class.properties[name].networked:
938-
939-
# Notify the change of state
940-
self.edict.state_changed()
941-
942-
# No need to go further
943-
return
944-
945-
# Raise an error if the property name was not found
946-
raise ValueError(
947-
'Property "{0}" not found for entity type "{1}"'.format(
948-
name, self.classname))
949-
950908
def delay(
951909
self, delay, callback, args=(), kwargs=None,
952910
cancel_on_level_end=False):

0 commit comments

Comments
 (0)