PoC for timeout for turn detection

This commit is contained in:
Bartek Dobrowolski-Nowakowski
2022-04-18 20:57:47 +02:00
parent d447b60344
commit 590c1ee7ed
3 changed files with 132 additions and 49 deletions

View File

@@ -22,9 +22,11 @@ TurnTolerance := 10
GoTo EndTurnDef GoTo EndTurnDef
CheckTurn(x,y, timeout := 3500, b_size := 2)
CheckTurn(x,y, b_size := 2)
{ {
check_turn_start_tick_count := A_TickCount
;ToolTipper("A_TickCount at the begining of CheckTurn " A_TickCount, 100, 150)
color_player := 0xDE6E70 color_player := 0xDE6E70
if (__enableTurn_mod__ = 0){ if (__enableTurn_mod__ = 0){
return return
@@ -34,11 +36,21 @@ CheckTurn(x,y, b_size := 2)
loop { loop {
tc := BitGrab(x, y, b_size) tc := BitGrab(x, y, b_size)
;ToolTipper("debug until loop")
for i, c in tc for i, c in tc
{ {
check_turn_now_tick_count := A_TickCount
check_turn_tick_count_from_start_to_now := check_turn_now_tick_count - check_turn_start_tick_count
if (check_turn_tick_count_from_start_to_now > timeout) {
ToolTipper("Turn Check Timeout exceeded", 100, 200)
return false
}
;ToolTipper("debug i loop")
td := Distance(c, color_player) td := Distance(c, color_player)
ToolTipper("Turn" td) ; ToolTipper("Turn" td)
if (td < 20 ){ if (td < 20 ){
turn_complete := true turn_complete := true
@@ -46,10 +58,20 @@ CheckTurn(x,y, b_size := 2)
} }
} }
} until turn_complete = true check_turn_now_tick_count := A_TickCount
ToolTipper("Turn Found") check_turn_tick_count_from_start_to_now := check_turn_now_tick_count - check_turn_start_tick_count
if (check_turn_tick_count_from_start_to_now > timeout) {
ToolTipper("Turn Check Timeout exceeded", 100, 200)
return false
}
} until (turn_complete = true)
check_turn_found_tick_count := A_TickCount
check_turn_tick_count_from_start_to_found := check_turn_found_tick_count - check_turn_start_tick_count
ToolTipper("tickCount from start to end " check_turn_tick_count_from_start_to_found, 100, 250)
; Sleep, 100000 ; debug
;ToolTipper("Turn Found")
return return true
} }
ResetTurn: ResetTurn:

View File

@@ -53,67 +53,128 @@ Race_PANAM()
Loop { Loop {
; Turn 1 ; Turn 1
; Tooltip ; Tooltip
CheckTurn(turn1.startX, turn1.startY)
ToolTipper("Turn 1 start found") turn_one_end_found := false
/* if (CheckTurn(turn1.startX, turn1.startY))
if( A_Index != 1){ {
Nitrous_Off() turn_one_end_found := true
Accel_On(75) ToolTipper("Turn 1 start found")
} }
*/ /*
if( A_Index != 1){
Nitrous_Off()
Accel_On(75)
}
*/
controller.Axes.LX.SetState(18-3*%A_Index%) controller.Axes.LX.SetState(18-3*%A_Index%)
;Sleep(500) ;Sleep(500)
Accel_On(100) Accel_On(100)
CheckTurn(turn1.endX, turn1.endY)
ToolTipper("Turn 1 end found")
turn_one_end_found := false
Nitrous_On() turn_one_end_found := true ; debug TODO check if wheels are curved
controller.Axes.LX.SetState(75) if (CheckTurn(turn1.endX, turn1.endY))
sleep(2000) {
controller.Axes.LX.SetState(65) turn_one_end_found := true
sleep(2500) ToolTipper("Turn 1 end found")
controller.Axes.LX.SetState(62)
sleep(2000)
Nitrous_On()
controller.Axes.LX.SetState(75)
}
sleep(2000)
if (turn_one_end_found)
{
controller.Axes.LX.SetState(65)
}
sleep(2500)
if (turn_one_end_found)
{
controller.Axes.LX.SetState(62)
}
sleep(2000)
turn_two_start_found := false
; Turn 2 ; Turn 2
if( A_Index = 1 || A_Index = 6){ if( A_Index = 1 || A_Index = 6){
CheckTurn(turn2.startX, turn2.startY) if (CheckTurn(turn2.startX, turn2.startY, 5000))
{
turn_two_start_found := true
}
} }
else{ else{
CheckTurn(545, turn2.startY) if (CheckTurn(545, turn2.startY)) {
turn_two_start_found := true
}
}
if (turn_two_start_found)
{
ToolTipper("Turn 2 start found")
controller.Axes.LX.SetState(18.3)
} }
ToolTipper("Turn 2 start found")
controller.Axes.LX.SetState(18.3)
CheckTurn(turn2.endX, turn2.endY)
ToolTipper("Turn 2 end found")
controller.Axes.LX.SetState(50)
if( A_Index = 1 || A_Index = 6){
controller.Axes.LX.SetState(75)
sleep(2000)
controller.Axes.LX.SetState(65) turn_two_end_found := false
sleep(500) turn_two_end_found := true ; debug TODO check if wheels are curved
if (CheckTurn(turn2.endX, turn2.endY))
{
turn_two_end_found := true
ToolTipper("Turn 2 end found")
controller.Axes.LX.SetState(50)
}
if( A_Index = 1 || A_Index = 6){
if (turn_two_end_found)
{
controller.Axes.LX.SetState(75)
}
sleep(2000)
if (turn_two_end_found)
{
controller.Axes.LX.SetState(65)
}
sleep(500)
} }
else{ else{
Turn_Left(500, 28) if (turn_two_end_found)
{
Turn_Left(500, 28)
}
} }
; Turn 3 ; Turn 3
CheckTurn(turn3.startX, turn3.startY) if (CheckTurn(turn3.startX, turn3.startY))
Nitrous_Off() {
ToolTipper("Turn 3 start found") Nitrous_Off()
controller.Axes.LX.SetState(12) ToolTipper("Turn 3 start found")
CheckTurn(turn3.endX, turn3.endY) controller.Axes.LX.SetState(12)
Nitrous_On() }
ToolTipper("Turn 3 end found")
controller.Axes.LX.SetState(42) turn_three_end_found := false
sleep(500) turn_three_end_found := true ; debug TODO check if wheels are curved
controller.Axes.LX.SetState(58) if (CheckTurn(turn3.endX, turn3.endY))
{
turn_three_end_found := true
Nitrous_On()
ToolTipper("Turn 3 end found")
controller.Axes.LX.SetState(42)
}
sleep(500)
if (turn_three_end_found)
{
controller.Axes.LX.SetState(58)
}
sleep(2000) sleep(2000)
controller.Axes.LX.SetState(62)
if (turn_three_end_found)
{
controller.Axes.LX.SetState(62)
}
sleep(2000) sleep(2000)
CheckTurn(lap_marker.startX, lap_marker.startY) CheckTurn(lap_marker.startX, lap_marker.startY)
ToolTipper("Lap Complete") ToolTipper("Lap Complete")