Skip to content

Commit 4da0b42

Browse files
authored
Merge pull request #224 from jsza/master
Improve performance of effect wrappers.
2 parents a093bdb + 967600d commit 4da0b42

File tree

1 file changed

+27
-14
lines changed
  • addons/source-python/packages/source-python/effects

1 file changed

+27
-14
lines changed

addons/source-python/packages/source-python/effects/__init__.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,13 @@ def beam(recipients, start, end, parent=False, **kwargs):
6666
:param kwargs:
6767
Additional attributes that will be send to the effect.
6868
"""
69-
entity = TempEntity('BeamEntPoint')
69+
_entity = kwargs.pop('_entity', None)
70+
if _entity is None:
71+
entity = TempEntity('BeamEntPoint')
72+
for attr, value in kwargs.items():
73+
setattr(entity, attr, value)
74+
else:
75+
entity = _entity
7076

7177
def get_vec(value):
7278
if isinstance(value, int):
@@ -119,8 +125,15 @@ def polygon(recipients, points, parent=False, **kwargs):
119125

120126
start = points[0]
121127
points = dict(enumerate(points))
128+
129+
entity = TempEntity('BeamEntPoint')
130+
for attr, value in kwargs.items():
131+
setattr(entity, attr, value)
132+
122133
for index, point in points.items():
123-
beam(recipients, point, points.get(index + 1, start), parent, **kwargs)
134+
beam(
135+
recipients, point, points.get(index + 1, start), parent,
136+
_entity=entity, **kwargs)
124137

125138

126139
def square(recipients, start, end, **kwargs):
@@ -150,12 +163,13 @@ def square(recipients, start, end, **kwargs):
150163
(c, a),
151164
)
152165

166+
entity = TempEntity('BeamPoints')
167+
for attr, value in kwargs.items():
168+
setattr(entity, attr, value)
169+
153170
for p1, p2 in lines:
154-
entity = TempEntity('BeamPoints')
155171
entity.start_point = p1
156172
entity.end_point = p2
157-
for attr, value in kwargs.items():
158-
setattr(entity, attr, value)
159173

160174
entity.create(recipients)
161175

@@ -204,12 +218,13 @@ def box(recipients, start, end, **kwargs):
204218
(d, h)
205219
)
206220

221+
entity = TempEntity('BeamPoints')
222+
for attr, value in kwargs.items():
223+
setattr(entity, attr, value)
224+
207225
for p1, p2 in lines:
208-
entity = TempEntity('BeamPoints')
209226
entity.start_point = p1
210227
entity.end_point = p2
211-
for attr, value in kwargs.items():
212-
setattr(entity, attr, value)
213228

214229
entity.create(recipients)
215230

@@ -239,6 +254,10 @@ def ball(recipients, center, radius, steps=15, upper_half=True, lower_half=True,
239254
# Make sure that at least one argument is True
240255
assert not (upper_half == lower_half == False)
241256

257+
entity = TempEntity('BeamRingPoint')
258+
for attr, value in kwargs.items():
259+
setattr(entity, attr, value)
260+
242261
step = float(radius) / steps
243262
for x in range(steps):
244263
dist = step * x
@@ -247,22 +266,16 @@ def ball(recipients, center, radius, steps=15, upper_half=True, lower_half=True,
247266
rad = 2 * radius * (1 - (float(x) / steps) ** 2) ** 0.5
248267

249268
if upper_half:
250-
entity = TempEntity('BeamRingPoint')
251269
entity.center = org
252270
entity.start_radius = rad
253271
entity.end_radius = rad - 0.1
254-
for attr, value in kwargs.items():
255-
setattr(entity, attr, value)
256272

257273
entity.create(recipients)
258274

259275
if x and lower_half:
260276
org.z -= 2 * dist
261-
entity = TempEntity('BeamRingPoint')
262277
entity.center = org
263278
entity.start_radius = rad
264279
entity.end_radius = rad - 0.1
265-
for attr, value in kwargs.items():
266-
setattr(entity, attr, value)
267280

268281
entity.create(recipients)

0 commit comments

Comments
 (0)