// Parasol Float

freeslot(
"SPR2_PFLT",
"S_PARASOL_FLOAT1",
"S_PARASOL_FLOAT2",
"S_PARASOL_FLOAT3",
"S_PARASOL_FLOAT4",
"SKINCOLOR_STARPRINCESS",
"sfx_praopn",
"sfx_prlnch"
)

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}

sfxinfo[sfx_praopn] = {
	singular = false,
	caption = "Parasol Opened"
}

sfxinfo[sfx_prlnch] = {
	singular = false,
	caption = "Parasol Launch"
}

skincolors[SKINCOLOR_STARPRINCESS] = {
    name = "StarPrincess",
    ramp = {200,200,201,201,202,202,203,203,204,204,205,205,207,207,47,47},
    invcolor = SKINCOLOR_SKY,
    invshade = 1,
    chatcolor = V_ROSYMAP,
    accessible = true
}

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

addHook("AbilitySpecial", function(p)
	if not p.mo or not p.mo.valid
	or p.playerstate == PST_DEAD or p.playerstate == PST_REBORN
	or p.Dimentele == true
    or p.mo.skin ~= "paperpeach" return end
	
	if p.Peachisfloating == false then
		p.mo.state = S_PARASOL_FLOAT1
		p.Peachisfloating = true
		S_StartSound(p.mo, sfx_praopn)
	end
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.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.Peachisfloating == true
	and p.Plaunchused == false
	and (p.cmd.buttons & BT_USE) then
		P_SetObjectMomZ(p.mo, 15*FRACUNIT)
		S_StartSound(p.mo, sfx_prlnch)
//		p.Peachisfloating = false
		p.Plaunchused = true
	end
	
	if p.mo.state == S_DIMENTELE_START
	or p.mo.state == S_INSTANTTELE_TELEPORT
	or P_IsObjectOnGround(p.mo) then
		p.Peachisfloating = false
	end
	
	if P_IsObjectOnGround(p.mo) then
		p.Plaunchused = false
	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)