-- Main Functions --

local _Confetti = {} _Confetti.__index = _Confetti

	-- Set Gravity --
	local gravity = Vector2.new(0,0.85)
	function _Confetti.setGravity(paramVec2)
		gravity = paramVec2
	end
	
	-- Create A Confetti Particle --	
	function _Confetti.createParticle(paramEmitter, paramForce, paramParent)
		
		local _Particle = {} setmetatable(_Particle, _Confetti)

		local xforce = paramForce.X if (xforce < 0) then xforce = xforce * -1 end
		local distanceFromZero = 0 - xforce
		paramForce = Vector2.new(paramForce.X, paramForce.Y + (distanceFromZero * 0.75))
			
		_Particle.EmitterPosition = paramEmitter
		_Particle.EmitterPower = paramForce
		_Particle.Position = Vector2.new(0,0)
		_Particle.Power = paramForce
		_Particle.Color = getColor()
		
		local function getParticle()
			local label = shapes[math.random(#shapes)]:Clone()
			label.Size = UDim2.new(_Particle.DefaultSize, 0, _Particle.DefaultSize, 0)	
			label.ImageColor3 = _Particle.Color
			label.Parent = paramParent
			label.Rotation = math.random(360)
			label.Visible = true
			label.ZIndex = 100
			return label
		end
		
		_Particle.DefaultSize = (math.random(1,2))/20
		_Particle.Label = getParticle()
		_Particle.Size = 1 
		_Particle.Side = -1
		_Particle.OutOfBounds = false
		_Particle.Enabled = true
		_Particle.Cycles = 0	
		
		return _Particle
	end
	
	-- Update Postion Of Confettis --
	function _Confetti:Update()
		if (self.Enabled and self.OutOfBounds) then
			self.Position = Vector2.new(0,0)
			self.Power = Vector2.new(self.EmitterPower.X + math.random(10)-5, self.EmitterPower.Y + math.random(10)-5)
			self.Cycles = self.Cycles + 1
		end	
		if (not(self.Enabled) and self.OutOfBounds) then
			return
		end
		local startPosition, currentPosition, currentPower = self.EmitterPosition, self.Position, self.Power
		local imageLabel = self.Label
		
		if (imageLabel) then

			local newPosition = Vector2.new(currentPosition.X - currentPower.X, currentPosition.Y - currentPower.Y)
			local newPower = Vector2.new((currentPower.X/1.09) - gravity.X, (currentPower.Y/1.1) - gravity.Y)
			local ViewportSize = Camera.ViewportSize
			imageLabel.Position = UDim2.new(startPosition.X, newPosition.X, startPosition.Y, newPosition.Y)
			self.OutOfBounds = 
				(imageLabel.AbsolutePosition.X > ViewportSize.X and gravity.X > 0) or
				(imageLabel.AbsolutePosition.Y > ViewportSize.Y and gravity.Y > 0) or
				(imageLabel.AbsolutePosition.X < 0  and gravity.X < 0) or
				(imageLabel.AbsolutePosition.Y < 0 and gravity.Y < 0)
			self.Position, self.Power = newPosition, newPower
			
			--[[
			if (newPower.Y < 0) then
				if (self.Size <= 0) then
					self.Side = 1
					imageLabel.ImageColor3 = self.Color
				end
				if (self.Size >= self.DefaultSize) then 
					self.Side = -1
					imageLabel.ImageColor3 = Color3.new(self.Color.r * 0.65, self.Color.g * 0.65, self.Color.b * 0.65)
				end
			end
			--]]
		end
	end
	
	-- Stops Confetti --
	function _Confetti:Toggle()
		self.Enabled = not(self.Enabled)
	end
	
return _Confetti
