// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#include "SceneObject.h"
#include "Tags.h"
#include "Engine/Core/Types/Span.h"
#include "Engine/Core/Math/Transform.h"
#include "Engine/Core/Math/BoundingBox.h"
#include "Engine/Core/Math/BoundingSphere.h"
#include "Engine/Scripting/ScriptingObject.h"
#include "Types.h"
struct RenderView;
struct RenderContext;
struct RenderContextBatch;
class GPUContext;
class MemoryWriteStream;
class PhysicsScene;
class SceneRendering;
class SceneRenderTask;
///
/// Base class for all actor objects on the scene.
///
API_CLASS(Abstract) class FLAXENGINE_API Actor : public SceneObject
{
DECLARE_SCENE_OBJECT(Actor);
friend Level;
friend PrefabManager;
friend Scene;
friend SceneRendering;
friend Prefab;
friend PrefabInstanceData;
protected:
int16 _isActive : 1;
int16 _isActiveInHierarchy : 1;
int16 _isPrefabRoot : 1;
int16 _isEnabled : 1;
int16 _drawNoCulling : 1;
int16 _drawCategory : 4;
byte _layer;
StaticFlags _staticFlags;
Transform _localTransform;
Transform _transform;
BoundingSphere _sphere;
BoundingBox _box;
String _name;
Scene* _scene;
PhysicsScene* _physicsScene;
private:
// Disable copying
Actor(Actor const&) = delete;
Actor& operator=(Actor const&) = delete;
public:
///
/// List with all child actors attached to the actor (readonly). All items are valid (not null).
///
API_FIELD(ReadOnly)
Array Children;
///
/// List with all scripts attached to the actor (readonly). All items are valid (not null).
///
API_FIELD(ReadOnly, Attributes="HideInEditor, NoAnimate, EditorOrder(-5), EditorDisplay(\"Scripts\", EditorDisplayAttribute.InlineStyle), Collection(ReadOnly = true, NotNullItems = true, CanReorderItems = false)")
Array