#include "behavior.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include UF_BEHAVIOR_REGISTER_CPP(ext::CraetureBehavior) UF_BEHAVIOR_TRAITS_CPP(ext::CraetureBehavior, ticks = false, renders = false, multithread = false) #define this (&self) namespace { void load( uf::Object& self, uf::Image& image ) { auto& graphic = self.getComponent(); auto& texture = graphic.material.textures.emplace_back(); texture.loadFromImage( image ); auto& mesh = self.getComponent(); mesh.bindIndirect(); mesh.bind(); float scaleX = 1; float scaleY = 1; mesh.insertVertices({ { {-1.0f * scaleX, 1.0f * scaleY, 0.0f}, {0.0f, 1.0f}, {}, {0.0f, 1.0f}, {0.0f, 0.0f, -1.0f} }, { {-1.0f * scaleX, -1.0f * scaleY, 0.0f}, {0.0f, 0.0f}, {}, {0.0f, 0.0f}, {0.0f, 0.0f, -1.0f} }, { {1.0f * scaleX, -1.0f * scaleY, 0.0f}, {1.0f, 0.0f}, {}, {1.0f, 0.0f}, {0.0f, 0.0f, -1.0f} }, { {1.0f * scaleX, 1.0f * scaleY, 0.0f}, {1.0f, 1.0f}, {}, {1.0f, 1.0f}, {0.0f, 0.0f, -1.0f}, } }); mesh.insertIndices({ 0, 1, 2, 2, 3, 0 }); uf::graph::convert( self ); } } void ext::CraetureBehavior::initialize( uf::Object& self ) { this->addHook( "asset:Load.%UID%", [&](pod::payloads::assetLoad& payload){ if ( !uf::Asset::isExpected( payload, uf::Asset::Type::IMAGE ) ) return; uf::Scene& scene = uf::scene::getCurrentScene(); uf::Asset& assetLoader = scene.getComponent(); if ( !assetLoader.has(payload.filename) ) return; auto& image = assetLoader.get(payload.filename); ::load( self, image ); }); auto& metadata = this->getComponent(); auto& metadataJson = this->getComponent(); this->addHook( "object:Serialize.%UID%", [&](ext::json::Value& json){ metadata.serialize(self, metadataJson); }); this->addHook( "object:Deserialize.%UID%", [&](ext::json::Value& json){ metadata.deserialize(self, metadataJson); }); metadata.deserialize(self, metadataJson); } void ext::CraetureBehavior::tick( uf::Object& self ) {} void ext::CraetureBehavior::render( uf::Object& self ){} void ext::CraetureBehavior::destroy( uf::Object& self ){} void ext::CraetureBehavior::Metadata::serialize( uf::Object& self, uf::Serializer& serializer ){} void ext::CraetureBehavior::Metadata::deserialize( uf::Object& self, uf::Serializer& serializer ){} #undef this