mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-22 10:05:37 -04:00
64 lines
2.2 KiB
C++
64 lines
2.2 KiB
C++
/**
|
|
|
|
GDevelop - DestroyOutside Behavior Extension
|
|
Copyright (c) 2014-2015 Florian Rival (Florian.Rival@gmail.com)
|
|
This project is released under the MIT License.
|
|
*/
|
|
|
|
#include <memory>
|
|
#include <iostream>
|
|
#include <SFML/Graphics.hpp>
|
|
#include "DestroyOutsideBehavior.h"
|
|
#include "GDCpp/Project/Layout.h"
|
|
#include "GDCpp/RuntimeLayer.h"
|
|
#include "GDCpp/Serialization/SerializerElement.h"
|
|
#include "GDCpp/RuntimeScene.h"
|
|
#include "GDCpp/RuntimeObject.h"
|
|
#include "GDCpp/CommonTools.h"
|
|
|
|
DestroyOutsideBehavior::DestroyOutsideBehavior() :
|
|
extraBorder(0)
|
|
{
|
|
}
|
|
|
|
void DestroyOutsideBehavior::DoStepPostEvents(RuntimeScene & scene)
|
|
{
|
|
bool erase = true;
|
|
const RuntimeLayer & theLayer = scene.GetRuntimeLayer(object->GetLayer());
|
|
float objCenterX = object->GetDrawableX()+object->GetCenterX();
|
|
float objCenterY = object->GetDrawableY()+object->GetCenterY();
|
|
for (std::size_t cameraIndex = 0;cameraIndex < theLayer.GetCameraCount();++cameraIndex)
|
|
{
|
|
const RuntimeCamera & theCamera = theLayer.GetCamera(cameraIndex);
|
|
|
|
float boundingCircleRadius = sqrt(object->GetWidth()*object->GetWidth()+object->GetHeight()*object->GetHeight())/2.0;
|
|
if ( objCenterX+boundingCircleRadius+extraBorder < theCamera.GetViewCenter().x-theCamera.GetWidth()/2.0
|
|
|| objCenterX-boundingCircleRadius-extraBorder > theCamera.GetViewCenter().x+theCamera.GetWidth()/2.0
|
|
|| objCenterY+boundingCircleRadius+extraBorder < theCamera.GetViewCenter().y-theCamera.GetHeight()/2.0
|
|
|| objCenterY-boundingCircleRadius-extraBorder > theCamera.GetViewCenter().y+theCamera.GetHeight()/2.0)
|
|
{
|
|
//Ok we are outside the camera area.
|
|
}
|
|
else
|
|
{
|
|
//The object can be viewed by the camera.
|
|
erase = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( erase ) object->DeleteFromScene(scene);
|
|
}
|
|
|
|
#if defined(GD_IDE_ONLY)
|
|
void DestroyOutsideBehavior::SerializeTo(gd::SerializerElement & element) const
|
|
{
|
|
element.SetAttribute("extraBorder", extraBorder);
|
|
}
|
|
#endif
|
|
|
|
void DestroyOutsideBehavior::UnserializeFrom(const gd::SerializerElement & element)
|
|
{
|
|
extraBorder = element.GetDoubleAttribute("extraBorder");
|
|
}
|