--ɏC
--ACT_DLEFT  ACT_DOWNLEFT ɂȂĂC(ACT_DRIGHT,ACT_ULEFT,ACT_URIGHTɂĂl)

require("th105_ai_lib_20090203WaitEx.txt")			--waitEx, waitTachi

--SetInput		version20090203		iύX_͖ɋLځj

--@\Fcommandŗ^ꂽɃR}h͂
--		
--		R}h͈͒exceptionŗ^ꂽ֐elapsedFrame^ČĂяoA߂l>0̏ꍇ̓R}h͂𒆒f
--
--gp1FSetInput("236C")
--gp2FSetInput("A(7)A(51)4B(15)6C5(15)236C", checkEnemyGround)
--
--gpJX^}CY֐FwaitEx(), waitTachi()
--gp萔FL[FACT_UP`ACT_BC
function SetInput( command , exception )
	local counter = 1	--݉Ԗڂ̕Ă邩
	local oldInput = ""	--rs߁AnilȊȌlݒ肷
	local waitProc		--waitt[w蕶쐬B쐬Ȃtrue
	local excCode = 0	--ŗ^ꂽ֐exception̖߂li[B0傫ꍇR}h͂𒆒f
	local elapsedFrame = 0		--SetInputĂяoォ̌o߃t[iyield񐔁j
	
	--ŗ^ꂽR}h1ɂē͏s
	for input in string.gmatch( command, ".") do
		
		--A`Ěyieldkey_offyield͂ށB("6C"͓łB"AxA"x̑OA)
		if oldInput >= "A" and oldInput <= "E" then
			--OA`Ȅꍇ
			--݂̒l"H"ȂAkey_offz[h()ƂB
			if input == "H" then
				--ȂɂȂ
			else
				--LȊȌꍇ
				--݂̒lɊւ炸ȂOyield
				--1t2t̂قAL[(R}hs)̊mႢ
				excCode = waitEx(2, exception, elapsedFrame)
				elapsedFrame = elapsedFrame + 2	--waitEx̂Ԃ񂾂JEgAbv
				if excCode > 0 then
					return excCode	--߂l>0̏ꍇAR}h͂𒆒f
						--waitTachi()͌ĂяoȂiR}hfɂ낢ȓ悤ɂ邽߁j
				end
				--݂̒lɊւ炸ȂOɒOA`Ekey_offB
				key_off( ACT_A )
				key_off( ACT_B )
				key_off( ACT_C )
				key_off( ACT_D )
				key_off( ACT_AB )	--E
				key_off( ACT_BC )	--F
				--݂̒lɊւ炸ȂOyield
				--1t2t̂قAL[(R}hs)̊mႢ
				excCode = waitEx(2, exception, elapsedFrame)
				elapsedFrame = elapsedFrame + 2	--waitEx̂Ԃ񂾂JEgAbv
				if excCode > 0 then
					return excCode	--߂l>0̏ꍇAR}h͂𒆒f
				end
			end
		elseif oldInput >= "a" and oldInput <= "e" then
			--Oa`ȅꍇ
			--݂̒lɊւ炸ȂOyield
			excCode = waitEx(1, exception, elapsedFrame)
			elapsedFrame = elapsedFrame + 1	--waitEx̂Ԃ񂾂JEgAbv
			if excCode > 0 then
				return excCode	--߂l>0̏ꍇAR}h͂𒆒f
			end
		end
		
		if waitProc then
			--waitt[wp쐬̏ꍇ
			if input >= "0" and input <= "9" then
				--"0"`"9"waitt[wp쐬
				waitString = waitString .. input
			elseif input == ")" then
				--ʂň͂܂ꂽ𐔒lƂwait
				excCode = waitEx(tonumber(waitString), exception, elapsedFrame)
				elapsedFrame = elapsedFrame + tonumber(waitString)	--waitEx̂Ԃ񂾂JEgAbv
				if excCode > 0 then
					return excCode	--߂l>0̏ꍇAR}h͂𒆒f
				end
				waitProc = false
			end
		else
			--LȊȌꍇ
			--(ʏ̏ꍇ)
			--1`9̑Okey_offyield͂ށB("236C"łB)
			if input >= "1" and input <= "9" then
				--1`9̏ꍇ
				--1`9̑Oyield(1ڂyieldȂ)
				if counter > 1 then
					--1t2t̂قAL[(R}hs)̊mႢ
					excCode = waitEx(2, exception, elapsedFrame)
					elapsedFrame = elapsedFrame + 2	--waitEx̂Ԃ񂾂JEgAbv
					if excCode > 0 then
						return excCode	--߂l>0̏ꍇAR}h͂𒆒f
					end
				end
				--1`9̑OɑSkey_off
				--SL[off
				key_off( ACT_UP )
				key_off( ACT_DOWN )
				key_off( ACT_LEFT )
				key_off( ACT_RIGHT )
				key_off( ACT_DLEFT )	--	key_off( ACT_DOWNLEFT )
				key_off( ACT_DRIGHT )	--	key_off( ACT_DOWNRIGHT )
				key_off( ACT_ULEFT )	--	key_off( ACT_UPLEFT )
				key_off( ACT_URIGHT )	--	key_off( ACT_UPRIGHT )
			end
			
			--"1"`"9", "A`E"Ȃǂ̕ɃL[͂s
			if input == "1" then
				key_on( ACT_DOWN )
				key_on( back )
			elseif input == "2" then
				key_on( ACT_DOWN )
			elseif input == "3" then
				key_on( ACT_DOWN )
				key_on( front )
			elseif input == "4" then
				key_on( back )
			elseif input == "5" then
				--o[j[g(ʓr"1"`"9"ʏɂď)
			elseif input == "6" then
				key_on( front )
			elseif input == "7" then
				key_on( ACT_UP )
				key_on( back )
			elseif input == "8" then
				key_on( ACT_UP )
			elseif input == "9" then
				key_on( ACT_UP )
				key_on( front )
			--{^
			elseif input == "A" then
				key_on( ACT_A )
			elseif input == "B" then
				key_on( ACT_B )
			elseif input == "C" then
				key_on( ACT_C )
			elseif input == "D" then
				key_on( ACT_D )
			elseif input == "E" then
				key_on( ACT_AB )
			elseif input == "F" then
				key_on( ACT_BC )
			elseif input == "H" then
				--z[h(ʓr)
			--z[h()
			elseif input == "a" then
				key_off( ACT_A )
			elseif input == "b" then
				key_off( ACT_B )
			elseif input == "c" then
				key_off( ACT_C )
			elseif input == "d" then
				key_off( ACT_D )
			elseif input == "e" then
				key_off( ACT_AB )
			elseif input == "f" then
				key_off( ACT_BC )
			--yield
			elseif input == "(" then
				waitProc = true
				waitString = ""	--
			elseif input == "_" then
				excCode = waitEx(1, exception, elapsedFrame)
				elapsedFrame = elapsedFrame + 1	--waitEx̂Ԃ񂾂JEgAbv
				if excCode > 0 then
					return excCode	--߂l>0̏ꍇAR}h͂𒆒f
				end
			elseif input == "v" then
				excCode = waitEx(5, exception, elapsedFrame)
				elapsedFrame = elapsedFrame + 5	--waitEx̂Ԃ񂾂JEgAbv
				if excCode > 0 then
					return excCode	--߂l>0̏ꍇAR}h͂𒆒f
				end
			elseif input == "x" then
				excCode = waitEx(10, exception, elapsedFrame)
				elapsedFrame = elapsedFrame + 10	--waitEx̂Ԃ񂾂JEgAbv
				if excCode > 0 then
					return excCode	--߂l>0̏ꍇAR}h͂𒆒f
				end
			end
		end
		
		--1O̓̓R}h̒lۑ
		oldInput = input
		--Ԗڂ̕Ă邩̕ϐJEgAbv
		counter = counter + 1
	end
	
	--loop
	--Ō̃L[͂𐬗邽yield
	--1t2t̂قAL[iR}hsj̊mႢ
	excCode = waitEx(2, exception, elapsedFrame)
	elapsedFrame = elapsedFrame + 2	--waitEx̂Ԃ񂾂JEgAbv
	if excCode > 0 then
		return excCode	--߂l>0̏ꍇAR}h͂𒆒f
	end
	--L[{^
	--Fz[h()IłȂB΍FϕSetInputg킸AϒO܂ł̓͂ɂAς͕ʓrLq
	key_reset()
	--yieldBFŌCƍőł͂Ȃ(1t])Bő~Ȃʓr֐đΏ
	excCode = waitEx(1, exception, elapsedFrame)
	elapsedFrame = elapsedFrame + 1	--waitEx̂Ԃ񂾂JEgAbv
	if excCode > 0 then
		return excCode	--߂l>0̏ꍇAR}h͂𒆒f
	end
	
	--ԂɂȂ܂ő҂iZs͊֐IȂjiRF̂قg@\[X肵Ȃ̂Łj
	--FZ̓rŊ֐IƂB΍FvȂIvVŊg
	waitTachi()
	
	return excCode
end

--version20090203
--		version20090113̕ύX_
--			E֐waitEx()@̌ďoɑ3 elapsedFrame ǉ
--			  prF֐exceptionSetInputiSetInputĂяoォ̌o߃t[j^
--			E߂lύXFR}hexcCodei0j߂lɃZbg悤ɂ
--			  ȑOnil߂lɂĂAĂяoŐlrPANIC
--			EbugCF"A(20)""A(2)"ɉ߂bugCi"1"`"9"Ώۂ"0"`"9"ΏۂɏCj
--version20090113
--		version20090105̕ύX_
--			E" "p~B"_"ƂB(XŘA̔pXy[X1ɕϊ邽)
--			E"o"p~B"H"ƂB
--			E"x"ƓӖƂāA"(10)"Ƃ\Lg悤ɂBFZDŒx10tȂ"x"B킩₷DȂ"(10)"g
--			Eexceptionŗ^ꂽ֐ĂяoA߂l>0ł΂߂lɃZbgĊ֐IB
--			  prF肪nɂȂ΃R{fAȂ
