void FieldPlayer::Init(tstring model_name)
{
- SetModel(model_name);
+ LoadModel(model_name);
ResetPosition();
}
current_stat_.vel.y = 0;
}
-void FieldPlayer::SetModel(const tstring& name)
+void FieldPlayer::LoadModel(const tstring& name)
{
- model_handle_ = ResourceManager::LoadModelFromName(name);
+ if (model_handle_) {
+ loading_model_handle_ = ResourceManager::LoadModelFromName(name, true);
+ } else {
+ SetModel(ResourceManager::LoadModelFromName(name));
+ }
+}
+
+void FieldPlayer::SetModel(const ModelHandle& model)
+{
+ model_handle_ = model;
model_height_ = model_handle_.property().get<float>("character.height", 1.58f);
flight_duration_ideal_ = sqrt((model_height_*2.0f)/9.8f) + sqrt((model_height_*0.8f)/9.8);
jump_height_ = sqrt(15.0f)*2.0f;
void FieldPlayer::Update()
{
+ if (loading_model_handle_ && loading_model_handle_.CheckLoaded()) {
+ SetModel(loading_model_handle_);
+ loading_model_handle_ = ModelHandle();
+ }
/*
if (key_checker_.Check() == -1)
{
SetDragFileValidFlag(TRUE);
DragFileInfoClear();
+ MV1SetLoadModelPhysicsWorldGravity(-100);
+ MV1SetLoadModelUsePhysicsMode(DX_LOADMODEL_PHYSICS_LOADCALC);
+
return 0;
}
typedef std::shared_ptr<ImageHandle> ImageHandlePtr;
typedef std::shared_ptr<ModelHandle> ModelHandlePtr;
+struct ReadFuncData {
+ ReadFuncData(){};
+ ReadFuncData(const ptree& info);
+ boost::filesystem::wpath model_dir;
+ std::list<std::pair<std::string, std::string>> motions;
+ std::list<std::pair<std::string, std::string>>::iterator motions_it;
+};
+typedef std::shared_ptr<ReadFuncData> ReadFuncDataPtr;
+
class ResourceManager {
public:
// models
static void BuildModelFileTree();
static void CacheBakedModel();
- static ModelHandle LoadModelFromName(const tstring&);
+ static ModelHandle LoadModelFromName(const tstring&, bool async = false);
+ static void RequestModelFromName(const tstring&);
+ static bool IsCachedModelName(const tstring&);
static const std::vector<std::string>& GetModelNameList();
+ private:
+ static tstring NameToFullPath(const tstring& name);
+
private:
static int default_font_handle_;
static std::unordered_map<tstring, ImageHandlePtr> graph_handles_;
friend class ResourceManager;
private:
- ModelHandle(int handle, const std::shared_ptr<ptree>& property, bool async_load = false);
+ ModelHandle(int handle, const ReadFuncDataPtr& funcdata, const std::shared_ptr<ptree>& property, bool async_load = false);
ModelHandle Clone();
public:
int handle() const;
const ptree& property() const;
std::string name() const;
+
+ operator bool() const;
+
+ bool CheckLoaded();
private:
int handle_;
+ ReadFuncDataPtr funcdata_;
std::shared_ptr<ptree> property_;
std::string name_;
bool async_load_;
--- /dev/null
+
+/***MetaData***
+
+{
+ "name": "\83\82\83f\83\8b\83\8a\83X\83g",
+ "icon": "icon.png",
+ "api_version": 1
+}
+
+***MetaData***/
+
+var list;
+list = new UI.List({
+ docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT | UI.DOCKING_BOTTOM
+});
+
+var even_line = false;
+var model_names = Model.all();
+for (var i = 0; i < model_names.length; i++) {
+ if ((/char:/).test(model_names[i])) {
+ (function(model_name){
+ list.addItem(
+ new UI.Label({
+ docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT,
+ text: model_name,
+ bgcolor: ((even_line = !even_line) ? "#EEAFEECC" : "#FFFFFFCC"),
+ onclick: function() {
+ Account.updateModelName(model_name)
+ }
+ })
+ );
+ })(model_names[i])
+ }
+}
+
+Card.board.width = 240;
+Card.board.height = 120;
+Card.board.docking = UI.DOCKING_TOP | UI.DOCKING_RIGHT
+Card.board.addChild(list);
\ No newline at end of file