59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "core/trigger.h"
|
|
|
|
using namespace GS;
|
|
using namespace GS::Core;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
void Trigger::DropItem(Item *item) {
|
|
ListForeachPtr(ItemInTrigger *, ti, items_in_trigger)
|
|
if (ti->item == item) {
|
|
items_in_trigger.Remove(ti);
|
|
delete ti;
|
|
}
|
|
}
|
|
void Trigger::MarkItem(Item *item)
|
|
{
|
|
ListForeachPtr(ItemInTrigger *, ti, items_in_trigger)
|
|
if (ti->item == item)
|
|
{
|
|
ti->inside = true;
|
|
return;
|
|
}
|
|
|
|
items_in_trigger.Add(new ItemInTrigger(item));
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
|
void Trigger::ReadyItemList()
|
|
{
|
|
ListForeachPtr(ItemInTrigger *, ti, items_in_trigger)
|
|
ti->inside = false;
|
|
}
|
|
void Trigger::PurgeItemList()
|
|
{
|
|
ListForeachPtr(ItemInTrigger *, ti, items_in_trigger)
|
|
if (!ti->inside)
|
|
DropItem(ti->item);
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
bool Trigger::IsInside(const Vector4 &p)
|
|
{
|
|
Vector4 local = p * GetInverseMatrix();
|
|
return (local.x > -0.5) && (local.x < 0.5) && (local.y > -0.5) && (local.y < 0.5) && (local.z > -0.5) && (local.z < 0.5);
|
|
}
|
|
|
|
Trigger::~Trigger()
|
|
{
|
|
ListForeachPtr(ItemInTrigger *, ti, items_in_trigger)
|
|
delete ti;
|
|
}
|