#pragma once

#include "../../VTInternal.hpp"
#include "CKSceneObject.hpp"

namespace LibCmo::CK2::ObjImpls {

	class CKBeObject : public CKSceneObject {
	public:
		CKBeObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
		virtual ~CKBeObject();
		YYCC_DEL_CLS_COPY_MOVE(CKBeObject);

		virtual CK_CLASSID GetClassID(void) override { 
			return CK_CLASSID::CKCID_BEOBJECT; 
		}

		virtual bool Save(CKStateChunk* chunk, CKFileVisitor* file, CKDWORD flags) override;
		virtual bool Load(CKStateChunk* chunk, CKFileVisitor* file) override;

		/**
		 * @brief Check whether this object is in specified group.
		 * @param group[in] The group to be checked.
		 * @return True if in it.
		*/
		bool IsInGroup(CKGroup* group) const;
		/**
		 * @brief Directly set group data.
		 * @param pos 
		 * @param val 
		 * @warning This function only should be called by CKGroup. Any other classes should not call this.
		*/
		void ExplicitSetGroup(CKDWORD pos, bool val);
		
	protected:
		XContainer::XBitArray m_Groups;
	};

}