mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 13:23:56 -07:00
This adds a new endpoint to the RL interface for evaluating custom JavaScript. When combined with the ability to create arbitrary modifiers, this provides the required functionality for exploring quantitative game balancing. Patch By: irishninja Fixes #5981 Differential Revision: https://code.wildfiregames.com/D3479 This was SVN commit r24962.
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import zero_ad
|
|
import json
|
|
import math
|
|
from os import path
|
|
|
|
game = zero_ad.ZeroAD('http://localhost:6000')
|
|
scriptdir = path.dirname(path.realpath(__file__))
|
|
with open(path.join(scriptdir, '..', 'samples', 'arcadia.json'), 'r') as f:
|
|
config = f.read()
|
|
|
|
with open(path.join(scriptdir, 'fastactions.js'), 'r') as f:
|
|
fastactions = f.read()
|
|
|
|
def test_return_object():
|
|
state = game.reset(config)
|
|
result = game.evaluate('({"hello": "world"})')
|
|
assert type(result) is dict
|
|
assert result['hello'] == 'world'
|
|
|
|
def test_return_null():
|
|
result = game.evaluate('null')
|
|
assert result == None
|
|
|
|
def test_return_string():
|
|
state = game.reset(config)
|
|
result = game.evaluate('"cat"')
|
|
assert result == 'cat'
|
|
|
|
def test_fastactions():
|
|
state = game.reset(config)
|
|
game.evaluate(fastactions)
|
|
female_citizens = state.units(owner=1, type='female_citizen')
|
|
house_tpl = 'structures/spart/house'
|
|
house_count = len(state.units(owner=1, type=house_tpl))
|
|
x = 680
|
|
z = 640
|
|
build_house = zero_ad.actions.construct(female_citizens, house_tpl, x, z, autocontinue=True)
|
|
# Check that they start building the house
|
|
state = game.step([build_house])
|
|
step_count = 0
|
|
new_house = lambda _=None: state.units(owner=1, type=house_tpl)[0]
|
|
initial_health = new_house().health(ratio=True)
|
|
while new_house().health(ratio=True) == initial_health:
|
|
state = game.step()
|
|
|
|
assert new_house().health(ratio=True) >= 1.0
|