Browse Source

minor fixes

dmuratshin 11 years ago
parent
commit
303c23e521
38 changed files with 210 additions and 63 deletions
  1. 2 2
      .hg_archival.txt
  2. BIN
      3rdPartyTools/bin2h.exe
  3. 4 2
      CMakeLists.txt
  4. 73 0
      examples/Demo/gen_xml_resources.py
  5. 3 3
      examples/Demo/proj.emscripten/CMakeLists.txt
  6. 2 2
      examples/Game/part1/proj.emscripten/CMakeLists.txt
  7. 2 2
      examples/Game/part2/proj.emscripten/CMakeLists.txt
  8. 2 2
      examples/Game/part3/proj.emscripten/CMakeLists.txt
  9. 2 2
      examples/Game/part4/proj.emscripten/CMakeLists.txt
  10. 2 2
      examples/Game/part5/proj.emscripten/CMakeLists.txt
  11. 2 2
      examples/HelloWorld/proj.emscripten/CMakeLists.txt
  12. 2 2
      examples/Match3/proj.emscripten/CMakeLists.txt
  13. 2 2
      examples/TutorialResources/proj.emscripten/CMakeLists.txt
  14. 22 0
      oxygine/src/Actor.cpp
  15. 4 0
      oxygine/src/Actor.h
  16. 3 3
      oxygine/src/EventDispatcher.h
  17. 5 2
      oxygine/src/HttpRequestTask.cpp
  18. 3 1
      oxygine/src/HttpRequestTask.h
  19. 1 1
      oxygine/src/TouchEvent.h
  20. 12 3
      oxygine/src/core/Object.h
  21. 11 2
      oxygine/src/core/ThreadMessages.cpp
  22. 2 2
      oxygine/src/dev_tools/TexturesInspector.cpp
  23. 2 0
      oxygine/src/math/vector2.h
  24. 2 1
      oxygine/src/res/ResAnim.h
  25. 2 2
      oxygine/src/res/ResAtlas.cpp
  26. 2 2
      oxygine/src/res/ResAtlas.h
  27. 2 2
      oxygine/src/res/ResBuffer.cpp
  28. 2 2
      oxygine/src/res/ResBuffer.h
  29. 3 2
      oxygine/src/res/ResFont.h
  30. 2 2
      oxygine/src/res/ResFontBM.cpp
  31. 2 2
      oxygine/src/res/ResStarlingAtlas.h
  32. 13 2
      oxygine/src/res/Resource.h
  33. 3 3
      oxygine/src/res/Resources.cpp
  34. 1 1
      oxygine/src/res/Resources.h
  35. 5 1
      tools/gen_view_code.py
  36. 4 0
      tools/others/build_oxygine_with_sdl.py
  37. 2 2
      tools/others/gen_templates.py
  38. 2 2
      tools/templates/proj.emscripten/CMakeLists.txt

+ 2 - 2
.hg_archival.txt

@@ -1,5 +1,5 @@
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
-node: 81a82172b0d10ff54826b604faa6f3f3a56144d0
+node: 6a8fffad0fd800d9333539e63e2bffa07a65fa29
 branch: default
 latesttag: oldrender
-latesttagdistance: 627
+latesttagdistance: 639

BIN
3rdPartyTools/bin2h.exe


+ 4 - 2
CMakeLists.txt

@@ -35,6 +35,7 @@ if (EMSCRIPTEN)
 	set(OX_HAVE_LIBPNG 1)
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/emscripten)
 	set(SDL2_INCLUDE_DIRS "")
+	file(GLOB OXYGINE_JS_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/src/core/emscripten/*.js)
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/linux)
 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
@@ -45,8 +46,7 @@ elseif(MSVC)
 elseif(MINGW)	
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/win32_mingw)
 	set(libprefix lib)
-	set(OX_HAVE_LIBJPEG 0)
-	file(GLOB OXYGINE_JS_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/src/core/emscripten/*.js)
+	set(OX_HAVE_LIBJPEG 0)	
 endif()
  
 
@@ -63,6 +63,8 @@ if (WIN32)
 	set(FOLDERS ${FOLDERS} core/curl)
 	include_directories(${THIRD_PARTY}/curl/)
 	set(OX_HAVE_LIBCURL 1)
+elseif(EMSCRIPTEN)
+	set(OX_HAVE_LIBCURL 0)
 else(WIN32)
 	include_directories(${CURL_INCLUDE_DIRS})
 	set(CORE_LIBS ${CORE_LIBS} ${CURL_LIBRARIES})

+ 73 - 0
examples/Demo/gen_xml_resources.py

@@ -0,0 +1,73 @@
+"""
+    typical usage example
+
+    your project structure
+    game\
+         data\
+              images\*.png
+              xmls
+         gen_xml_resources.py
+
+    go to game folder and run:
+
+    gen_xml_resources.py -d data -i images -o xmls/out.xml
+
+"""
+
+import os
+import shutil
+import glob
+
+def gen_xml(args):
+    wildcard = "*.*"
+    path = args.data + "/" + args.images
+    filelist = glob.glob(path + "/" + args.wildcard)
+    print filelist
+    print path
+    
+    dest = open(args.data + "/" + args.out, "w")
+    write = dest.write
+    
+
+    write("<resources>\n")
+    write("\t<set path=\"%s\"/>\n" % (args.images, ))
+    if args.sfactor != 1:
+        write("\t<set scale_factor=\"%s\"/>\n" % (args.sfactor, ))
+
+    if not args.load:
+        write("\t<set load=\"false\"/>\n")
+            
+    
+    if not args.atlasses:
+        write("\t<atlas>\n")        
+
+    for file in filelist:        
+        name = os.path.split(file)[1]
+        if args.atlasses:
+            write("\t<atlas>\n\t")
+        write("\t\t<image file='%s'/>\n" % (name))
+        if args.atlasses:
+            write("\t</atlas>\n")
+            
+    if not args.atlasses:
+        write("\t</atlas>\n")        
+        
+    write("</resources>\n")    
+    dest.close()
+
+    
+if __name__ == "__main__":
+
+    import argparse 
+    parser = argparse.ArgumentParser(description = "generates xml file with image resources")
+    parser.add_argument("-d", "--data", help = "root data folder", default = ".", required = True)
+    parser.add_argument("-s", "--sfactor", help = "scale factor", default = 1)
+    parser.add_argument("-i", "--images", help = "folder with images. path relative to --data", default = ".")
+    parser.add_argument("-o", "--out", help = "output xml file name", default = "out.xml")
+    parser.add_argument("-w", "--wildcard", help = "default is '*.png'", default = "*.png")
+    parser.add_argument("-l", "--load", help = "preload files?", action="store_true", default = True)
+    parser.add_argument("-a", "--atlasses", help = "separate atlasses for each file?", action="store_true", default = False)
+
+
+    args = parser.parse_args()
+    gen_xml(args)

+ 3 - 3
examples/Demo/proj.emscripten/CMakeLists.txt

@@ -9,7 +9,7 @@ link_directories(${OXYGINE_LIBRARY_DIRS})
 SET(CMAKE_EXECUTABLE_SUFFIX ".html")
 set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wno-warn-absolute-paths")
 
-add_executable(Demo ../src/entry_point.cpp ../src/example.cpp ../src/test.cpp  ../src/TestBox9Sprite.h ../src/TestClipRect.h ../src/TestDrag.h ../src/TestInputText.h ../src/TestManageRes.h ../src/TestMask.h ../src/TestPerf.h ../src/TestPolygon.h ../src/TestProgressBar.h ../src/TestRender2Texture.h ../src/TestSliding.h ../src/TestTexel2Pixel.h ../src/TestText.h ../src/TestTextureFormat.h ../src/TestTweens.h ../src/TestUserShader.h ../src/TestUserShader2.h ../src/example.h ../src/test.h )
+add_executable(Demo ../src/entry_point.cpp ../src/example.cpp ../src/test.cpp  ../src/TestBox9Sprite.h ../src/TestClipRect.h ../src/TestDrag.h ../src/TestHttp.h ../src/TestInputText.h ../src/TestManageRes.h ../src/TestMask.h ../src/TestPerf.h ../src/TestPolygon.h ../src/TestProgressBar.h ../src/TestRender2Texture.h ../src/TestSliding.h ../src/TestTexel2Pixel.h ../src/TestText.h ../src/TestTextureFormat.h ../src/TestTweens.h ../src/TestUserShader.h ../src/TestUserShader2.h ../src/example.h ../src/test.h )
 
 if (CMAKE_BUILD_TYPE STREQUAL Debug)
 	SET(linkFlags "-g4 ")
@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(Demo PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(Demo ${OXYGINE_CORE_LIBS})
-em_link_pre_js(Demo ${OXYGINE_JS_LIBRARIES} ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(Demo  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/Game/part1/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(GamePart1 PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(GamePart1 ${OXYGINE_CORE_LIBS})
-em_link_pre_js(GamePart1 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(GamePart1  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/Game/part2/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(GamePart2 PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(GamePart2 ${OXYGINE_CORE_LIBS})
-em_link_pre_js(GamePart2 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(GamePart2  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/Game/part3/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(GamePart3 PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(GamePart3 ${OXYGINE_CORE_LIBS})
-em_link_pre_js(GamePart3 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(GamePart3  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/Game/part4/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(GamePart4 PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(GamePart4 ${OXYGINE_CORE_LIBS})
-em_link_pre_js(GamePart4 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(GamePart4  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/Game/part5/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(GamePart5 PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(GamePart5 ${OXYGINE_CORE_LIBS})
-em_link_pre_js(GamePart5 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(GamePart5  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/HelloWorld/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(HelloWorld PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(HelloWorld ${OXYGINE_CORE_LIBS})
-em_link_pre_js(HelloWorld ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(HelloWorld  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/Match3/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(Match3 PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(Match3 ${OXYGINE_CORE_LIBS})
-em_link_pre_js(Match3 ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(Match3  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 2 - 2
examples/TutorialResources/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(TutorialResources PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(TutorialResources ${OXYGINE_CORE_LIBS})
-em_link_pre_js(TutorialResources ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(TutorialResources  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)

+ 22 - 0
oxygine/src/Actor.cpp

@@ -49,6 +49,8 @@ namespace oxygine
 
 	void Actor::copyFrom(const Actor &src, cloneOptions opt)
 	{
+		_stage = 0;
+
 		_pos = src._pos;
 		_extendedIsOn = src._extendedIsOn;
 		_size = src._size;
@@ -499,6 +501,20 @@ namespace oxygine
 		_flags |= flag_transformDirty | flag_transformInvertDirty;
 	}
 
+	void Actor::setAnchorX(float x)
+	{
+		_anchor.x = x;
+		_flags &= ~flag_anchorInPixels;
+		_flags |= flag_transformDirty | flag_transformInvertDirty;
+	}
+
+	void Actor::setAnchorY(float y)
+	{
+		_anchor.y = y;
+		_flags &= ~flag_anchorInPixels;
+		_flags |= flag_transformDirty | flag_transformInvertDirty;
+	}
+
 	void Actor::setTransform(const AffineTransform &tr)
 	{
 		_transform = tr;
@@ -1187,6 +1203,7 @@ namespace oxygine
 		setAttr(node, "input", getInputEnabled(), true);
 		setAttr(node, "inputch", getInputChildrenEnabled(), true);
 		setAttr(node, "alpha", getAlpha(), (unsigned char)255);		
+        setAttrV2(node, "anchor", getAnchor(), Vector2(0, 0));
 
 		if (data->withChildren)
 		{
@@ -1230,6 +1247,11 @@ namespace oxygine
 					setPosition(attr2Vector2(attr.as_string()));
 					break;
 				}
+                if (!strcmp(name, "anchor"))
+                {
+                    setAnchor(attr2Vector2(attr.as_string()));
+                    break;
+                }
 				if (!strcmp(name, "scale"))
 				{
 					setScale(attr2Vector2(attr.as_string()));

+ 4 - 0
oxygine/src/Actor.h

@@ -91,6 +91,8 @@ namespace oxygine
 		spTween				getLastTween() const {return _tweens._last;}
 
 		const Vector2&		getAnchor() const {return _anchor;}
+		float				getAnchorX() const {return _anchor.x;}
+		float				getAnchorY() const {return _anchor.y;}
 		bool				getIsAnchorInPixels() {return (_flags & flag_anchorInPixels) != 0;}
 		const Vector2&		getPosition() const {return _pos;}
 		float				getX() const {return _pos.x;}
@@ -133,6 +135,8 @@ namespace oxygine
 		void setPosition(float x, float y);
 		void setX(float x);
 		void setY(float y);
+		void setAnchorX(float x);
+		void setAnchorY(float y);
 		/**Overwrites transformation matrix. position/scale/rotation would be ignored until you change them*/
 		void setTransform(const AffineTransform &tr);
 		/** set z order draw priority, from back (low value) to front (high value). Max value is 32000, Min value -32000*/

+ 3 - 3
oxygine/src/EventDispatcher.h

@@ -21,10 +21,10 @@ namespace oxygine
 	typedef Closure<void (Event *ev)> EventCallback;
 
 	DECLARE_SMART(EventDispatcher, spEventDispatcher);
-	class EventDispatcher: public Object
+	class EventDispatcher: public _Object
 	{
 	public:
-		EventDispatcher(const EventDispatcher &ed):Object(ed), _lastID(0), _listeners(0){}
+		EventDispatcher(const EventDispatcher &ed):_Object(ed), _lastID(0), _listeners(0){}
 		EventDispatcher();
 		~EventDispatcher();
 
@@ -53,4 +53,4 @@ namespace oxygine
 		typedef std::list<listener> listeners;
 		listeners *_listeners;
 	};
-}
+}

+ 5 - 2
oxygine/src/HttpRequestTask.cpp

@@ -12,7 +12,7 @@ namespace oxygine
 	void HttpRequestTask::init(){}
 	void HttpRequestTask::release(){}
 #endif
-	HttpRequestTask::HttpRequestTask()
+	HttpRequestTask::HttpRequestTask() :_loaded(0)
 	{
 
 	}
@@ -57,6 +57,7 @@ namespace oxygine
 
 	void HttpRequestTask::_prerun()
 	{
+		_loaded = 0;
 		_response.clear(); 
 		if (!_fname.empty())
 		{
@@ -66,7 +67,9 @@ namespace oxygine
 
 	void HttpRequestTask::dispatchProgress(int loaded, int total)
 	{
-		ProgressEvent event(loaded, total);
+		int delta = loaded - _loaded;
+		_loaded = loaded;
+		ProgressEvent event(delta, loaded, total);
 		dispatchEvent(&event);
 	}
 

+ 3 - 1
oxygine/src/HttpRequestTask.h

@@ -27,8 +27,9 @@ namespace oxygine
 		{
 		public:
 			enum {EVENT=PROGRESS};
-			ProgressEvent(int Loaded, int Total) :Event(PROGRESS), loaded(Loaded), total(Total){};
+			ProgressEvent(int Delta, int Loaded, int Total) :Event(PROGRESS), delta(Delta), loaded(Loaded), total(Total){};
 
+			int delta;
 			int loaded;
 			int total;
 		};
@@ -59,6 +60,7 @@ namespace oxygine
         virtual void _setUrl(const std::string &url){}
         virtual void _setPostData(const std::vector<unsigned char> &data){}
 
+		int _loaded;
 		std::string _url;
 		std::string _fname;
 		std::vector<unsigned char> _response;

+ 1 - 1
oxygine/src/TouchEvent.h

@@ -25,7 +25,7 @@ namespace oxygine
 		};
 
 
-		TouchEvent(eventType type, bool Bubbles = true, const Vector2 &locPosition = Vector2(0, 0)) :Event(type, Bubbles), localPosition(locPosition), position(locPosition), mouseButton(MouseButton_Touch), pressure(1.0f){}
+		TouchEvent(eventType type, bool Bubbles = true, const Vector2 &locPosition = Vector2(0, 0)) :Event(type, Bubbles), localPosition(locPosition), position(locPosition), mouseButton(MouseButton_Touch), pressure(1.0f), index(0){}
 
 		Vector2 localPosition;
 		Vector2 position;

+ 12 - 3
oxygine/src/core/Object.h

@@ -80,7 +80,7 @@ namespace oxygine
 		static int _assertCtorID;
 		static int _assertDtorID;
 	};
-	
+
 	DECLARE_SMART(Object, spObject);
 	class Object: public ref_counter, public ObjectBase
 	{
@@ -121,5 +121,14 @@ namespace oxygine
 		OX_ASSERT(t && "can't cast pointer");
 #endif
 		return static_cast<T *>(p.get());
-	}	
-}
+	}
+}
+
+#ifdef OX_EDITOR
+#include "EditorObject.h"
+#else
+namespace oxygine
+{
+	typedef Object _Object;
+}
+#endif

+ 11 - 2
oxygine/src/core/ThreadMessages.cpp

@@ -8,6 +8,10 @@ namespace oxygine
 #else
 #define  LOGDN(...)  ((void)0)
 #define  LOGD(...)  ((void)0)
+#endif
+
+#if EMSCRIPTEN || __APPLE__ || __S3E__
+#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
 #endif
 
 	MutexPthreadLock::MutexPthreadLock(pthread_mutex_t &m, bool lock) :_mutex(m), _locked(lock)
@@ -23,8 +27,13 @@ namespace oxygine
 
 	ThreadMessages::ThreadMessages():_id(0), _waitReplyID(0)
 	{			
-		pthread_cond_init(&_cond, 0);
-		pthread_mutex_init(&_mutex, 0);	
+		pthread_cond_init(&_cond, 0);		
+
+		pthread_mutexattr_t attr;
+		pthread_mutexattr_init(&attr);		
+		pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
+
+		pthread_mutex_init(&_mutex, &attr);
 	}
 
 	ThreadMessages::~ThreadMessages()

+ 2 - 2
oxygine/src/dev_tools/TexturesInspector.cpp

@@ -22,7 +22,7 @@ namespace oxygine
 		{
 			setVerticalMode(Box9Sprite::TILING_FULL);
 			setHorizontalMode(Box9Sprite::TILING_FULL);
-			setResAnim(DebugActor::resSystem->getResAnim("checker"));
+			Sprite::setResAnim(DebugActor::resSystem->getResAnim("checker"));
 
 			AnimationFrame f;
 			Vector2 s = fitSize(itemSize, Vector2((float)t->getWidth(), (float)t->getHeight()));
@@ -144,4 +144,4 @@ namespace oxygine
 	{
 
 	}
-}
+}

+ 2 - 0
oxygine/src/math/vector2.h

@@ -32,6 +32,8 @@ namespace oxygine
 		template <class R>
 		VectorT2 operator /= (R s) {x /= s; y /= s; return (*this);}
 
+                VectorT2 mult (const VectorT2& r) const {return VectorT2(x * r.x, y * r.y);}
+                VectorT2 div (const VectorT2& r) const {return VectorT2(x / r.x, y / r.y);}
 		
 		operator VectorT2<float> () const {return this->cast< VectorT2<float> >();}
 

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

@@ -13,7 +13,8 @@ namespace oxygine
 	typedef std::vector<AnimationFrame> animationFrames;
 	class MemoryTexture;
 
-	class ResAnim: public Resource
+	DECLARE_SMART(ResAnim, spResAnim);
+	class ResAnim: public _Resource
 	{
 	public:
 		ResAnim(Resource *atlas = 0);

+ 2 - 2
oxygine/src/res/ResAtlas.cpp

@@ -73,7 +73,7 @@ namespace oxygine
 
 	void ResAtlas::init_resAnim(ResAnim *rs, const std::string &file, pugi::xml_node node)
 	{
-		rs->setName(Resource::extractID(node, file, ""));
+		rs->setName(_Resource::extractID(node, file, ""));
 		setNode(rs, node);
 	}
 
@@ -416,7 +416,7 @@ namespace oxygine
 	{
 		context.walker.checkSetAttributes();
 		ResAtlas *ra = new ResAtlas();
-		ra->setName(Resource::extractID(context.walker.getNode(), "", std::string("!atlas:") + *context.xml_name));
+		ra->setName(_Resource::extractID(context.walker.getNode(), "", std::string("!atlas:") + *context.xml_name));
 		ra->loadAtlas(context);
 		setNode(ra, context.walker.getNode());
 		//context.meta = context.meta.next_sibling();

+ 2 - 2
oxygine/src/res/ResAtlas.h

@@ -17,7 +17,7 @@ namespace oxygine
 	class CreateResourceContext;
 	DECLARE_SMART(NativeTexture, spNativeTexture);
 
-	class ResAtlas: public Resource
+	class ResAtlas: public _Resource
 	{
 	public:
 		static Resource *create(CreateResourceContext &context);
@@ -61,4 +61,4 @@ namespace oxygine
 
 	typedef void(*load_texture_hook)(const std::string &file, spNativeTexture nt, LoadResourcesContext *load_context);
 	void set_load_texture_hook(load_texture_hook);
-}
+}

+ 2 - 2
oxygine/src/res/ResBuffer.cpp

@@ -9,7 +9,7 @@ namespace oxygine
 		pugi::xml_node node = context.walker.getNode();
 		std::string file = node.attribute("file").value();
 
-		rs->setName(Resource::extractID(node, file, ""));
+		rs->setName(_Resource::extractID(node, file, ""));
 		rs->init(context.walker.getPath("file").c_str());
 		setNode(rs, node);
 
@@ -41,4 +41,4 @@ namespace oxygine
 	{
 		_buffer.data.clear();
 	}
-}
+}

+ 2 - 2
oxygine/src/res/ResBuffer.h

@@ -9,7 +9,7 @@ namespace oxygine
 	class Resources;
 	class CreateResourceContext;
 
-	class ResBuffer: public Resource
+	class ResBuffer: public _Resource
 	{
 	public:
 		static Resource *create(CreateResourceContext &);
@@ -28,4 +28,4 @@ namespace oxygine
 		file::buffer _buffer;
 		std::string _path;
 	};
-}
+}

+ 3 - 2
oxygine/src/res/ResFont.h

@@ -5,9 +5,10 @@ namespace oxygine
 {
 	class Font;
 
-	class ResFont: public Resource
+	DECLARE_SMART(ResFont, spResFont);
+	class ResFont: public _Resource
 	{
 	public:
 		virtual Font *getFont(const char *name = 0, int size = 0) const = 0;
 	};
-}
+}

+ 2 - 2
oxygine/src/res/ResFontBM.cpp

@@ -163,7 +163,7 @@ namespace oxygine
 			_premultipliedAlpha = node.attribute("premultiplied_alpha").as_bool(_premultipliedAlpha);
 			
 			_file = context->walker.getPath("file");
-			setName(Resource::extractID(node, _file, ""));
+			setName(_Resource::extractID(node, _file, ""));
 
 			if (bmc)
 			{
@@ -336,4 +336,4 @@ namespace oxygine
 	{
 		return _font;
 	}
-}
+}

+ 2 - 2
oxygine/src/res/ResStarlingAtlas.h

@@ -8,7 +8,7 @@ namespace oxygine
 	class CreateResourceContext;
 	DECLARE_SMART(NativeTexture, spNativeTexture);
 
-	class ResStarlingAtlas: public Resource
+	class ResStarlingAtlas: public _Resource
 	{
 	public:
 		static Resource *create(CreateResourceContext &context);
@@ -30,4 +30,4 @@ namespace oxygine
 		spNativeTexture _texture;
 		std::string _imagePath;
 	};
-}
+}

+ 13 - 2
oxygine/src/res/Resource.h

@@ -13,7 +13,7 @@ namespace oxygine
 	class LoadResourcesContext;
 
 	DECLARE_SMART(Resource, spResource);
-	class Resource: public Object//Base
+	class Resource: public _Object//Base
 	{
 	public:
 		Resource();
@@ -58,4 +58,15 @@ namespace oxygine
 		Resource(const Resource&);
 		const Resource& operator=(const Resource&);	
 	};
-}
+}
+
+
+#ifdef OX_EDITOR
+#include "EditorResource.h"
+#else
+namespace oxygine
+{
+	typedef Resource _Resource;
+}
+#endif
+

+ 3 - 3
oxygine/src/res/Resources.cpp

@@ -84,14 +84,14 @@ namespace oxygine
 
 	void Resources::load(LoadResourcesContext *context, ResLoadedCallback cb)
 	{
-		Resource::load(context);
+		_Resource::load(context);
 		//if (cb)
 		//	cb(thi)
 	}
 
 	void Resources::unload()
 	{
-		Resource::unload(); 
+		_Resource::unload();
 	}
 
 	void Resources::_load(LoadResourcesContext *context)
@@ -265,7 +265,7 @@ namespace oxygine
 			registeredResources::iterator i = std::lower_bound(_registeredResources.begin(), _registeredResources.end(), type);
 			if (i == _registeredResources.end() || strcmp(i->id, type))
 			{
-				log::error("unknown resource. type: '%s' id: '%s'", type, Resource::extractID(context.walker.getNode(), "", "").c_str());
+				log::error("unknown resource. type: '%s' id: '%s'", type, _Resource::extractID(context.walker.getNode(), "", "").c_str());
 				OX_ASSERT(!"unknown resource type");
 				continue;
 			}

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

@@ -23,7 +23,7 @@ namespace oxygine
 	class LoadResourcesContext; 
 
 
-	class Resources: public Resource
+	class Resources: public _Resource
 	{
 	public:
 		typedef std::vector<spResource> resources;

+ 5 - 1
tools/gen_view_code.py

@@ -41,6 +41,8 @@ mp_sprite = class_type("spSprite", "Sprite", "Sprite.h")
 mp_sliding = class_type("spSlidingActor", "SlidingActor", "SlidingActor.h")
 mp_color = class_type("spColorRectSprite", "ColorRectSprite", "ColorRectSprite.h")
 mp_box9sprite = class_type("spBox9Sprite", "Box9Sprite", "Box9Sprite.h")    
+mp_polygon = class_type("spPolygon", "Polygon", "Polygon.h")    
+mp_msprite = class_type("spMaskedSprite", "MaskedSprite", "MaskedSprite.h")    
 mp_view = class_type("spView", "View", "View.h")    
 
 def_mappings = (mp_bar,
@@ -51,7 +53,9 @@ def_mappings = (mp_bar,
                 mp_sprite, 
                 mp_sliding,
                 mp_color,
-                mp_box9sprite)
+                mp_box9sprite,
+                mp_polygon,
+                mp_msprite)
 
 def get_mapping(lst, name):
     for m in lst:

+ 4 - 0
tools/others/build_oxygine_with_sdl.py

@@ -52,6 +52,10 @@ def copy(path):
     items = (win32 + "zlib1.dll", 
              win32 + "pthreadVCE2.dll",
              "../../libs/SDL2.dll")
+
+    if "Demo/" in path:
+        items = items + (win32 + "libcurl.dll", )
+
     for item in items:
         name = os.path.split(item)[1]
         shutil.copy(item, path + "/" + name)

+ 2 - 2
tools/others/gen_templates.py

@@ -8,10 +8,10 @@ def gen(path, project = ""):
 	projs = ("win32", "android", "macosx", "ios", "cmake", "emscripten")
 	#projs = ("android", )
 	projs = ("ios", "macosx")
-	projs = ("macosx", )
-	#projs = ("emscripten", )
+	projs = ("macosx", )	
 	projs = ("win32", )
 	projs = ("cmake", )
+	projs = ("emscripten", )
 
 	for platform in projs:
 		dest = "../../examples/" + path + "/proj." + platform

+ 2 - 2
tools/templates/proj.emscripten/CMakeLists.txt

@@ -17,9 +17,9 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
 
 set_target_properties(${PROJECT} PROPERTIES LINK_FLAGS "${linkFlags}")
 
 target_link_libraries(${PROJECT} ${OXYGINE_CORE_LIBS})
-em_link_pre_js(${PROJECT} ${CMAKE_CURRENT_SOURCE_DIR}/data.js)
+em_link_pre_js(${PROJECT}  ${OXYGINE_JS_LIBRARIES}  ${CMAKE_CURRENT_SOURCE_DIR}/data.js)