;
;  input
;  Code related to handling input
;
;  Created by Quinn Dunki on 8/15/17
;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; kbdScanTitle
; Processes keyboard input for title screen
;
; Trashes A
;

kbdScanTitle:
	BITS8
	lda KBD
	bpl kbdScanTitleDone
	sta KBDSTROBE

	cmp #(11 + $80)
	beq kbdScanUpArrowTitle
	cmp #(10 + $80)
	beq kbdScanDownArrowTitle
	cmp #(13 + $80)
	beq kbdScanEnterTitle
	cmp #(32 + $80)
	beq kbdScanSpaceTitle
	jmp kbdScanDebugPiggyback

kbdScanTitleDone:
	BITS16
	rts


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Title Screen Key Handlers
;

kbdScanUpArrowTitle:
	BITS16
	lda #-1
	sta menuActionRequested
	rts

kbdScanDownArrowTitle:
	BITS16
	lda #1
	sta menuActionRequested
	rts

kbdScanEnterTitle:
	BITS16
	lda #2
	sta menuActionRequested
	rts

kbdScanSpaceTitle:
	BITS16
	lda #2
	sta menuActionRequested
	rts


;;;;;;;

kbdScanApostrophe:
	BITS16
	lda #2
	sta playerMoveRequested
	rts

kbdScanSemiColon:
	BITS16
	lda #-2
	sta playerMoveRequested
	rts



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; kbdScanGameplay/Debug
; Processes keyboard input for gameplay
;
; Trashes A
;

kbdScanGameplay:
	BITS8
	lda KBD
	bpl kbdScanDone
	sta KBDSTROBE

	cmp #(8 + $80)
	beq kbdScanLeftArrow
	cmp #(21 + $80)
	beq kbdScanRightArrow
	cmp #(11 + $80)
	beq kbdScanUpArrow
	cmp #(10 + $80)
	beq kbdScanDownArrow
	cmp #(27 + $80)
	beq kbdScanESC
	cmp #(',' + $80)
	beq kbdScanComma
	cmp #('.' + $80)
	beq kbdScanPeriod
	cmp #(' ' + $80)
	beq kbdScanSpace
	cmp #(';' + $80)
	beq kbdScanSemiColon
	cmp #(39 + $80)
	beq kbdScanApostrophe
	cmp #(9 + $80)
	bne kbdScanDebugPiggyback
	jmp kbdScanTab

kbdScanDone:
	BITS16
	rts

kbdScanDebug:
	BITS8
	lda KBD
	bpl kbdScanDone
	sta KBDSTROBE

kbdScanDebugPiggyback:
	cmp #('`' + $80)
	beq kbdScanBackQuote
	cmp #(127 + $80)
	beq kbdScanDEL
	cmp #('=' + $80)
	beq kbdScanEquals
	bra kbdScanDone

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Gameplay Key Handlers
;

kbdScanPeriod:
	BITS16
	lda mapScrollPos
	cmp #VISIBLETERRAINWIDTH-VISIBLETERRAINWINDOW
	beq kbdScanDone
	inc
	inc
	inc
	inc
	sta mapScrollRequested
	rts

kbdScanComma:
	BITS16

	lda mapScrollPos
	beq kbdScanDone
	dec
	dec
	dec
	dec
	sta mapScrollRequested
	rts

kbdScanLeftArrow:
	BITS16
	lda #2
	sta angleDeltaRequested
	rts

kbdScanRightArrow:
	BITS16
	lda #-2
	sta angleDeltaRequested
	rts

kbdScanUpArrow:
	BITS16
	lda #1
	sta powerDeltaRequested
	rts

kbdScanDownArrow:
	BITS16
	lda #-1
	sta powerDeltaRequested
	rts

kbdScanESC:
	BITS16
	lda #1
	sta quitRequested
	rts

kbdScanSpace:
	BITS16
	lda #1
	sta fireRequested
	rts

kbdScanBackQuote:
	BITS16
	lda #1
	sta breakpoint
	rts

kbdScanDEL:
	BITS16
	lda paused
	eor #1
	sta paused
	rts

kbdScanEquals:
	BITS16
	lda #1
	sta singleStep
	stz paused
	rts

kbdScanTab:
	BITS16
	ldy currentPlayer
	PLAYERPTR_Y
	lda playerData+PD_CURRWEAPON,y
	inc
	cmp #INVENTORY_ITEMS
	bne kbdScanTab_store
	lda #0

kbdScanTab_store:
	sta playerData+PD_CURRWEAPON,y
	inc inventoryDirty
	rts


breakpoint:
	.word 0


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; kbdWaitForAnyKey
;
; Waits for any keypress
;
; Trashes A
;
kbdWaitForAnyKey:
	BITS8

kbdWaitForAnyKeyLoop:
	lda KBD
	bpl kbdWaitForAnyKeyLoop
	sta KBDSTROBE
	BITS16
	rts
