mirror of
https://github.com/Sei-Lisa/LSL-PyOptimizer
synced 2025-07-01 23:58:20 +00:00
Implement llFrand and llGenerateKey when in Calc mode.
This commit is contained in:
parent
1b7dbd9453
commit
ba9511e2ff
2 changed files with 32 additions and 6 deletions
|
@ -1051,11 +1051,30 @@ def llFloor(f):
|
||||||
return -2147483648
|
return -2147483648
|
||||||
return int(math.floor(f))
|
return int(math.floor(f))
|
||||||
|
|
||||||
# not implemented as it does not give the same output for the same input
|
if lslcommon.IsCalc:
|
||||||
#def llFrand(lim):
|
import time
|
||||||
|
from hashlib import md5
|
||||||
|
import random
|
||||||
|
def llFrand(lim):
|
||||||
|
assert isfloat(lim)
|
||||||
|
lim = F32(lim) # apply constraints
|
||||||
|
val = random.random() * lim
|
||||||
|
# Truncate, rather than rounding
|
||||||
|
m, e = math.frexp(val)
|
||||||
|
m = math.floor(m * 8388608.0) / 8388608.0
|
||||||
|
val = F32(math.ldexp(m, e))
|
||||||
|
if val == lim:
|
||||||
|
val = 0.
|
||||||
|
return val
|
||||||
|
|
||||||
# not implemented as it does not give the same output for the same input
|
def llGenerateKey():
|
||||||
#def llGenerateKey():
|
s = md5((u'%.17g %f %f' % (time.time(), random.random(),
|
||||||
|
random.random())).encode('utf8')
|
||||||
|
).hexdigest()
|
||||||
|
return s[:8] + '-' + s[8:12] + '-' + s[12:16] + '-' + s[16:20] + '-' + s[20:32]
|
||||||
|
|
||||||
|
# Otherwise they're not implemented, as they don't give the same output for
|
||||||
|
# the same input.
|
||||||
|
|
||||||
def llGetListEntryType(lst, pos):
|
def llGetListEntryType(lst, pos):
|
||||||
assert islist(lst)
|
assert islist(lst)
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
import lslcommon
|
import lslcommon
|
||||||
from lslcommon import Key #, Vector, Quaternion
|
from lslcommon import Key #, Vector, Quaternion
|
||||||
from lslbasefuncs import ELSLCantCompute, isinteger, iskey, islist, \
|
from lslbasefuncs import ELSLCantCompute, isinteger, iskey, islist, \
|
||||||
isvector, isstring, NULL_KEY, ZERO_VECTOR, ZERO_ROTATION, cond
|
isfloat, isvector, isstring, NULL_KEY, ZERO_VECTOR, ZERO_ROTATION, cond
|
||||||
#isfloat, isrotation
|
#isrotation
|
||||||
|
|
||||||
TouchEvents = ('touch', 'touch_start', 'touch_end')
|
TouchEvents = ('touch', 'touch_start', 'touch_end')
|
||||||
DetectionEvents = ('touch', 'touch_start', 'touch_end',
|
DetectionEvents = ('touch', 'touch_start', 'touch_end',
|
||||||
|
@ -147,6 +147,13 @@ def llEdgeOfWorld(v1, v2):
|
||||||
return 1
|
return 1
|
||||||
raise ELSLCantCompute
|
raise ELSLCantCompute
|
||||||
|
|
||||||
|
if not lslcommon.IsCalc:
|
||||||
|
def llFrand(f):
|
||||||
|
assert isfloat(f)
|
||||||
|
if f == 0.:
|
||||||
|
return 0.
|
||||||
|
raise ELSLCantCompute
|
||||||
|
|
||||||
def llGetAgentInfo(id):
|
def llGetAgentInfo(id):
|
||||||
assert iskey(id)
|
assert iskey(id)
|
||||||
if not cond(id):
|
if not cond(id):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue