Daniele Bartolini 9 лет назад
Родитель
Сommit
cc97c488e8
2 измененных файлов с 20 добавлено и 96 удалено
  1. 18 78
      src/resource/sprite_resource.cpp
  2. 2 18
      src/resource/sprite_resource.h

+ 18 - 78
src/resource/sprite_resource.cpp

@@ -170,83 +170,38 @@ namespace sprite_resource_internal
 
 namespace sprite_animation_resource_internal
 {
-	void parse_animation(const char* json, Array<SpriteAnimationName>& names, Array<SpriteAnimationData>& anim_data, Array<u32>& frames)
-	{
-		TempAllocator512 ta;
-		JsonObject obj(ta);
-		sjson::parse(json, obj);
-
-		SpriteAnimationName san;
-		san.id = sjson::parse_string_id(obj["name"]);
-
-		JsonArray obj_frames(ta);
-		sjson::parse_array(obj["frames"], obj_frames);
-
-		const u32 num_frames = array::size(obj_frames);
-
-		SpriteAnimationData sad;
-		sad.num_frames  = num_frames;
-		sad.first_frame = array::size(frames);
-		sad.time        = sjson::parse_float(obj["time"]);
-
-		// Read frames
-		for (u32 ff = 0; ff < num_frames; ++ff)
-			array::push_back(frames, (u32)sjson::parse_int(obj_frames[ff]));
-
-		array::push_back(names, san);
-		array::push_back(anim_data, sad);
-	}
-
 	void compile(const char* path, CompileOptions& opts)
 	{
 		Buffer buf = opts.read(path);
 
 		TempAllocator4096 ta;
 		JsonObject object(ta);
-		sjson::parse(buf, object);
+		JsonArray  object_frames(ta);
 
-		JsonArray animations(ta);
-		sjson::parse_array(object["animations"], animations);
+		Array<u32> frames(default_allocator());
+		float total_time = 0.0f;
 
-		Array<SpriteAnimationName> anim_names(default_allocator());
-		Array<SpriteAnimationData> anim_data(default_allocator());
-		Array<u32> anim_frames(default_allocator());
+		sjson::parse(buf, object);
+		sjson::parse_array(object["frames"], object_frames);
 
-		const u32 num_animations = array::size(animations);
-		for (u32 i = 0; i < num_animations; ++i)
-		{
-			parse_animation(animations[i], anim_names, anim_data, anim_frames);
-		}
+		array::resize(frames, array::size(object_frames));
+		for (u32 i = 0; i < array::size(object_frames); ++i)
+			frames[i] = (u32)sjson::parse_float(object_frames[i]);
+
+		total_time = sjson::parse_float(object["total_time"]);
 
+		// Write
 		SpriteAnimationResource sar;
 		sar.version = RESOURCE_VERSION_SPRITE_ANIMATION;
-		sar.num_animations = array::size(anim_names);
-		sar.num_frames = array::size(anim_frames);
-		sar.frames_offset = u32(sizeof(SpriteAnimationResource) +
-					sizeof(SpriteAnimationName) * array::size(anim_names) +
-					sizeof(SpriteAnimationData) * array::size(anim_data));
+		sar.num_frames = array::size(frames);
+		sar.total_time = total_time;
 
 		opts.write(sar.version);
-		opts.write(sar.num_animations);
 		opts.write(sar.num_frames);
-		opts.write(sar.frames_offset);
-
-		for (u32 i = 0; i < array::size(anim_names); i++)
-		{
-			opts.write(anim_names[i].id);
-		}
+		opts.write(sar.total_time);
 
-		for (u32 i = 0; i < array::size(anim_data); i++)
-		{
-			opts.write(anim_data[i].num_frames);
-			opts.write(anim_data[i].first_frame);
-			opts.write(anim_data[i].time);
-		}
-
-		for (u32 i = 0; i < array::size(anim_frames); i++)
-		{
-			opts.write(anim_frames[i]);
-		}
+		for (u32 i = 0; i < array::size(frames); i++)
+			opts.write(frames[i]);
 	}
 
 	void* load(File& file, Allocator& a)
@@ -266,24 +221,9 @@ namespace sprite_animation_resource_internal
 
 namespace sprite_animation_resource
 {
-	const SpriteAnimationData* get_animation(const SpriteAnimationResource* sar, StringId32 name)
-	{
-		const u32 num = sar->num_animations;
-		const SpriteAnimationName* begin = (SpriteAnimationName*) ((char*) sar + sizeof(*sar));
-		const SpriteAnimationData* data = (SpriteAnimationData*) ((char*) sar + sizeof(*sar) + sizeof(SpriteAnimationName) * num);
-
-		for (u32 i = 0; i < num; i++)
-		{
-			if (begin[i].id == name)
-				return &data[i];
-		}
-
-		return NULL;
-	}
-
-	const u32* get_animation_frames(const SpriteAnimationResource* sar)
+	const u32* frames(const SpriteAnimationResource* sar)
 	{
-		return (u32*) ((char*) sar + sar->frames_offset);
+		return (u32*)&sar[1];
 	}
 } // namespace sprite_animation_resource
 

+ 2 - 18
src/resource/sprite_resource.h

@@ -42,21 +42,8 @@ namespace sprite_resource_internal
 struct SpriteAnimationResource
 {
 	u32 version;
-	u32 num_animations;
 	u32 num_frames;
-	u32 frames_offset;
-};
-
-struct SpriteAnimationName
-{
-	StringId32 id;
-};
-
-struct SpriteAnimationData
-{
-	u32 num_frames;
-	u32 first_frame;
-	f32 time;
+	f32 total_time;
 };
 
 namespace sprite_animation_resource_internal
@@ -70,11 +57,8 @@ namespace sprite_animation_resource_internal
 
 namespace sprite_animation_resource
 {
-	/// Returns the sprite animation @a name.
-	const SpriteAnimationData* get_animation(const SpriteAnimationResource* sar, StringId32 name);
-
 	/// Returns the frames of the sprite animation @a sar.
-	const u32* get_animation_frames(const SpriteAnimationResource* sar);
+	const u32* frames(const SpriteAnimationResource* sar);
 } // namespace sprite_animation_resource
 
 } // namespace crown