Files
Webcam/include/engine/core/trigger.cpp

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;
}