----------------------------------------------------------------------------------------------------
--
-- All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-- its licensors.
--
-- For complete copyright and license terms please see the LICENSE at the root of this
-- distribution (the "License"). All use of this software is governed by the License,
-- or, if provided, by the license below or the license accompanying this file. Do not
-- remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--
--
----------------------------------------------------------------------------------------------------
-- Zero Gravity entity
GravityBox =
{
	Properties =
	{
		bActive = 1,
		BoxMin = { x=-10,y=-10,z=-10 },
		BoxMax = { x=10,y=10,z=10 },
		bUniform = 1,
		Gravity = { x=0,y=0,z=0 },
		FalloffInner = 0,
	},

	Editor =
	{
		Icon = "GravitySphere.bmp",
	},
	_PhysTable = { Area={}, },
}

-------------------------------------------------------
function GravityBox:OnLoad(table)
  self.bActive = table.bActive
	if (self.bActive == 1) then
		self:PhysicalizeThis();
	else
		self:DestroyPhysics();
	end
end

-------------------------------------------------------
function GravityBox:OnSave(table)
  table.bActive = self.bActive
end

------------------------------------------------------------------------------------------------------
function GravityBox:OnInit()
	self.bActive = self.Properties.bActive;
	if (self.bActive == 1) then
		self:PhysicalizeThis();
	end
end

------------------------------------------------------------------------------------------------------
-- OnPropertyChange called only by the editor.
------------------------------------------------------------------------------------------------------
function GravityBox:OnPropertyChange()
	if (self.bActive ~= self.Properties.bActive) then
		self.bActive = self.Properties.bActive;
		if (self.bActive == 1) then
			self:PhysicalizeThis();
		else
			self:DestroyPhysics();
		end
	end
end

------------------------------------------------------------------------------------------------------
-- OnReset called only by the editor.
------------------------------------------------------------------------------------------------------
function GravityBox:OnReset()
end

------------------------------------------------------------------------------------------------------
function GravityBox:PhysicalizeThis()
	if (self.bActive == 1) then
		local Properties = self.Properties;
		local Area = self._PhysTable.Area;
		Area.type = AREA_BOX;
		Area.box_min = Properties.BoxMin;
		Area.box_max = Properties.BoxMax;
		Area.uniform = Properties.bUniform;
		Area.falloffInner = Properties.FalloffInner;
		Area.gravity = Properties.Gravity;
		self:Physicalize( 0,PE_AREA,self._PhysTable );
	end
end

------------------------------------------------------------------------------------------------------
function GravityBox:Event_Activate()
	if (self.bActive ~= 1) then
		self.bActive = 1;
		self:PhysicalizeThis();
	end
end

------------------------------------------------------------------------------------------------------
function GravityBox:Event_Deactivate()
	if (self.bActive ~= 0) then
		self.bActive = 0;
		self:PhysicalizeThis();
	end
end

GravityBox.FlowEvents =
{
	Inputs =
	{
		Deactivate = { GravityBox.Event_Deactivate, "bool" },
		Activate = { GravityBox.Event_Activate, "bool" },
	},
	Outputs =
	{
		Deactivate = "bool",
		Activate = "bool",
	},
}