// Parasol Float

freeslot(
"SPR2_PFLT",
"S_PARASOL_FLOAT1",
"S_PARASOL_FLOAT2",
"S_PARASOL_FLOAT3",
"S_PARASOL_FLOAT4"
)

states[S_PARASOL_FLOAT1] = {SPR_PLAY, SPR2_PFLT, 5, nil, 0, 0, S_PARASOL_FLOAT2}
states[S_PARASOL_FLOAT2] = {SPR_PLAY, SPR2_PFLT, 13, nil, 0, 0, S_PARASOL_FLOAT3}
states[S_PARASOL_FLOAT3] = {SPR_PLAY, SPR2_PFLT, 5, nil, 0, 0, S_PARASOL_FLOAT4}
states[S_PARASOL_FLOAT4] = {SPR_PLAY, SPR2_PFLT, 13, nil, 0, 0, S_PARASOL_FLOAT1}

local function initializeFloatVars(p)
	p.Peachisfloating = false
end

addHook("PlayerThink", function(p)
	if not p.mo or not p.mo.valid
	or p.playerstate == PST_DEAD or p.playerstate == PST_REBORN
    or p.mo.skin ~= "paperpeach" return end
	
	if p.Peachisfloating == nil
		initializeFloatVars(p)
	end
	
	if not P_IsObjectOnGround(p.mo)
	and p.mo.momz <= -2*FRACUNIT
	and (p.cmd.buttons & BT_JUMP)
	and p.Peachisfloating == false then
		p.mo.state = S_PARASOL_FLOAT1
		p.Peachisfloating = true
	end
	
	if not P_IsObjectOnGround(p.mo)
	and (p.cmd.buttons & BT_JUMP)
	and p.Peachisfloating == true
	and p.mo.momz <= -2*FRACUNIT then
		P_SetObjectMomZ(p.mo, -2*FRACUNIT)
	end
	
	if not (p.cmd.buttons & BT_JUMP)
	and p.Peachisfloating == true then
		p.mo.state = S_PLAY_FALL
		p.Peachisfloating = false
	end
	if P_IsObjectOnGround(p.mo)
	and p.Peachisfloating == true then
		p.Peachisfloating = false
	end
	
	if p.mo.state == S_DIMENTELE_START
	or p.mo.state == S_INSTANTTELE_TELEPORT
	or p.mo.state == S_DIRECTTELE_START then
		p.Peachisfloating = false
		p.mo.rollangle = 0
	end
	
	if p.Peachisfloating == true and not p.mo.state == S_PARASOL_FLOAT1 and not p.mo.state == S_PARASOL_FLOAT2
	and not p.mo.state == S_PARASOL_FLOAT3 and not p.mo.state == S_PARASOL_FLOAT1 and not p.mo.state == S_PARASOL_FLOAT4 then
		p.mo.state = S_PARASOL_FLOAT1
	end
	
	if p.mo.state == S_PARASOL_FLOAT1 then
		p.mo.rollangle = 0
	end
	if p.mo.state == S_PARASOL_FLOAT2 then
		p.mo.rollangle = ANG10
	end
	if p.mo.state == S_PARASOL_FLOAT3 then
		p.mo.rollangle = 0
	end
	if p.mo.state == S_PARASOL_FLOAT4 then
		p.mo.rollangle = ANG350
	end
	
	if p.Peachisfloating == false then
		p.mo.rollangle = 0
	end
end)     

addHook("MobjDamage", function(mo, pmo)
	if not (pmo and pmo.valid)
	or not (mo and mo.valid)
	or not (pmo.player and pmo.player.valid)
	or pmo.skin ~= "paperpeach" return end
	
	pmo.player.Peachisfloating = false
end)