1local map = ...
2local game = map:get_game()
3
4local state_1
5local state_2
6local state_3
7local expected_jump_time
8
9function hero:on_state_changed(state)
10
11  if state == "jumping" then
12    assert_equal(sol.main.get_elapsed_time(), expected_jump_time)
13  end
14end
15
16function map:on_opening_transition_finished()
17
18  sol.timer.start(map, 4000, function()
19    assert_equal_xy(hero, jumper_3_before_sensor)
20    sol.main.exit()
21  end)
22
23  state_1 = sol.state.create()
24  assert_equal(state_1:get_can_use_jumper(), true)
25  assert_equal(state_1:get_jumper_delay(), 200)
26  state_1:set_jumper_delay(500)
27  assert_equal(state_1:get_jumper_delay(), 500)
28  hero:start_state(state_1)
29  hero:set_animation("walking")
30  game:simulate_command_pressed("down")
31
32  function jumper_1_before_sensor:on_activated()
33    assert_equal(hero:get_state(), "custom")
34    assert_equal(hero:get_state_object(), state_1)
35    assert_equal(state_1:get_jumper_delay(), 500)
36    expected_jump_time = sol.main.get_elapsed_time() + state_1:get_jumper_delay()
37  end
38end
39
40function jumper_1_after_sensor:on_activated()
41
42  assert_equal(hero:get_state(), "jumping")
43  assert_equal(hero:get_state_object(), nil)
44
45  state_2 = sol.state.create()
46  assert_equal(state_2:get_can_use_jumper(), true)
47  state_2:set_can_use_jumper(true)
48  assert_equal(state_2:get_can_use_jumper(), true)
49  assert_equal(state_2:get_jumper_delay(), 200)
50  state_2:set_jumper_delay(0)
51  assert_equal(state_2:get_jumper_delay(), 0)
52  hero:start_state(state_2)
53  hero:set_animation("walking")
54end
55
56function jumper_2_before_sensor:on_activated()
57  assert_equal(hero:get_state(), "custom")
58  assert_equal(hero:get_state_object(), state_2)
59  assert_equal(state_2:get_jumper_delay(), 0)
60  expected_jump_time = sol.main.get_elapsed_time() + state_2:get_jumper_delay()
61end
62
63function jumper_2_after_sensor:on_activated()
64
65  assert_equal(hero:get_state(), "jumping")
66  assert_equal(hero:get_state_object(), nil)
67
68  state_3 = sol.state.create()
69  assert_equal(state_3:get_can_use_jumper(), true)
70  state_3:set_can_use_jumper(false)
71  assert_equal(state_3:get_can_use_jumper(), false)
72  hero:start_state(state_3)
73  hero:set_animation("walking")
74end
75