UGDK
|
00001 00002 #ifndef MODULE_PROXY_SCENE_H_ 00003 #define MODULE_PROXY_SCENE_H_ 00004 00005 #include <cstdio> 00006 00007 #include <ugdk/script/virtualobj.h> 00008 #include <ugdk/action/scene.h> 00009 #include <ugdk/action/task.h> 00010 #include <ugdk/script/baseproxy.h> 00011 00012 namespace ugdk { 00013 namespace action { 00014 00015 class ScriptUpdateTask : public Task { 00016 public: 00017 ScriptUpdateTask(const ugdk::script::VirtualObj& scene_proxy) : scene_proxy_(scene_proxy) {} 00018 ~ScriptUpdateTask() {} 00019 00020 void operator()(double dt) { 00021 ugdk::script::VirtualObj vdt = ugdk::script::VirtualObj(scene_proxy_.wrapper()); 00022 vdt.set_value(dt); 00023 std::list<ugdk::script::VirtualObj> args; 00024 args.push_back(vdt); 00025 ( scene_proxy_ | "Update" )(args); 00026 } 00027 00028 private: 00029 ugdk::script::VirtualObj scene_proxy_; 00030 }; 00031 00032 class SceneProxy; 00033 class SceneProxy : public Scene, public ugdk::script::BaseProxy<SceneProxy> { 00034 public: 00035 SceneProxy(const ugdk::script::VirtualObj& proxy) : 00036 Scene(), ugdk::script::BaseProxy<SceneProxy>(proxy) { 00037 this->AddTask(new ScriptUpdateTask(proxy)); 00038 } 00039 00040 virtual void Focus() { 00041 Scene::Focus(); 00042 (proxy_ | "Focus")(); 00043 } 00044 virtual void DeFocus() { 00045 Scene::DeFocus(); 00046 (proxy_ | "DeFocus")(); 00047 } 00048 00049 virtual void End() { 00050 Scene::End(); 00051 script::VirtualObj::List args; 00052 (proxy_ | "End")(args); 00053 } 00054 00055 }; 00056 00057 } 00058 } 00059 #endif