Browse Source

hittestdata for SingleResAnim added

dmuratshin 9 years ago
parent
commit
e0fe813267

+ 0 - 14
oxygine/src/res/ResAnim.cpp

@@ -68,22 +68,8 @@ namespace oxygine
             return;
             return;
 
 
         spNativeTexture texture = IVideoDriver::instance->createTexture();
         spNativeTexture texture = IVideoDriver::instance->createTexture();
-        /*
-        int w2 = nextPOT(original->getWidth());
-        int h2 = nextPOT(original->getHeight());
-        if (w2 != original->getWidth() || h2 != original->getHeight())
-        {
-            texture->init(w2, h2, original->getFormat());
-            texture->updateRegion(0, 0, original->lock());
-        }
-        else
-        {
-        */
         texture->init(original->lock(), false);
         texture->init(original->lock(), false);
-        //}
-
         texture->apply();
         texture->apply();
-
         init(texture, original->getSize(), columns, rows, scaleFactor);
         init(texture, original->getSize(), columns, rows, scaleFactor);
     }
     }
 
 

+ 1 - 1
oxygine/src/res/ResAnim.h

@@ -21,7 +21,7 @@ namespace oxygine
         ~ResAnim();
         ~ResAnim();
 
 
         void init(const std::string& file, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
         void init(const std::string& file, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
-        void init(Image* original, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
+        virtual void init(Image* original, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
         void init(animationFrames& frames, int columns, float scaleFactor = 1.0f, float appliedScale = 1.0f);
         void init(animationFrames& frames, int columns, float scaleFactor = 1.0f, float appliedScale = 1.0f);
         /**creates animation frames from NativeTexture*/
         /**creates animation frames from NativeTexture*/
         void init(spNativeTexture texture, const Point& originalSize, int columns, int rows, float scaleFactor);
         void init(spNativeTexture texture, const Point& originalSize, int columns, int rows, float scaleFactor);

+ 59 - 13
oxygine/src/res/SingleResAnim.cpp

@@ -1,21 +1,67 @@
 #include "SingleResAnim.h"
 #include "SingleResAnim.h"
 #include "Image.h"
 #include "Image.h"
-
+#include "core/VideoDriver.h"
+#include "core/NativeTexture.h"
 namespace oxygine
 namespace oxygine
 {
 {
-	void makeAlpha(const ImageData& srcImage, Rect& bounds, std::vector<unsigned char>& alpha, HitTestData& adata, bool hittest);
+    void makeAlpha(const ImageData& srcImage, Rect& bounds, std::vector<unsigned char>& alpha, HitTestData& adata, bool hittest);
+
+
+    void SingleResAnim::init(const std::string& file, int columns /* = 1 */, int rows /* = 1 */, float scaleFactor /* = 1.0f */)
+    {
+        ResAnim::init(file, columns, rows, scaleFactor);
+    }
+
+    void SingleResAnim::init(Image* original, int columns, int rows, float scaleFactor)
+    {
+        _scaleFactor = scaleFactor;
+        if (!original)
+            return;
+
+        spNativeTexture texture = IVideoDriver::instance->createTexture();
+        texture->init(original->lock(), false);
+        texture->apply();
+        ResAnim::init(texture, original->getSize(), columns, rows, scaleFactor);
+
+
+
+        Point originalSize = original->getSize();
+
+        int frame_width = originalSize.x / columns;
+        int frame_height = originalSize.y / rows;
+
+        Vector2 frameSize((float)frame_width, (float)frame_height);
+        int i = 0;
+        for (int y = 0; y < rows; ++y)
+        {
+            for (int x = 0; x < columns; ++x)
+            {
+                Rect src;
+                src.pos = Point(x * frame_width, y * frame_height);
+                src.size = Point(frame_width, frame_height);
+
+
+                Rect bounds;
+                HitTestData ht;
+                const ImageData& im = original->lock(src);
+                makeAlpha(im, bounds, _data, ht, true);
 
 
-	void SingleResAnim::init(const std::string& file, int columns, int rows, float scaleFactor)
-	{
+                _frames[i].setHitTestData(ht);
+                ++i;
+            }
+        }
 
 
-	}
+        i = 0;
+        for (int y = 0; y < rows; ++y)
+        {
+            for (int x = 0; x < columns; ++x)
+            {
+                HitTestData ht = _frames[i].getHitTestData();
+                ht.data = &_data[reinterpret_cast<size_t>(ht.data)];
+                _frames[i].setHitTestData(ht);
+                ++i;
+            }
+        }
 
 
-	void SingleResAnim::init(Image* original, int columns, int rows, float scaleFactor)
-	{
-		Rect bounds;
-		HitTestData ht;
-		const ImageData &im = original->lock();
-		makeAlpha(im, bounds, _data, ht, true);
-		int q = 0;
-	}
+    }
 }
 }

+ 8 - 8
oxygine/src/res/SingleResAnim.h

@@ -3,13 +3,13 @@
 
 
 namespace oxygine
 namespace oxygine
 {
 {
-	class SingleResAnim: public ResAnim
-	{
-	public:
-		void init(const std::string& file, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
-		void init(Image* original, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
+    class SingleResAnim: public ResAnim
+    {
+    public:
+        void init(const std::string& file, int columns = 1, int rows = 1, float scaleFactor = 1.0f);
+        void init(Image* original, int columns = 1, int rows = 1, float scaleFactor = 1.0f) OVERRIDE;
 
 
-	protected:
-		std::vector<unsigned char> _data;
-	};
+    protected:
+        std::vector<unsigned char> _data;
+    };
 }
 }