Destroy this entity. This method is automatically protected from duplicate calls. That means
calling multiple times an entity's destroy() method will run the destroy code only one time.
As soon as destroy() is called, the entity is marked destroyed=true, even when calling destroy()
method on a subclass (a macro is inserting a code to mark the object
as destroyed at the beginning of every destroy() override function.