mirror of https://github.com/axmolengine/axmol.git
Merge branch 'v3' of github.com:cocos2d/cocos2d-x into framework
This commit is contained in:
commit
264a4d104f
|
@ -818,18 +818,10 @@
|
|||
15EFA212198A2BB5000C57D3 /* CCProtectedNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15EFA20F198A2BB5000C57D3 /* CCProtectedNode.cpp */; };
|
||||
15EFA213198A2BB5000C57D3 /* CCProtectedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 15EFA210198A2BB5000C57D3 /* CCProtectedNode.h */; };
|
||||
15EFA214198A2BB5000C57D3 /* CCProtectedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 15EFA210198A2BB5000C57D3 /* CCProtectedNode.h */; };
|
||||
15FB206A1AE7BE7400C31518 /* SpritePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20661AE7BE7400C31518 /* SpritePolygon.cpp */; };
|
||||
15FB206B1AE7BE7400C31518 /* SpritePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20661AE7BE7400C31518 /* SpritePolygon.cpp */; };
|
||||
15FB206C1AE7BE7400C31518 /* SpritePolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20671AE7BE7400C31518 /* SpritePolygon.h */; };
|
||||
15FB206D1AE7BE7400C31518 /* SpritePolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20671AE7BE7400C31518 /* SpritePolygon.h */; };
|
||||
15FB206E1AE7BE7400C31518 /* SpritePolygonCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20681AE7BE7400C31518 /* SpritePolygonCache.cpp */; };
|
||||
15FB206F1AE7BE7400C31518 /* SpritePolygonCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20681AE7BE7400C31518 /* SpritePolygonCache.cpp */; };
|
||||
15FB20701AE7BE7400C31518 /* SpritePolygonCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20691AE7BE7400C31518 /* SpritePolygonCache.h */; };
|
||||
15FB20711AE7BE7400C31518 /* SpritePolygonCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20691AE7BE7400C31518 /* SpritePolygonCache.h */; };
|
||||
15FB20741AE7BF8600C31518 /* MarchingSquare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20721AE7BF8600C31518 /* MarchingSquare.cpp */; };
|
||||
15FB20751AE7BF8600C31518 /* MarchingSquare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20721AE7BF8600C31518 /* MarchingSquare.cpp */; };
|
||||
15FB20761AE7BF8600C31518 /* MarchingSquare.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20731AE7BF8600C31518 /* MarchingSquare.h */; };
|
||||
15FB20771AE7BF8600C31518 /* MarchingSquare.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20731AE7BF8600C31518 /* MarchingSquare.h */; };
|
||||
15FB20741AE7BF8600C31518 /* CCAutoPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20721AE7BF8600C31518 /* CCAutoPolygon.cpp */; };
|
||||
15FB20751AE7BF8600C31518 /* CCAutoPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15FB20721AE7BF8600C31518 /* CCAutoPolygon.cpp */; };
|
||||
15FB20761AE7BF8600C31518 /* CCAutoPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20731AE7BF8600C31518 /* CCAutoPolygon.h */; };
|
||||
15FB20771AE7BF8600C31518 /* CCAutoPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB20731AE7BF8600C31518 /* CCAutoPolygon.h */; };
|
||||
15FB20871AE7C57D00C31518 /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = 15FB207A1AE7C57D00C31518 /* shapes.cc */; };
|
||||
15FB20881AE7C57D00C31518 /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = 15FB207A1AE7C57D00C31518 /* shapes.cc */; };
|
||||
15FB20891AE7C57D00C31518 /* shapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 15FB207B1AE7C57D00C31518 /* shapes.h */; };
|
||||
|
@ -1848,6 +1840,10 @@
|
|||
826294331AAF001C00CB7CF7 /* HttpAsynConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 52B47A2A1A5349A3004E4C60 /* HttpAsynConnection.m */; };
|
||||
826294341AAF003E00CB7CF7 /* HttpClient-apple.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52B47A2B1A5349A3004E4C60 /* HttpClient-apple.mm */; };
|
||||
826294351AAF004C00CB7CF7 /* HttpCookie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52B47A2C1A5349A3004E4C60 /* HttpCookie.cpp */; };
|
||||
8525E3A21B291E42008EE815 /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8525E3A11B291E42008EE815 /* clipper.hpp */; };
|
||||
8525E3A31B291E42008EE815 /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8525E3A11B291E42008EE815 /* clipper.hpp */; };
|
||||
85B3743A1B204B9400C488D6 /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85B374381B204B9400C488D6 /* clipper.cpp */; };
|
||||
85B3743B1B204B9400C488D6 /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85B374381B204B9400C488D6 /* clipper.cpp */; };
|
||||
A07A4CAF1783777C0073F6A7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1551A342158F2AB200E66CFE /* Foundation.framework */; };
|
||||
B2165EEA19921124000BE3E6 /* CCPrimitiveCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B257B45E198A353E00D9A687 /* CCPrimitiveCommand.cpp */; };
|
||||
B217703C1977ECB4009EE11B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B217703B1977ECB4009EE11B /* IOKit.framework */; };
|
||||
|
@ -3669,12 +3665,8 @@
|
|||
15B3707719EE414C00ABE682 /* Manifest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Manifest.h; sourceTree = "<group>"; };
|
||||
15EFA20F198A2BB5000C57D3 /* CCProtectedNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCProtectedNode.cpp; sourceTree = "<group>"; };
|
||||
15EFA210198A2BB5000C57D3 /* CCProtectedNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCProtectedNode.h; sourceTree = "<group>"; };
|
||||
15FB20661AE7BE7400C31518 /* SpritePolygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpritePolygon.cpp; sourceTree = "<group>"; };
|
||||
15FB20671AE7BE7400C31518 /* SpritePolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpritePolygon.h; sourceTree = "<group>"; };
|
||||
15FB20681AE7BE7400C31518 /* SpritePolygonCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpritePolygonCache.cpp; sourceTree = "<group>"; };
|
||||
15FB20691AE7BE7400C31518 /* SpritePolygonCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpritePolygonCache.h; sourceTree = "<group>"; };
|
||||
15FB20721AE7BF8600C31518 /* MarchingSquare.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarchingSquare.cpp; sourceTree = "<group>"; };
|
||||
15FB20731AE7BF8600C31518 /* MarchingSquare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarchingSquare.h; sourceTree = "<group>"; };
|
||||
15FB20721AE7BF8600C31518 /* CCAutoPolygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCAutoPolygon.cpp; sourceTree = "<group>"; };
|
||||
15FB20731AE7BF8600C31518 /* CCAutoPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCAutoPolygon.h; sourceTree = "<group>"; };
|
||||
15FB207A1AE7C57D00C31518 /* shapes.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shapes.cc; sourceTree = "<group>"; };
|
||||
15FB207B1AE7C57D00C31518 /* shapes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shapes.h; sourceTree = "<group>"; };
|
||||
15FB207C1AE7C57D00C31518 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; };
|
||||
|
@ -4601,6 +4593,8 @@
|
|||
5E9F61231A3FFE3D0038DE01 /* CCFrustum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCFrustum.h; sourceTree = "<group>"; };
|
||||
5E9F61241A3FFE3D0038DE01 /* CCPlane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCPlane.cpp; sourceTree = "<group>"; };
|
||||
5E9F61251A3FFE3D0038DE01 /* CCPlane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCPlane.h; sourceTree = "<group>"; };
|
||||
8525E3A11B291E42008EE815 /* clipper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clipper.hpp; sourceTree = "<group>"; };
|
||||
85B374381B204B9400C488D6 /* clipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clipper.cpp; sourceTree = "<group>"; };
|
||||
A07A4D641783777C0073F6A7 /* libcocos2d iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libcocos2d iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B20564AA1A6E5744001C1B6E /* ccShader_PositionColorTextureAsPointsize.vert */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionColorTextureAsPointsize.vert; sourceTree = "<group>"; };
|
||||
B217703B1977ECB4009EE11B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
|
||||
|
@ -6023,12 +6017,8 @@
|
|||
1A570275180BCC840088DEC7 /* sprite-nodes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
15FB20721AE7BF8600C31518 /* MarchingSquare.cpp */,
|
||||
15FB20731AE7BF8600C31518 /* MarchingSquare.h */,
|
||||
15FB20661AE7BE7400C31518 /* SpritePolygon.cpp */,
|
||||
15FB20671AE7BE7400C31518 /* SpritePolygon.h */,
|
||||
15FB20681AE7BE7400C31518 /* SpritePolygonCache.cpp */,
|
||||
15FB20691AE7BE7400C31518 /* SpritePolygonCache.h */,
|
||||
15FB20721AE7BF8600C31518 /* CCAutoPolygon.cpp */,
|
||||
15FB20731AE7BF8600C31518 /* CCAutoPolygon.h */,
|
||||
1A57028E180BCCAB0088DEC7 /* CCAnimation.cpp */,
|
||||
1A57028F180BCCAB0088DEC7 /* CCAnimation.h */,
|
||||
1A570290180BCCAB0088DEC7 /* CCAnimationCache.cpp */,
|
||||
|
@ -6091,6 +6081,7 @@
|
|||
1A57033E180BD0490088DEC7 /* external */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
68B39B391B1C5C670084F72C /* clipper */,
|
||||
B6DD2F731B04820C00E47F5F /* recast */,
|
||||
B6CAB0021AF9A9EE00B9B856 /* bullet */,
|
||||
15FB20781AE7C57D00C31518 /* poly2tri */,
|
||||
|
@ -7719,6 +7710,16 @@
|
|||
path = TextReader;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
68B39B391B1C5C670084F72C /* clipper */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8525E3A11B291E42008EE815 /* clipper.hpp */,
|
||||
85B374381B204B9400C488D6 /* clipper.cpp */,
|
||||
);
|
||||
name = clipper;
|
||||
path = ../external/clipper;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B29594B81926D61F003EEF37 /* 3d */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -8910,7 +8911,7 @@
|
|||
3E2F27A719CFBFE400E7C490 /* AudioEngine.h in Headers */,
|
||||
15AE183A19AAD2F700C27E9E /* CCRay.h in Headers */,
|
||||
15AE18A319AAD33D00C27E9E /* CCParticleSystemQuadLoader.h in Headers */,
|
||||
15FB20761AE7BF8600C31518 /* MarchingSquare.h in Headers */,
|
||||
15FB20761AE7BF8600C31518 /* CCAutoPolygon.h in Headers */,
|
||||
B665E2C41AA80A6500DDB1C5 /* CCPUGeometryRotatorTranslator.h in Headers */,
|
||||
46A170F01807CECA005B8026 /* CCPhysicsWorld.h in Headers */,
|
||||
15AE199D19AAD39600C27E9E /* ScrollViewReader.h in Headers */,
|
||||
|
@ -9157,7 +9158,6 @@
|
|||
15AE1A3319AAD3D500C27E9E /* b2CircleShape.h in Headers */,
|
||||
1A5701E0180BCB8C0088DEC7 /* CCLayer.h in Headers */,
|
||||
1A5701E4180BCB8C0088DEC7 /* CCScene.h in Headers */,
|
||||
15FB20701AE7BE7400C31518 /* SpritePolygonCache.h in Headers */,
|
||||
B6CAB2C11AF9AA1A00B9B856 /* btEmptyShape.h in Headers */,
|
||||
B665E3D81AA80A6600DDB1C5 /* CCPUScriptParser.h in Headers */,
|
||||
382384091A25900F002C4610 /* FlatBuffersSerialize.h in Headers */,
|
||||
|
@ -9512,6 +9512,7 @@
|
|||
15AE183219AAD2F700C27E9E /* CCOBB.h in Headers */,
|
||||
15AE1BE319AAE01E00C27E9E /* CCScrollView.h in Headers */,
|
||||
B665E2941AA80A6500DDB1C5 /* CCPUEmitter.h in Headers */,
|
||||
8525E3A21B291E42008EE815 /* clipper.hpp in Headers */,
|
||||
15FB209D1AE7C57D00C31518 /* sweep_context.h in Headers */,
|
||||
50CB247519D9C5A100687767 /* AudioCache.h in Headers */,
|
||||
3823841C1A2590D2002C4610 /* ComAudioReader.h in Headers */,
|
||||
|
@ -9667,7 +9668,6 @@
|
|||
B6CAB2D31AF9AA1A00B9B856 /* btMultiSphereShape.h in Headers */,
|
||||
B665E1F41AA80A6500DDB1C5 /* CCPUAffector.h in Headers */,
|
||||
1A01C69E18F57BE800EFE3A6 /* CCString.h in Headers */,
|
||||
15FB206C1AE7BE7400C31518 /* SpritePolygon.h in Headers */,
|
||||
50ABC00F1926664800A911A9 /* CCFileUtils.h in Headers */,
|
||||
B665E2981AA80A6500DDB1C5 /* CCPUEmitterManager.h in Headers */,
|
||||
15AE1A3719AAD3D500C27E9E /* b2PolygonShape.h in Headers */,
|
||||
|
@ -9945,7 +9945,6 @@
|
|||
B665E2451AA80A6500DDB1C5 /* CCPUCollisionAvoidanceAffector.h in Headers */,
|
||||
B6CAB3381AF9AA1A00B9B856 /* btQuantization.h in Headers */,
|
||||
50ABBEC41925AB6F00A911A9 /* CCVector.h in Headers */,
|
||||
15FB20711AE7BE7400C31518 /* SpritePolygonCache.h in Headers */,
|
||||
50ABBE501925AB6F00A911A9 /* CCEventCustom.h in Headers */,
|
||||
15AE1AD719AAD40300C27E9E /* b2WheelJoint.h in Headers */,
|
||||
B665E3311AA80A6500DDB1C5 /* CCPUOnCountObserverTranslator.h in Headers */,
|
||||
|
@ -10143,6 +10142,7 @@
|
|||
B665E2AD1AA80A6500DDB1C5 /* CCPUFlockCenteringAffector.h in Headers */,
|
||||
15AE196B19AAD35100C27E9E /* DictionaryHelper.h in Headers */,
|
||||
B6CAB4C21AF9AA1A00B9B856 /* SpuLibspe2Support.h in Headers */,
|
||||
8525E3A31B291E42008EE815 /* clipper.hpp in Headers */,
|
||||
B6CAB5021AF9AA1A00B9B856 /* btConvexHullComputer.h in Headers */,
|
||||
B665E2411AA80A6500DDB1C5 /* CCPUCircleEmitterTranslator.h in Headers */,
|
||||
B6CAB2BA1AF9AA1A00B9B856 /* btConvexTriangleMeshShape.h in Headers */,
|
||||
|
@ -10395,13 +10395,12 @@
|
|||
B6DD2FE01B04825B00E47F5F /* DetourObstacleAvoidance.h in Headers */,
|
||||
B6CAB5081AF9AA1A00B9B856 /* btGeometryUtil.h in Headers */,
|
||||
1A5702F1180BCE750088DEC7 /* CCTMXLayer.h in Headers */,
|
||||
15FB20771AE7BF8600C31518 /* MarchingSquare.h in Headers */,
|
||||
15FB20771AE7BF8600C31518 /* CCAutoPolygon.h in Headers */,
|
||||
B6CAB4F81AF9AA1A00B9B856 /* btAlignedAllocator.h in Headers */,
|
||||
15AE18AE19AAD33D00C27E9E /* CCBFileLoader.h in Headers */,
|
||||
B6CAB2D41AF9AA1A00B9B856 /* btMultiSphereShape.h in Headers */,
|
||||
15AE197819AAD35700C27E9E /* CCActionTimeline.h in Headers */,
|
||||
B6CAAFF11AF9A9E100B9B856 /* CCPhysics3DDebugDrawer.h in Headers */,
|
||||
15FB206D1AE7BE7400C31518 /* SpritePolygon.h in Headers */,
|
||||
15AE1AA019AAD40300C27E9E /* b2Timer.h in Headers */,
|
||||
5034CA44191D591100CE6051 /* ccShader_Label.vert in Headers */,
|
||||
1A5702F5180BCE750088DEC7 /* CCTMXObjectGroup.h in Headers */,
|
||||
|
@ -11113,6 +11112,7 @@
|
|||
B6CAB4C51AF9AA1A00B9B856 /* boxBoxDistance.cpp in Sources */,
|
||||
B6CAB29F1AF9AA1A00B9B856 /* btConvex2dShape.cpp in Sources */,
|
||||
B6CAB4331AF9AA1A00B9B856 /* btGpu3DGridBroadphase.cpp in Sources */,
|
||||
85B3743A1B204B9400C488D6 /* clipper.cpp in Sources */,
|
||||
15AE1A8819AAD40300C27E9E /* b2PrismaticJoint.cpp in Sources */,
|
||||
182C5CB21A95964700C30D34 /* Node3DReader.cpp in Sources */,
|
||||
50ABBE491925AB6F00A911A9 /* CCEventAcceleration.cpp in Sources */,
|
||||
|
@ -11250,7 +11250,6 @@
|
|||
50ABC0191926664800A911A9 /* CCSAXParser.cpp in Sources */,
|
||||
15AE189219AAD33D00C27E9E /* CCLayerGradientLoader.cpp in Sources */,
|
||||
B6CAB4471AF9AA1A00B9B856 /* btThreadSupportInterface.cpp in Sources */,
|
||||
15FB206E1AE7BE7400C31518 /* SpritePolygonCache.cpp in Sources */,
|
||||
15AE1B6A19AADA9900C27E9E /* UIDeprecated.cpp in Sources */,
|
||||
15AE183C19AAD2F700C27E9E /* CCSkeleton3D.cpp in Sources */,
|
||||
B6CAB36F1AF9AA1A00B9B856 /* btGjkConvexCast.cpp in Sources */,
|
||||
|
@ -11366,7 +11365,7 @@
|
|||
15AE199A19AAD39600C27E9E /* PageViewReader.cpp in Sources */,
|
||||
1A57030C180BCF190088DEC7 /* CCComponent.cpp in Sources */,
|
||||
382383F61A258FA7002C4610 /* idl_gen_fbs.cpp in Sources */,
|
||||
15FB20741AE7BF8600C31518 /* MarchingSquare.cpp in Sources */,
|
||||
15FB20741AE7BF8600C31518 /* CCAutoPolygon.cpp in Sources */,
|
||||
B665E2A61AA80A6500DDB1C5 /* CCPUEventHandlerTranslator.cpp in Sources */,
|
||||
15AE1A5919AAD40300C27E9E /* b2StackAllocator.cpp in Sources */,
|
||||
B6CAB20B1AF9AA1A00B9B856 /* btQuantizedBvh.cpp in Sources */,
|
||||
|
@ -11390,7 +11389,6 @@
|
|||
B665E2721AA80A6500DDB1C5 /* CCPUDoPlacementParticleEventHandler.cpp in Sources */,
|
||||
50ABBD3C1925AB0000A911A9 /* CCGeometry.cpp in Sources */,
|
||||
B6CAB3C31AF9AA1A00B9B856 /* btHingeConstraint.cpp in Sources */,
|
||||
15FB206A1AE7BE7400C31518 /* SpritePolygon.cpp in Sources */,
|
||||
B29A7DDD19EE1B7700872B35 /* BoneData.c in Sources */,
|
||||
15AE188A19AAD33D00C27E9E /* CCControlLoader.cpp in Sources */,
|
||||
5012168E1AC47380009A4BEA /* CCRenderState.cpp in Sources */,
|
||||
|
@ -11990,8 +11988,8 @@
|
|||
15AE18AB19AAD33D00C27E9E /* CCBAnimationManager.cpp in Sources */,
|
||||
15AE1B7219AADA9A00C27E9E /* UIListView.cpp in Sources */,
|
||||
1A5701BE180BCB5A0088DEC7 /* CCLabelAtlas.cpp in Sources */,
|
||||
15FB20751AE7BF8600C31518 /* CCAutoPolygon.cpp in Sources */,
|
||||
B6CAB2021AF9AA1A00B9B856 /* btMultiSapBroadphase.cpp in Sources */,
|
||||
15FB20751AE7BF8600C31518 /* MarchingSquare.cpp in Sources */,
|
||||
15AE1A3D19AAD3D500C27E9E /* b2CollideEdge.cpp in Sources */,
|
||||
1A5701C2180BCB5A0088DEC7 /* CCLabelBMFont.cpp in Sources */,
|
||||
1A087AE91860400400196EF5 /* edtaa3func.cpp in Sources */,
|
||||
|
@ -12280,7 +12278,6 @@
|
|||
B6CAB2AC1AF9AA1A00B9B856 /* btConvexPointCloudShape.cpp in Sources */,
|
||||
B6CAB22C1AF9AA1A00B9B856 /* btCollisionObject.cpp in Sources */,
|
||||
15AE183919AAD2F700C27E9E /* CCRay.cpp in Sources */,
|
||||
15FB206B1AE7BE7400C31518 /* SpritePolygon.cpp in Sources */,
|
||||
15AE1B8219AADA9A00C27E9E /* UITextBMFont.cpp in Sources */,
|
||||
B6CAB29C1AF9AA1A00B9B856 /* btConeShape.cpp in Sources */,
|
||||
50ABBE6A1925AB6F00A911A9 /* CCEventListenerFocus.cpp in Sources */,
|
||||
|
@ -12357,7 +12354,6 @@
|
|||
B665E29F1AA80A6500DDB1C5 /* CCPUEventHandler.cpp in Sources */,
|
||||
15AE195519AAD35100C27E9E /* CCDisplayManager.cpp in Sources */,
|
||||
B665E43B1AA80A6600DDB1C5 /* CCPUVortexAffectorTranslator.cpp in Sources */,
|
||||
15FB206F1AE7BE7400C31518 /* SpritePolygonCache.cpp in Sources */,
|
||||
15AE1BA719AADFDF00C27E9E /* UIRelativeBox.cpp in Sources */,
|
||||
15AE1ACE19AAD40300C27E9E /* b2PulleyJoint.cpp in Sources */,
|
||||
B665E2DF1AA80A6500DDB1C5 /* CCPULineAffector.cpp in Sources */,
|
||||
|
@ -12373,6 +12369,7 @@
|
|||
B665E3131AA80A6500DDB1C5 /* CCPUObserverManager.cpp in Sources */,
|
||||
50CB248019D9C5A100687767 /* AudioPlayer.mm in Sources */,
|
||||
50ABBE9A1925AB6F00A911A9 /* CCRef.cpp in Sources */,
|
||||
85B3743B1B204B9400C488D6 /* clipper.cpp in Sources */,
|
||||
15AE18BF19AAD33D00C27E9E /* CCLabelTTFLoader.cpp in Sources */,
|
||||
B6CAB27E1AF9AA1A00B9B856 /* btBox2dShape.cpp in Sources */,
|
||||
15AE1B9519AADA9A00C27E9E /* CocosGUI.cpp in Sources */,
|
||||
|
|
|
@ -5925,6 +5925,7 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "../tests/cpp-tests/proj.ios/Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
|
@ -5938,6 +5939,7 @@
|
|||
"$(inherited)",
|
||||
"$(SRCROOT)/../external/curl/prebuilt/ios",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
|
||||
|
@ -5949,6 +5951,7 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "../tests/cpp-tests/proj.ios/Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
|
@ -5962,6 +5965,7 @@
|
|||
"$(inherited)",
|
||||
"$(SRCROOT)/../external/curl/prebuilt/ios",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../cocos/platform/ios $(SRCROOT)/../cocos/platform/ios/Simulation $(SRCROOT)/../external/curl/include/ios";
|
||||
|
|
|
@ -0,0 +1,669 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#include "CCAutoPolygon.h"
|
||||
#include "poly2tri/poly2tri.h"
|
||||
#include "base/CCDirector.h"
|
||||
#include "renderer/CCTextureCache.h"
|
||||
#include "clipper/clipper.hpp"
|
||||
#include <algorithm>
|
||||
#include <math.h>
|
||||
|
||||
USING_NS_CC;
|
||||
|
||||
static unsigned short quadIndices[]={0,1,2, 3,2,1};
|
||||
const static float PRECISION = 10.0f;
|
||||
|
||||
PolygonInfo::PolygonInfo(const PolygonInfo& other):
|
||||
triangles(),
|
||||
isVertsOwner(true),
|
||||
rect()
|
||||
{
|
||||
filename = other.filename;
|
||||
isVertsOwner = other.isVertsOwner;
|
||||
rect = other.rect;
|
||||
triangles.verts = new V3F_C4B_T2F[other.triangles.vertCount];
|
||||
triangles.indices = new unsigned short[other.triangles.indexCount];
|
||||
triangles.vertCount = other.triangles.vertCount;
|
||||
triangles.indexCount = other.triangles.indexCount;
|
||||
memcpy(triangles.verts, other.triangles.verts, other.triangles.vertCount*sizeof(V3F_C4B_T2F));
|
||||
memcpy(triangles.indices, other.triangles.indices, other.triangles.indexCount*sizeof(unsigned short));
|
||||
};
|
||||
|
||||
PolygonInfo& PolygonInfo::operator= (const PolygonInfo& other)
|
||||
{
|
||||
if(this != &other)
|
||||
{
|
||||
releaseVertsAndIndices();
|
||||
filename = other.filename;
|
||||
isVertsOwner = other.isVertsOwner;
|
||||
rect = other.rect;
|
||||
triangles.verts = new V3F_C4B_T2F[other.triangles.vertCount];
|
||||
triangles.indices = new unsigned short[other.triangles.indexCount];
|
||||
triangles.vertCount = other.triangles.vertCount;
|
||||
triangles.indexCount = other.triangles.indexCount;
|
||||
memcpy(triangles.verts, other.triangles.verts, other.triangles.vertCount*sizeof(V3F_C4B_T2F));
|
||||
memcpy(triangles.indices, other.triangles.indices, other.triangles.indexCount*sizeof(unsigned short));
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
PolygonInfo::~PolygonInfo()
|
||||
{
|
||||
releaseVertsAndIndices();
|
||||
}
|
||||
|
||||
void PolygonInfo::setQuad(V3F_C4B_T2F_Quad *quad)
|
||||
{
|
||||
releaseVertsAndIndices();
|
||||
isVertsOwner = false;
|
||||
triangles.indices = quadIndices;
|
||||
triangles.vertCount = 4;
|
||||
triangles.indexCount = 6;
|
||||
triangles.verts = (V3F_C4B_T2F*)quad;
|
||||
}
|
||||
|
||||
void PolygonInfo::releaseVertsAndIndices()
|
||||
{
|
||||
if(isVertsOwner)
|
||||
{
|
||||
if(nullptr != triangles.verts)
|
||||
{
|
||||
CC_SAFE_DELETE_ARRAY(triangles.verts);
|
||||
}
|
||||
|
||||
if(nullptr != triangles.indices)
|
||||
{
|
||||
CC_SAFE_DELETE_ARRAY(triangles.indices);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const unsigned int PolygonInfo::getVertCount() const
|
||||
{
|
||||
return (unsigned int)triangles.vertCount;
|
||||
}
|
||||
|
||||
const unsigned int PolygonInfo::getTriaglesCount() const
|
||||
{
|
||||
return (unsigned int)triangles.indexCount/3;
|
||||
}
|
||||
|
||||
const float PolygonInfo::getArea() const
|
||||
{
|
||||
float area = 0;
|
||||
V3F_C4B_T2F *verts = triangles.verts;
|
||||
unsigned short *indices = triangles.indices;
|
||||
for(int i = 0; i < triangles.indexCount; i+=3)
|
||||
{
|
||||
auto A = verts[indices[i]].vertices;
|
||||
auto B = verts[indices[i+1]].vertices;
|
||||
auto C = verts[indices[i+2]].vertices;
|
||||
area += (A.x*(B.y-C.y) + B.x*(C.y-A.y) + C.x*(A.y - B.y))/2;
|
||||
}
|
||||
return area;
|
||||
}
|
||||
|
||||
AutoPolygon::AutoPolygon(const std::string &filename)
|
||||
:_image(nullptr)
|
||||
,_data(nullptr)
|
||||
,_filename("")
|
||||
,_width(0)
|
||||
,_height(0)
|
||||
,_scaleFactor(0)
|
||||
{
|
||||
_filename = filename;
|
||||
_image = new Image();
|
||||
_image->initWithImageFile(filename);
|
||||
CCASSERT(_image->getRenderFormat()==Texture2D::PixelFormat::RGBA8888, "unsupported format, currently only supports rgba8888");
|
||||
_data = _image->getData();
|
||||
_width = _image->getWidth();
|
||||
_height = _image->getHeight();
|
||||
_scaleFactor = Director::getInstance()->getContentScaleFactor();
|
||||
}
|
||||
|
||||
AutoPolygon::~AutoPolygon()
|
||||
{
|
||||
CC_SAFE_DELETE(_image);
|
||||
}
|
||||
|
||||
std::vector<Vec2> AutoPolygon::trace(const Rect& rect, const float& threshold)
|
||||
{
|
||||
Vec2 first = findFirstNoneTransparentPixel(rect, threshold);
|
||||
return marchSquare(rect, first, threshold);
|
||||
}
|
||||
|
||||
Vec2 AutoPolygon::findFirstNoneTransparentPixel(const Rect& rect, const float& threshold)
|
||||
{
|
||||
bool found = false;
|
||||
Vec2 i;
|
||||
for(i.y = rect.origin.y; i.y < rect.origin.y+rect.size.height; i.y++)
|
||||
{
|
||||
if(found)break;
|
||||
for(i.x = rect.origin.x; i.x < rect.origin.x+rect.size.width; i.x++)
|
||||
{
|
||||
auto alpha = getAlphaByPos(i);
|
||||
if(alpha>threshold)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
CCASSERT(found, "image is all transparent!");
|
||||
return i;
|
||||
}
|
||||
|
||||
unsigned char AutoPolygon::getAlphaByIndex(const unsigned int& i)
|
||||
{
|
||||
return *(_data+i*4+3);
|
||||
}
|
||||
unsigned char AutoPolygon::getAlphaByPos(const Vec2& pos)
|
||||
{
|
||||
return *(_data+((int)pos.y*_width+(int)pos.x)*4+3);
|
||||
}
|
||||
|
||||
unsigned int AutoPolygon::getSquareValue(const unsigned int& x, const unsigned int& y, const Rect& rect, const float& threshold)
|
||||
{
|
||||
/*
|
||||
checking the 2x2 pixel grid, assigning these values to each pixel, if not transparent
|
||||
+---+---+
|
||||
| 1 | 2 |
|
||||
+---+---+
|
||||
| 4 | 8 | <- current pixel (curx,cury)
|
||||
+---+---+
|
||||
*/
|
||||
unsigned int sv = 0;
|
||||
//NOTE: due to the way we pick points from texture, rect needs to be smaller, otherwise it goes outside 1 pixel
|
||||
auto fixedRect = Rect(rect.origin, rect.size-Size(2,2));
|
||||
|
||||
Vec2 tl = Vec2(x-1, y-1);
|
||||
sv += (fixedRect.containsPoint(tl) && getAlphaByPos(tl) > threshold)? 1 : 0;
|
||||
Vec2 tr = Vec2(x, y-1);
|
||||
sv += (fixedRect.containsPoint(tr) && getAlphaByPos(tr) > threshold)? 2 : 0;
|
||||
Vec2 bl = Vec2(x-1, y);
|
||||
sv += (fixedRect.containsPoint(bl) && getAlphaByPos(bl) > threshold)? 4 : 0;
|
||||
Vec2 br = Vec2(x, y);
|
||||
sv += (fixedRect.containsPoint(br) && getAlphaByPos(br) > threshold)? 8 : 0;
|
||||
CCASSERT(sv != 0 && sv != 15, "square value should not be 0, or 15");
|
||||
return sv;
|
||||
}
|
||||
|
||||
std::vector<cocos2d::Vec2> AutoPolygon::marchSquare(const Rect& rect, const Vec2& start, const float& threshold)
|
||||
{
|
||||
int stepx = 0;
|
||||
int stepy = 0;
|
||||
int prevx = 0;
|
||||
int prevy = 0;
|
||||
int startx = start.x;
|
||||
int starty = start.y;
|
||||
int curx = startx;
|
||||
int cury = starty;
|
||||
unsigned int count = 0;
|
||||
unsigned int totalPixel = _width*_height;
|
||||
bool problem = false;
|
||||
std::vector<int> case9s;
|
||||
std::vector<int> case6s;
|
||||
int i;
|
||||
std::vector<int>::iterator it;
|
||||
std::vector<cocos2d::Vec2> _points;
|
||||
do{
|
||||
int sv = getSquareValue(curx, cury, rect, threshold);
|
||||
switch(sv){
|
||||
|
||||
case 1:
|
||||
case 5:
|
||||
case 13:
|
||||
/* going UP with these cases:
|
||||
1 5 13
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| 1 | | | 1 | | | 1 | |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | 4 | | | 4 | 8 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx = 0;
|
||||
stepy = -1;
|
||||
break;
|
||||
|
||||
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
/* going DOWN with these cases:
|
||||
8 10 11
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | | 2 | | 1 | 2 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | 8 | | | 8 | | | 8 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx = 0;
|
||||
stepy = 1;
|
||||
break;
|
||||
|
||||
|
||||
case 4:
|
||||
case 12:
|
||||
case 14:
|
||||
/* going LEFT with these cases:
|
||||
4 12 14
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | | | | | 2 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| 4 | | | 4 | 8 | | 4 | 8 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx = -1;
|
||||
stepy = 0;
|
||||
break;
|
||||
|
||||
|
||||
case 2 :
|
||||
case 3 :
|
||||
case 7 :
|
||||
/* going RIGHT with these cases:
|
||||
2 3 7
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | 2 | | 1 | 2 | | 1 | 2 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | | | | 4 | |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx=1;
|
||||
stepy=0;
|
||||
break;
|
||||
case 9 :
|
||||
/*
|
||||
+---+---+
|
||||
| 1 | |
|
||||
+---+---+
|
||||
| | 8 |
|
||||
+---+---+
|
||||
this should normaly go UP, but if we already been here, we go down
|
||||
*/
|
||||
//find index from xy;
|
||||
i = getIndexFromPos(curx, cury);
|
||||
it = find (case9s.begin(), case9s.end(), i);
|
||||
if (it != case9s.end())
|
||||
{
|
||||
//found, so we go down, and delete from case9s;
|
||||
stepx = 0;
|
||||
stepy = 1;
|
||||
case9s.erase(it);
|
||||
problem = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//not found, we go up, and add to case9s;
|
||||
stepx = 0;
|
||||
stepy = -1;
|
||||
case9s.push_back(i);
|
||||
}
|
||||
break;
|
||||
case 6 :
|
||||
/*
|
||||
6
|
||||
+---+---+
|
||||
| | 2 |
|
||||
+---+---+
|
||||
| 4 | |
|
||||
+---+---+
|
||||
this normally go RIGHT, but if its coming from UP, it should go LEFT
|
||||
*/
|
||||
i = getIndexFromPos(curx, cury);
|
||||
it = find (case6s.begin(), case6s.end(), i);
|
||||
if (it != case6s.end())
|
||||
{
|
||||
//found, so we go down, and delete from case9s;
|
||||
stepx = -1;
|
||||
stepy = 0;
|
||||
case6s.erase(it);
|
||||
problem = true;
|
||||
}
|
||||
else{
|
||||
//not found, we go up, and add to case9s;
|
||||
stepx = 1;
|
||||
stepy = 0;
|
||||
case6s.push_back(i);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
CCLOG("this shouldn't happen.");
|
||||
}
|
||||
//little optimization
|
||||
// if previous direction is same as current direction,
|
||||
// then we should modify the last vec to current
|
||||
curx += stepx;
|
||||
cury += stepy;
|
||||
if(stepx == prevx && stepy == prevy)
|
||||
{
|
||||
_points.back().x = (float)(curx-rect.origin.x) / _scaleFactor;
|
||||
_points.back().y = (float)(rect.size.height - cury + rect.origin.y) / _scaleFactor;
|
||||
}
|
||||
else if(problem)
|
||||
{
|
||||
//TODO: we triangulation cannot work collineer points, so we need to modify same point a little
|
||||
//TODO: maybe we can detect if we go into a hole and coming back the hole, we should extract those points and remove them
|
||||
_points.push_back(Vec2((float)(curx- rect.origin.x) / _scaleFactor, (float)(rect.size.height - cury + rect.origin.y) / _scaleFactor));
|
||||
}
|
||||
else{
|
||||
_points.push_back(Vec2((float)(curx-rect.origin.x) / _scaleFactor, (float)(rect.size.height - cury + rect.origin.y) / _scaleFactor));
|
||||
}
|
||||
|
||||
count++;
|
||||
prevx = stepx;
|
||||
prevy = stepy;
|
||||
problem = false;
|
||||
CCASSERT(count <= totalPixel, "oh no, marching square cannot find starting position");
|
||||
} while(curx != startx || cury != starty);
|
||||
return _points;
|
||||
}
|
||||
|
||||
float AutoPolygon::perpendicularDistance(const cocos2d::Vec2& i, const cocos2d::Vec2& start, const cocos2d::Vec2& end)
|
||||
{
|
||||
float res;
|
||||
float slope;
|
||||
float intercept;
|
||||
|
||||
if(start.x == end.x)
|
||||
{
|
||||
res = fabsf(i.x- end.x);
|
||||
}
|
||||
else if (start.y == end.y)
|
||||
{
|
||||
res = fabsf(i.y - end.y);
|
||||
}
|
||||
else{
|
||||
slope = (end.y - start.y) / (end.x - start.x);
|
||||
intercept = start.y - (slope*start.x);
|
||||
res = fabsf(slope * i.x - i.y + intercept) / sqrtf(powf(slope, 2)+1);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
std::vector<cocos2d::Vec2> AutoPolygon::rdp(std::vector<cocos2d::Vec2> v, const float& optimization)
|
||||
{
|
||||
if(v.size() < 3)
|
||||
return v;
|
||||
|
||||
int index = -1;
|
||||
float dist = 0;
|
||||
//not looping first and last point
|
||||
for(size_t i = 1; i < v.size()-1; i++)
|
||||
{
|
||||
float cdist = perpendicularDistance(v[i], v.front(), v.back());
|
||||
if(cdist > dist)
|
||||
{
|
||||
dist = cdist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (dist>optimization)
|
||||
{
|
||||
std::vector<Vec2>::const_iterator begin = v.begin();
|
||||
std::vector<Vec2>::const_iterator end = v.end();
|
||||
std::vector<Vec2> l1(begin, begin+index+1);
|
||||
std::vector<Vec2> l2(begin+index, end);
|
||||
|
||||
std::vector<Vec2> r1 = rdp(l1, optimization);
|
||||
std::vector<Vec2> r2 = rdp(l2, optimization);
|
||||
|
||||
r1.insert(r1.end(), r2.begin()+1, r2.end());
|
||||
return r1;
|
||||
}
|
||||
else {
|
||||
std::vector<Vec2> ret;
|
||||
ret.push_back(v.front());
|
||||
ret.push_back(v.back());
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
std::vector<Vec2> AutoPolygon::reduce(const std::vector<Vec2>& points, const Rect& rect , const float& epsilon)
|
||||
{
|
||||
auto size = points.size();
|
||||
// if there are less than 3 points, then we have nothing
|
||||
if(size<3)
|
||||
{
|
||||
log("AUTOPOLYGON: cannot reduce points for %s that has less than 3 points in input, e: %f", _filename.c_str(), epsilon);
|
||||
return std::vector<Vec2>();
|
||||
}
|
||||
// if there are less than 9 points (but more than 3), then we don't need to reduce it
|
||||
else if (size < 9)
|
||||
{
|
||||
log("AUTOPOLYGON: cannot reduce points for %s e: %f",_filename.c_str(), epsilon);
|
||||
return points;
|
||||
}
|
||||
float maxEp = MIN(rect.size.width, rect.size.height);
|
||||
float ep = clampf(epsilon, 0.0, maxEp/_scaleFactor/2);
|
||||
std::vector<Vec2> result = rdp(points, ep);
|
||||
|
||||
auto last = result.back();
|
||||
if(last.y > result.front().y && last.getDistance(result.front()) < ep*0.5)
|
||||
{
|
||||
result.front().y = last.y;
|
||||
result.pop_back();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<Vec2> AutoPolygon::expand(const std::vector<Vec2>& points, const cocos2d::Rect &rect, const float& epsilon)
|
||||
{
|
||||
auto size = points.size();
|
||||
// if there are less than 3 points, then we have nothig
|
||||
if(size<3)
|
||||
{
|
||||
log("AUTOPOLYGON: cannot expand points for %s with less than 3 points, e: %f", _filename.c_str(), epsilon);
|
||||
return std::vector<Vec2>();
|
||||
}
|
||||
ClipperLib::Path subj;
|
||||
ClipperLib::PolyTree solution;
|
||||
ClipperLib::PolyTree out;
|
||||
for(std::vector<Vec2>::const_iterator it = points.begin(); it<points.end(); it++)
|
||||
{
|
||||
subj << ClipperLib::IntPoint(it-> x* PRECISION, it->y * PRECISION);
|
||||
}
|
||||
ClipperLib::ClipperOffset co;
|
||||
co.AddPath(subj, ClipperLib::jtMiter, ClipperLib::etClosedPolygon);
|
||||
co.Execute(solution, epsilon * PRECISION);
|
||||
|
||||
ClipperLib::PolyNode* p = solution.GetFirst();
|
||||
if(!p)
|
||||
{
|
||||
log("AUTOPOLYGON: Clipper failed to expand the points");
|
||||
return points;
|
||||
}
|
||||
while(p->IsHole()){
|
||||
p = p->GetNext();
|
||||
}
|
||||
|
||||
//turn the result into simply polygon (AKA, fix overlap)
|
||||
|
||||
//clamp into the specified rect
|
||||
ClipperLib::Clipper cl;
|
||||
cl.StrictlySimple(true);
|
||||
cl.AddPath(p->Contour, ClipperLib::ptSubject, true);
|
||||
//create the clipping rect
|
||||
ClipperLib::Path clamp;
|
||||
clamp.push_back(ClipperLib::IntPoint(0, 0));
|
||||
clamp.push_back(ClipperLib::IntPoint(rect.size.width/_scaleFactor * PRECISION, 0));
|
||||
clamp.push_back(ClipperLib::IntPoint(rect.size.width/_scaleFactor * PRECISION, rect.size.height/_scaleFactor * PRECISION));
|
||||
clamp.push_back(ClipperLib::IntPoint(0, rect.size.height/_scaleFactor * PRECISION));
|
||||
cl.AddPath(clamp, ClipperLib::ptClip, true);
|
||||
cl.Execute(ClipperLib::ctIntersection, out);
|
||||
|
||||
std::vector<Vec2> outPoints;
|
||||
ClipperLib::PolyNode* p2 = out.GetFirst();
|
||||
while(p2->IsHole()){
|
||||
p2 = p2->GetNext();
|
||||
}
|
||||
auto end = p2->Contour.end();
|
||||
for(std::vector<ClipperLib::IntPoint>::const_iterator pt = p2->Contour.begin(); pt < end; pt++)
|
||||
{
|
||||
outPoints.push_back(Vec2(pt->X/PRECISION, pt->Y/PRECISION));
|
||||
}
|
||||
return outPoints;
|
||||
}
|
||||
|
||||
TrianglesCommand::Triangles AutoPolygon::triangulate(const std::vector<Vec2>& points)
|
||||
{
|
||||
// if there are less than 3 points, then we can't triangulate
|
||||
if(points.size()<3)
|
||||
{
|
||||
log("AUTOPOLYGON: cannot triangulate %s with less than 3 points", _filename.c_str());
|
||||
return TrianglesCommand::Triangles();
|
||||
}
|
||||
std::vector<p2t::Point*> p2points;
|
||||
for(std::vector<Vec2>::const_iterator it = points.begin(); it<points.end(); it++)
|
||||
{
|
||||
p2t::Point * p = new p2t::Point(it->x, it->y);
|
||||
p2points.push_back(p);
|
||||
}
|
||||
p2t::CDT cdt(p2points);
|
||||
cdt.Triangulate();
|
||||
std::vector<p2t::Triangle*> tris = cdt.GetTriangles();
|
||||
|
||||
V3F_C4B_T2F* verts= new V3F_C4B_T2F[points.size()];
|
||||
unsigned short* indices = new unsigned short[tris.size()*3];
|
||||
unsigned short idx = 0;
|
||||
unsigned short vdx = 0;
|
||||
|
||||
for(std::vector<p2t::Triangle*>::const_iterator ite = tris.begin(); ite < tris.end(); ite++)
|
||||
{
|
||||
for(int i = 0; i < 3; i++)
|
||||
{
|
||||
auto p = (*ite)->GetPoint(i);
|
||||
auto v3 = Vec3(p->x, p->y, 0);
|
||||
bool found = false;
|
||||
size_t j;
|
||||
size_t length = vdx;
|
||||
for(j = 0; j < length; j++)
|
||||
{
|
||||
if(verts[j].vertices == v3)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(found)
|
||||
{
|
||||
//if we found the same vertice, don't add to verts, but use the same vert with indices
|
||||
indices[idx] = j;
|
||||
idx++;
|
||||
}
|
||||
else
|
||||
{
|
||||
//vert does not exist yet, so we need to create a new one,
|
||||
auto c4b = Color4B::WHITE;
|
||||
auto t2f = Tex2F(0,0); // don't worry about tex coords now, we calculate that later
|
||||
V3F_C4B_T2F vert = {v3,c4b,t2f};
|
||||
verts[vdx] = vert;
|
||||
indices[idx] = vdx;
|
||||
idx++;
|
||||
vdx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(auto j : p2points)
|
||||
{
|
||||
delete j;
|
||||
};
|
||||
TrianglesCommand::Triangles triangles = {verts, indices, vdx, idx};
|
||||
return triangles;
|
||||
}
|
||||
|
||||
void AutoPolygon::calculateUV(const Rect& rect, V3F_C4B_T2F* verts, const ssize_t& count)
|
||||
{
|
||||
/*
|
||||
whole texture UV coordination
|
||||
0,0 1,0
|
||||
+---------------------+
|
||||
| |0.1
|
||||
| |0.2
|
||||
| +--------+ |0.3
|
||||
| |texRect | |0.4
|
||||
| | | |0.5
|
||||
| | | |0.6
|
||||
| +--------+ |0.7
|
||||
| |0.8
|
||||
| |0.9
|
||||
+---------------------+
|
||||
0,1 1,1
|
||||
*/
|
||||
|
||||
CCASSERT(_width && _height, "please specify width and height for this AutoPolygon instance");
|
||||
float texWidth = _width;
|
||||
float texHeight = _height;
|
||||
|
||||
auto end = &verts[count];
|
||||
for(auto i = verts; i != end; i++)
|
||||
{
|
||||
// for every point, offcset with the centerpoint
|
||||
float u = (i->vertices.x*_scaleFactor + rect.origin.x) / texWidth;
|
||||
float v = (rect.origin.y+rect.size.height - i->vertices.y*_scaleFactor) / texHeight;
|
||||
i->texCoords.u = u;
|
||||
i->texCoords.v = v;
|
||||
}
|
||||
}
|
||||
|
||||
Rect AutoPolygon::getRealRect(const Rect& rect)
|
||||
{
|
||||
Rect realRect = rect;
|
||||
//check rect to see if its zero
|
||||
if(realRect.equals(Rect::ZERO))
|
||||
{
|
||||
//if the instance doesn't have width and height, then the whole operation is kaput
|
||||
CCASSERT(_height && _width, "Please specify a width and height for this instance before using its functions");
|
||||
realRect = Rect(0,0, _width, _height);
|
||||
}
|
||||
else{
|
||||
//rect is specified, so convert to real rect
|
||||
auto scale = Director::getInstance()->getContentScaleFactor();
|
||||
realRect = Rect(rect.origin*scale, rect.size*scale);
|
||||
}
|
||||
return realRect;
|
||||
}
|
||||
|
||||
PolygonInfo AutoPolygon::generateTriangles(const Rect& rect, const float& epsilon, const float& threshold)
|
||||
{
|
||||
Rect realRect = getRealRect(rect);
|
||||
auto p = trace(realRect, threshold);
|
||||
p = reduce(p, realRect, epsilon);
|
||||
p = expand(p, realRect, epsilon);
|
||||
auto tri = triangulate(p);
|
||||
calculateUV(realRect, tri.verts, tri.vertCount);
|
||||
PolygonInfo ret;
|
||||
ret.triangles = tri;
|
||||
ret.filename = _filename;
|
||||
ret.rect = realRect;
|
||||
return ret;
|
||||
}
|
||||
PolygonInfo AutoPolygon::generatePolygon(const std::string& filename, const Rect& rect, const float epsilon, const float threshold)
|
||||
{
|
||||
AutoPolygon ap(filename);
|
||||
auto ret = ap.generateTriangles(rect, epsilon, threshold);
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,269 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef COCOS_2D_CCAUTOPOLYGON_H__
|
||||
#define COCOS_2D_CCAUTOPOLYGON_H__
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "platform/CCImage.h"
|
||||
#include "renderer/CCTrianglesCommand.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
/**
|
||||
* @addtogroup _2d
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* PolygonInfo is an object holding the required data to display Sprites。
|
||||
* It can be a simple as a triangle, or as complex as a whole 3D mesh
|
||||
*/
|
||||
class CC_DLL PolygonInfo
|
||||
{
|
||||
public:
|
||||
/// @name Creators
|
||||
/// @{
|
||||
/**
|
||||
* Creates an empty Polygon info
|
||||
* @memberof PolygonInfo
|
||||
* @return PolygonInfo object
|
||||
*/
|
||||
PolygonInfo():
|
||||
isVertsOwner(true),
|
||||
rect(cocos2d::Rect::ZERO),
|
||||
filename("")
|
||||
{
|
||||
triangles.verts = nullptr;
|
||||
triangles.indices = nullptr;
|
||||
triangles.vertCount = 0;
|
||||
triangles.indexCount = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Create an polygoninfo from the data of another Polygoninfo
|
||||
* @param other another PolygonInfo to be copied
|
||||
* @return duplicate of the other PolygonInfo
|
||||
*/
|
||||
PolygonInfo(const PolygonInfo& other);
|
||||
// end of creators group
|
||||
/// @}
|
||||
|
||||
/**
|
||||
* Copy the member of the other PolygonInfo
|
||||
* @param other another PolygonInfo to be copied
|
||||
*/
|
||||
PolygonInfo& operator= (const PolygonInfo &other);
|
||||
~PolygonInfo();
|
||||
|
||||
/**
|
||||
* set the data to be a pointer to a quad
|
||||
* the member verts will not be released when this PolygonInfo destructs
|
||||
* as the verts memory are managed by other objects
|
||||
* @param quad a pointer to the V3F_C4B_T2F_Quad obje
|
||||
*/
|
||||
void setQuad(V3F_C4B_T2F_Quad *quad);
|
||||
|
||||
/**
|
||||
* get vertex count
|
||||
* @return number of vertices
|
||||
*/
|
||||
const unsigned int getVertCount() const;
|
||||
|
||||
/**
|
||||
* get triangles count
|
||||
* @return number of triangles
|
||||
*/
|
||||
const unsigned int getTriaglesCount() const;
|
||||
|
||||
/**
|
||||
* get sum of all triangle area size
|
||||
* @return sum of all triangle area size
|
||||
*/
|
||||
const float getArea() const;
|
||||
|
||||
Rect rect;
|
||||
std::string filename;
|
||||
TrianglesCommand::Triangles triangles;
|
||||
|
||||
protected:
|
||||
bool isVertsOwner;
|
||||
|
||||
private:
|
||||
void releaseVertsAndIndices();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* AutoPolygon is a helper Object
|
||||
* AutoPolygon's purpose is to process an image into 2d polygon mesh in runtime
|
||||
* It has functions for each step in the process, from tracing all the points, to triangulation
|
||||
* the result can be then passed to Sprite::create() to create a Polygon Sprite
|
||||
*/
|
||||
class CC_DLL AutoPolygon
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* create an AutoPolygon and initialize it with an image file
|
||||
* the image must be a 32bit PNG for current version 3.7
|
||||
* @param filename a path to image file, e.g., "scene1/monster.png".
|
||||
* @return an AutoPolygon object;
|
||||
*/
|
||||
AutoPolygon(const std::string &filename);
|
||||
|
||||
/**
|
||||
* Destructor of AutoPolygon.
|
||||
*/
|
||||
~AutoPolygon();
|
||||
|
||||
/**
|
||||
* trace all the points along the outline of the image,
|
||||
* @warning must create AutoPolygon with filename to use this function
|
||||
* @param rect a texture rect for specify an area of the image, use Rect::Zero for the size of the image, default to Rect::Zero
|
||||
* @param threshold the value when alpha is greater than this value will be counted as opaque, default to 0.0
|
||||
* @return a vector of vec2 of all the points found in clockwise order
|
||||
* @code
|
||||
* auto ap = AutoPolygon("grossini.png");
|
||||
* std::vector<Vec2> points = ap.trace();//default to size of the image and threshold 0.0
|
||||
* @endcode
|
||||
*/
|
||||
std::vector<Vec2> trace(const cocos2d::Rect& rect, const float& threshold = 0.0);
|
||||
|
||||
/**
|
||||
* reduce the ammount of points so its faster for GPU to process and draw
|
||||
* based on Ramer-Douglas-Puecker algorithm
|
||||
* @param points a vector of Vec2 points as input
|
||||
* @param rect a texture rect for specify an area of the image to avoid over reduction
|
||||
* @param epsilon the perpendicular distance where points smaller than this value will be discarded
|
||||
* @return a vector of Vec2 of the remaining points in clockwise order
|
||||
* @code
|
||||
* auto ap = AutoPolygon();
|
||||
* std::vector<Vec2> reduced = ap.reduce(inputPoints, rect);//default epsilon is 2
|
||||
* @endcode
|
||||
*/
|
||||
std::vector<Vec2> reduce(const std::vector<Vec2>& points, const Rect& rect, const float& epsilon = 2.0);
|
||||
|
||||
/**
|
||||
* expand the points along their edge, useful after you reduce the points that cuts into the sprite
|
||||
* using ClipperLib
|
||||
* @param points a vector of Vec2 points as input
|
||||
* @param rect a texture rect for specify an area of the image, the expanded points will be clamped in this rect, ultimately resulting in a quad if the expansion is too great
|
||||
* @param epsilon the distance which the edges will expand
|
||||
* @return a vector of Vec2 as the result of the expansion
|
||||
* @code
|
||||
* auto ap = AutoPolygon();
|
||||
* std::vector<Vec2> expanded = ap.expand(inputPoints, rect, 2.0);
|
||||
* @endcode
|
||||
*/
|
||||
std::vector<Vec2> expand(const std::vector<Vec2>& points, const Rect& rect, const float& epsilon);
|
||||
|
||||
/**
|
||||
* Triangulate the input points into triangles for rendering
|
||||
* using poly2tri
|
||||
* @warning points must be closed loop, cannot have 2 points sharing the same position and cannot intersect itself
|
||||
* @param points a vector of vec2 points as input
|
||||
* @return a Triangles object with points and indices
|
||||
* @code
|
||||
* auto ap = AutoPolygon();
|
||||
* TrianglesCommand::Triangles myPolygons = ap.triangulate(myPoints);
|
||||
* @endcode
|
||||
*/
|
||||
TrianglesCommand::Triangles triangulate(const std::vector<Vec2>& points);
|
||||
|
||||
/**
|
||||
* calculate the UV coordinates for each points based on a texture rect
|
||||
* @warning This method requires the AutoPolygon object to know the texture file dimension
|
||||
* @param rect a texture rect to specify where to map the UV
|
||||
* @param verts a pointer to the verts array, served both as input and output verts
|
||||
* @param count the count for the verts arrac
|
||||
* @code
|
||||
* auto ap = AutoPolygon("grossini.png");
|
||||
* TrianglesCommand::Triangles myPolygons = ap.triangulate(myPoints);
|
||||
* ap.calculateUV(rect, myPolygons.verts, 20);
|
||||
* @endcode
|
||||
*/
|
||||
void calculateUV(const Rect& rect, V3F_C4B_T2F* verts, const ssize_t& count);
|
||||
|
||||
/**
|
||||
* a helper function, packing trace, reduce, expand, triangulate and calculate uv in one function
|
||||
* @param rect texture rect, use Rect::ZERO for the size of the texture, default is Rect::ZERO
|
||||
* @param epsilon the value used to reduce and expand, default to 2.0
|
||||
* @param threshold the value where bigger than the threshold will be counted as opaque, used in trace
|
||||
* @return a PolygonInfo, to use with sprite
|
||||
* @code
|
||||
* auto ap = AutoPolygon("grossini.png");
|
||||
* PolygonInfo myInfo = ap.generateTriangles();//use all default values
|
||||
* auto sp1 = Sprite::create(myInfo);
|
||||
* polygonInfo myInfo2 = ap.generateTriangles(Rect::ZERO, 5.0, 0.1);//ap can be reused to generate another set of PolygonInfo with different settings
|
||||
* auto sp2 = Sprite::create(myInfo2);
|
||||
* @endcode
|
||||
*/
|
||||
PolygonInfo generateTriangles(const Rect& rect = Rect::ZERO, const float& epsilon = 2.0, const float& threshold = 0.05);
|
||||
|
||||
/**
|
||||
* a helper function, packing autoPolygon creation, trace, reduce, expand, triangulate and calculate uv in one function
|
||||
* @warning if you want to repetitively generate polygons, consider create an AutoPolygon object, and use generateTriangles function, as it only reads the file once
|
||||
* @param filename A path to image file, e.g., "scene1/monster.png".
|
||||
* @param rect texture rect, use Rect::ZERO for the size of the texture, default is Rect::ZERO
|
||||
* @param epsilon the value used to reduce and expand, default to 2.0
|
||||
* @param threshold the value where bigger than the threshold will be counted as opaque, used in trace
|
||||
* @return a PolygonInfo, to use with sprite
|
||||
* @code
|
||||
* auto sp = Sprite::create(AutoPolygon::generatePolygon("grossini.png"));
|
||||
* @endcode
|
||||
*/
|
||||
static PolygonInfo generatePolygon(const std::string& filename, const Rect& rect = Rect::ZERO, const float epsilon = 2.0, const float threshold = 0.05);
|
||||
protected:
|
||||
Vec2 findFirstNoneTransparentPixel(const Rect& rect, const float& threshold);
|
||||
std::vector<cocos2d::Vec2> marchSquare(const Rect& rect, const Vec2& first, const float& threshold);
|
||||
unsigned int getSquareValue(const unsigned int& x, const unsigned int& y, const Rect& rect, const float& threshold);
|
||||
|
||||
unsigned char getAlphaByIndex(const unsigned int& i);
|
||||
unsigned char getAlphaByPos(const Vec2& pos);
|
||||
|
||||
int getIndexFromPos(const unsigned int& x, const unsigned int& y){return y*_width+x;};
|
||||
cocos2d::Vec2 getPosFromIndex(const unsigned int& i){return cocos2d::Vec2(i%_width, i/_width);};
|
||||
|
||||
std::vector<cocos2d::Vec2> rdp(std::vector<cocos2d::Vec2> v, const float& optimization);
|
||||
float perpendicularDistance(const cocos2d::Vec2& i, const cocos2d::Vec2& start, const cocos2d::Vec2& end);
|
||||
|
||||
//real rect is the size that is in scale with the texture file
|
||||
Rect getRealRect(const Rect& rect);
|
||||
|
||||
Image* _image;
|
||||
unsigned char * _data;
|
||||
std::string _filename;
|
||||
unsigned int _width;
|
||||
unsigned int _height;
|
||||
float _scaleFactor;
|
||||
unsigned int _threshold;
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif // #ifndef COCOS_2D_CCAUTOPOLYGON_H__
|
|
@ -343,7 +343,6 @@ unsigned char* FontFreeType::getGlyphBitmap(unsigned short theChar, long &outWid
|
|||
}
|
||||
}
|
||||
|
||||
xAdvance += 2 * _outlineSize;
|
||||
outRect.size.width = blendWidth;
|
||||
outRect.size.height = blendHeight;
|
||||
outWidth = blendWidth;
|
||||
|
|
|
@ -955,24 +955,41 @@ void Label::onDraw(const Mat4& transform, bool transformUpdated)
|
|||
}
|
||||
}
|
||||
|
||||
if (_currentLabelType == LabelType::TTF)
|
||||
{
|
||||
glprogram->setUniformLocationWith4f(_uniformTextColor,
|
||||
_textColorF.r,_textColorF.g,_textColorF.b,_textColorF.a);
|
||||
|
||||
if (_currLabelEffect == LabelEffect::OUTLINE || _currLabelEffect == LabelEffect::GLOW)
|
||||
{
|
||||
glprogram->setUniformLocationWith4f(_uniformEffectColor,
|
||||
_effectColorF.r, _effectColorF.g, _effectColorF.b, _effectColorF.a);
|
||||
}
|
||||
}
|
||||
|
||||
glprogram->setUniformsForBuiltins(transform);
|
||||
|
||||
for(const auto &child: _children)
|
||||
{
|
||||
child->updateTransform();
|
||||
}
|
||||
|
||||
if (_currentLabelType == LabelType::TTF)
|
||||
{
|
||||
switch (_currLabelEffect) {
|
||||
case LabelEffect::OUTLINE:
|
||||
//draw text with outline
|
||||
glprogram->setUniformLocationWith4f(_uniformTextColor,
|
||||
_textColorF.r,_textColorF.g,_textColorF.b,_textColorF.a);
|
||||
glprogram->setUniformLocationWith4f(_uniformEffectColor,
|
||||
_effectColorF.r, _effectColorF.g, _effectColorF.b, _effectColorF.a);
|
||||
for (const auto& batchNode:_batchNodes)
|
||||
{
|
||||
batchNode->getTextureAtlas()->drawQuads();
|
||||
}
|
||||
|
||||
//draw text without outline
|
||||
glprogram->setUniformLocationWith4f(_uniformEffectColor,
|
||||
_effectColorF.r, _effectColorF.g, _effectColorF.b, 0.f);
|
||||
break;
|
||||
case LabelEffect::GLOW:
|
||||
glprogram->setUniformLocationWith4f(_uniformEffectColor,
|
||||
_effectColorF.r, _effectColorF.g, _effectColorF.b, _effectColorF.a);
|
||||
case LabelEffect::NORMAL:
|
||||
glprogram->setUniformLocationWith4f(_uniformTextColor,
|
||||
_textColorF.r,_textColorF.g,_textColorF.b,_textColorF.a);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& batchNode:_batchNodes)
|
||||
{
|
||||
|
|
|
@ -401,7 +401,7 @@ void Node::updateRotation3D()
|
|||
float x = _rotationQuat.x, y = _rotationQuat.y, z = _rotationQuat.z, w = _rotationQuat.w;
|
||||
_rotationX = atan2f(2.f * (w * x + y * z), 1.f - 2.f * (x * x + y * y));
|
||||
_rotationY = asinf(2.f * (w * y - z * x));
|
||||
_rotationZ_X = atanf(2.f * (w * z + x * y) / (1.f - 2.f * (y * y + z * z)));
|
||||
_rotationZ_X = atan2f(2.f * (w * z + x * y), 1.f - 2.f * (y * y + z * z));
|
||||
|
||||
_rotationX = CC_RADIANS_TO_DEGREES(_rotationX);
|
||||
_rotationY = CC_RADIANS_TO_DEGREES(_rotationY);
|
||||
|
|
|
@ -86,6 +86,18 @@ Sprite* Sprite::create(const std::string& filename)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
Sprite* Sprite::create(const PolygonInfo& info)
|
||||
{
|
||||
Sprite *sprite = new (std::nothrow) Sprite();
|
||||
if(sprite && sprite->initWithPolygon(info))
|
||||
{
|
||||
sprite->autorelease();
|
||||
return sprite;
|
||||
}
|
||||
CC_SAFE_DELETE(sprite);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Sprite* Sprite::create(const std::string& filename, const Rect& rect)
|
||||
{
|
||||
Sprite *sprite = new (std::nothrow) Sprite();
|
||||
|
@ -207,6 +219,19 @@ bool Sprite::initWithSpriteFrame(SpriteFrame *spriteFrame)
|
|||
return bRet;
|
||||
}
|
||||
|
||||
bool Sprite::initWithPolygon(const cocos2d::PolygonInfo &info)
|
||||
{
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(info.filename);
|
||||
bool res = false;
|
||||
if(initWithTexture(texture));
|
||||
{
|
||||
_polyInfo = info;
|
||||
setContentSize(_polyInfo.rect.size/Director::getInstance()->getContentScaleFactor());
|
||||
res = true;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
// designated initializer
|
||||
bool Sprite::initWithTexture(Texture2D *texture, const Rect& rect, bool rotated)
|
||||
{
|
||||
|
@ -246,6 +271,7 @@ bool Sprite::initWithTexture(Texture2D *texture, const Rect& rect, bool rotated)
|
|||
setTexture(texture);
|
||||
setTextureRect(rect, rotated, rect.size);
|
||||
|
||||
_polyInfo.setQuad(&_quad);
|
||||
// by default use "Self Render".
|
||||
// if the sprite is added to a batchnode, then it will automatically switch to "batchnode Render"
|
||||
setBatchNode(nullptr);
|
||||
|
@ -268,8 +294,7 @@ Sprite::Sprite(void)
|
|||
, _insideBounds(true)
|
||||
{
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
_debugDrawNode = DrawNode::create();
|
||||
addChild(_debugDrawNode);
|
||||
debugDraw(true)
|
||||
#endif //CC_SPRITE_DEBUG_DRAW
|
||||
}
|
||||
|
||||
|
@ -407,6 +432,47 @@ void Sprite::setTextureRect(const Rect& rect, bool rotated, const Size& untrimme
|
|||
}
|
||||
}
|
||||
|
||||
void Sprite::debugDraw(bool on)
|
||||
{
|
||||
DrawNode* draw = getChildByName<DrawNode*>("debugDraw");
|
||||
if(on)
|
||||
{
|
||||
if(!draw)
|
||||
{
|
||||
draw = DrawNode::create();
|
||||
draw->setName("debugDraw");
|
||||
addChild(draw);
|
||||
}
|
||||
draw->setVisible(true);
|
||||
draw->clear();
|
||||
//draw lines
|
||||
auto last = _polyInfo.triangles.indexCount/3;
|
||||
auto _indices = _polyInfo.triangles.indices;
|
||||
auto _verts = _polyInfo.triangles.verts;
|
||||
for(unsigned int i = 0; i < last; i++)
|
||||
{
|
||||
//draw 3 lines
|
||||
Vec3 from =_verts[_indices[i*3]].vertices;
|
||||
Vec3 to = _verts[_indices[i*3+1]].vertices;
|
||||
draw->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
|
||||
|
||||
from =_verts[_indices[i*3+1]].vertices;
|
||||
to = _verts[_indices[i*3+2]].vertices;
|
||||
draw->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
|
||||
|
||||
from =_verts[_indices[i*3+2]].vertices;
|
||||
to = _verts[_indices[i*3]].vertices;
|
||||
draw->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(draw)
|
||||
draw->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// override this method to generate "double scale" sprites
|
||||
void Sprite::setVertexRect(const Rect& rect)
|
||||
{
|
||||
|
@ -598,33 +664,11 @@ void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
|||
if(_insideBounds)
|
||||
#endif
|
||||
{
|
||||
_trianglesCommand.init(_globalZOrder, _texture->getName(), getGLProgramState(), _blendFunc, getRenderedTriangles(), transform, flags);
|
||||
_trianglesCommand.init(_globalZOrder, _texture->getName(), getGLProgramState(), _blendFunc, _polyInfo.triangles, transform, flags);
|
||||
renderer->addCommand(&_trianglesCommand);
|
||||
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
_debugDrawNode->clear();
|
||||
Vec2 vertices[4] = {
|
||||
Vec2( _quad.bl.vertices.x, _quad.bl.vertices.y ),
|
||||
Vec2( _quad.br.vertices.x, _quad.br.vertices.y ),
|
||||
Vec2( _quad.tr.vertices.x, _quad.tr.vertices.y ),
|
||||
Vec2( _quad.tl.vertices.x, _quad.tl.vertices.y ),
|
||||
};
|
||||
_debugDrawNode->drawPoly(vertices, 4, true, Color4F(1.0, 1.0, 1.0, 1.0));
|
||||
#endif //CC_SPRITE_DEBUG_DRAW
|
||||
}
|
||||
}
|
||||
|
||||
TrianglesCommand::Triangles Sprite::getRenderedTriangles() const
|
||||
{
|
||||
static unsigned short indices[6] = {0, 1, 2, 3, 2, 1};
|
||||
TrianglesCommand::Triangles result;
|
||||
result.indices = indices;
|
||||
result.verts = (V3F_C4B_T2F*)&_quad;
|
||||
result.vertCount = 4;
|
||||
result.indexCount = 6;
|
||||
return result;
|
||||
}
|
||||
|
||||
// MARK: visit, draw, transform
|
||||
|
||||
void Sprite::addChild(Node *child, int zOrder, int tag)
|
||||
|
@ -1054,7 +1098,7 @@ void Sprite::updateBlendFunc(void)
|
|||
{
|
||||
CCASSERT(! _batchNode, "CCSprite: updateBlendFunc doesn't work when the sprite is rendered using a SpriteBatchNode");
|
||||
|
||||
// it is possible to have an untextured sprite
|
||||
// it is possible to have an untextured spritec
|
||||
if (! _texture || ! _texture->hasPremultipliedAlpha())
|
||||
{
|
||||
_blendFunc = BlendFunc::ALPHA_NON_PREMULTIPLIED;
|
||||
|
@ -1077,4 +1121,14 @@ std::string Sprite::getDescription() const
|
|||
return StringUtils::format("<Sprite | Tag = %d, TextureID = %d>", _tag, texture_id );
|
||||
}
|
||||
|
||||
PolygonInfo Sprite::getPolygonInfo() const
|
||||
{
|
||||
return _polyInfo;
|
||||
}
|
||||
|
||||
void Sprite::setPolygonInfo(const PolygonInfo& info)
|
||||
{
|
||||
_polyInfo = info;
|
||||
}
|
||||
|
||||
NS_CC_END
|
||||
|
|
|
@ -35,6 +35,7 @@ THE SOFTWARE.
|
|||
#include "renderer/CCTextureAtlas.h"
|
||||
#include "renderer/CCTrianglesCommand.h"
|
||||
#include "renderer/CCCustomCommand.h"
|
||||
#include "2d/CCAutoPolygon.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
|
@ -98,6 +99,17 @@ public:
|
|||
* @return An autoreleased sprite object.
|
||||
*/
|
||||
static Sprite* create(const std::string& filename);
|
||||
|
||||
/**
|
||||
* Creates a polygon sprite with a polygon info.
|
||||
*
|
||||
* After creation, the rect of sprite will be the size of the image,
|
||||
* and the offset will be (0,0).
|
||||
*
|
||||
* @param polygonInfo A path to image file, e.g., "scene1/monster.png".
|
||||
* @return An autoreleased sprite object.
|
||||
*/
|
||||
static Sprite* create(const PolygonInfo& info);
|
||||
|
||||
/**
|
||||
* Creates a sprite with an image filename and a rect.
|
||||
|
@ -459,6 +471,17 @@ CC_CONSTRUCTOR_ACCESS:
|
|||
* @return True if the sprite is initialized properly, false otherwise.
|
||||
*/
|
||||
virtual bool initWithTexture(Texture2D *texture);
|
||||
|
||||
|
||||
/**
|
||||
* Initializes a sprite with a PolygonInfo.
|
||||
*
|
||||
* After initialization, the rect used will be the size of the texture, and the offset will be (0,0).
|
||||
*
|
||||
* @param PolygonInfo a Polygon info contains the structure of the polygon.
|
||||
* @return True if the sprite is initialized properly, false otherwise.
|
||||
*/
|
||||
virtual bool initWithPolygon(const PolygonInfo& info);
|
||||
|
||||
/**
|
||||
* Initializes a sprite with a texture and a rect.
|
||||
|
@ -531,6 +554,22 @@ CC_CONSTRUCTOR_ACCESS:
|
|||
*/
|
||||
virtual bool initWithFile(const std::string& filename, const Rect& rect);
|
||||
|
||||
void debugDraw(bool on);
|
||||
|
||||
/**
|
||||
* returns a copy of the polygon information associated with this sprite
|
||||
* because this is a copy process it is slower than getting the reference, so use wisely
|
||||
*
|
||||
* @return a copy of PolygonInfo
|
||||
*/
|
||||
PolygonInfo getPolygonInfo() const;
|
||||
|
||||
/**
|
||||
* set the sprite to use this new PolygonInfo
|
||||
*
|
||||
* @param PolygonInfo the polygon information object
|
||||
*/
|
||||
void setPolygonInfo(const PolygonInfo& info);
|
||||
protected:
|
||||
|
||||
void updateColor() override;
|
||||
|
@ -538,8 +577,9 @@ protected:
|
|||
virtual void updateBlendFunc();
|
||||
virtual void setReorderChildDirtyRecursively();
|
||||
virtual void setDirtyRecursively(bool value);
|
||||
|
||||
|
||||
|
||||
TrianglesCommand::Triangles getRenderedTriangles() const;
|
||||
//
|
||||
// Data used when the sprite is rendered using a SpriteSheet
|
||||
//
|
||||
|
@ -559,9 +599,8 @@ protected:
|
|||
Texture2D* _texture; /// Texture2D object that is used to render the sprite
|
||||
SpriteFrame* _spriteFrame;
|
||||
TrianglesCommand _trianglesCommand; ///
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
DrawNode *_debugDrawNode;
|
||||
#endif //CC_SPRITE_DEBUG_DRAW
|
||||
|
||||
|
||||
//
|
||||
// Shared data
|
||||
//
|
||||
|
@ -576,6 +615,7 @@ protected:
|
|||
|
||||
// vertex coords, texture coords and color info
|
||||
V3F_C4B_T2F_Quad _quad;
|
||||
PolygonInfo _polyInfo;
|
||||
|
||||
// opacity and RGB protocol
|
||||
bool _opacityModifyRGB;
|
||||
|
|
|
@ -66,9 +66,8 @@ set(COCOS_2D_SRC
|
|||
2d/CCSprite.cpp
|
||||
2d/CCSpriteFrameCache.cpp
|
||||
2d/CCSpriteFrame.cpp
|
||||
2d/MarchingSquare.cpp
|
||||
2d/SpritePolygon.cpp
|
||||
2d/SpritePolygonCache.cpp
|
||||
2d/CCAutoPolygon.cpp
|
||||
../../external/clipper/clipper.cpp
|
||||
2d/CCTextFieldTTF.cpp
|
||||
2d/CCTileMapAtlas.cpp
|
||||
2d/CCTMXLayer.cpp
|
||||
|
|
|
@ -1,356 +0,0 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#include "MarchingSquare.h"
|
||||
#include "cocos2d.h"
|
||||
#include <algorithm>
|
||||
|
||||
USING_NS_CC;
|
||||
|
||||
MarchingSquare::MarchingSquare(const std::string &filename, const unsigned int threshold)
|
||||
{
|
||||
_filename = filename;
|
||||
_threshold = threshold;
|
||||
Image *image = new Image();
|
||||
image->initWithImageFile(filename);
|
||||
CCASSERT(image->getRenderFormat()==Texture2D::PixelFormat::RGBA8888, "unsupported format, currently only supports rgba8888");
|
||||
data = image->getData();
|
||||
width = image->getWidth();
|
||||
height = image->getHeight();
|
||||
scaleFactor = Director::getInstance()->getContentScaleFactor();
|
||||
}
|
||||
|
||||
void MarchingSquare::trace()
|
||||
{
|
||||
unsigned int first = findFirstNoneTransparentPixel();
|
||||
start = Vec2(first%width, first/width);
|
||||
marchSquare(start.x, start.y);
|
||||
}
|
||||
|
||||
unsigned int MarchingSquare::findFirstNoneTransparentPixel()
|
||||
{
|
||||
for(unsigned int i = 0; i < width*height; i++)
|
||||
{
|
||||
if(getAlphaAt(i) > _threshold)
|
||||
{
|
||||
// CCLOG("first non transparent is at x:%d, y%d", i%width, i/width);
|
||||
return i;
|
||||
}
|
||||
}
|
||||
CCASSERT(false, "image is all transparent!");
|
||||
}
|
||||
|
||||
unsigned char MarchingSquare::getAlphaAt(const unsigned int i)
|
||||
{
|
||||
return *(data+i*4+3);
|
||||
}
|
||||
unsigned char MarchingSquare::getAlphaAt(const int x, const int y)
|
||||
{
|
||||
if(x < 0 || y < 0 || x > width-1 || y > height-1)
|
||||
return 0;
|
||||
return *(data+(y*width+x)*4+3);
|
||||
}
|
||||
|
||||
unsigned int MarchingSquare::getSquareValue(int x, int y)
|
||||
{
|
||||
/*
|
||||
checking the 2x2 pixel grid, assigning these values to each pixel, if not transparent
|
||||
+---+---+
|
||||
| 1 | 2 |
|
||||
+---+---+
|
||||
| 4 | 8 | <- current pixel (curx,cury)
|
||||
+---+---+
|
||||
*/
|
||||
unsigned int sv = 0;
|
||||
if(getAlphaAt(x-1, y-1) > _threshold)
|
||||
sv += 1;
|
||||
if(getAlphaAt(x,y-1) > _threshold)
|
||||
sv += 2;
|
||||
if(getAlphaAt(x-1, y) > _threshold)
|
||||
sv += 4;
|
||||
if(getAlphaAt(x, y) > _threshold)
|
||||
sv += 8;
|
||||
return sv;
|
||||
}
|
||||
|
||||
void MarchingSquare::marchSquare(int startx, int starty)
|
||||
{
|
||||
int stepx = 0;
|
||||
int stepy = 0;
|
||||
int prevx = 0;
|
||||
int prevy = 0;
|
||||
int curx = startx;
|
||||
int cury = starty;
|
||||
unsigned int count = 0;
|
||||
unsigned int totalPixel = width*height;
|
||||
bool problem = false;
|
||||
std::vector<int> case9s;
|
||||
std::vector<int> case6s;
|
||||
int i;
|
||||
std::vector<int>::iterator it;
|
||||
do{
|
||||
int sv = getSquareValue(curx, cury);
|
||||
switch(sv){
|
||||
|
||||
case 1:
|
||||
case 5:
|
||||
case 13:
|
||||
/* going UP with these cases:
|
||||
1 5 13
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| 1 | | | 1 | | | 1 | |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | 4 | | | 4 | 8 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx = 0;
|
||||
stepy = -1;
|
||||
break;
|
||||
|
||||
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
/* going DOWN with these cases:
|
||||
8 10 11
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | | 2 | | 1 | 2 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | 8 | | | 8 | | | 8 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx = 0;
|
||||
stepy = 1;
|
||||
break;
|
||||
|
||||
|
||||
case 4:
|
||||
case 12:
|
||||
case 14:
|
||||
/* going LEFT with these cases:
|
||||
4 12 14
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | | | | | 2 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| 4 | | | 4 | 8 | | 4 | 8 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx = -1;
|
||||
stepy = 0;
|
||||
break;
|
||||
|
||||
|
||||
case 2 :
|
||||
case 3 :
|
||||
case 7 :
|
||||
/* going RIGHT with these cases:
|
||||
2 3 7
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | 2 | | 1 | 2 | | 1 | 2 |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
| | | | | | | 4 | |
|
||||
+---+---+ +---+---+ +---+---+
|
||||
*/
|
||||
stepx=1;
|
||||
stepy=0;
|
||||
break;
|
||||
case 9 :
|
||||
/*
|
||||
+---+---+
|
||||
| 1 | |
|
||||
+---+---+
|
||||
| | 8 |
|
||||
+---+---+
|
||||
this should normaly go UP, but if we already been here, we go down
|
||||
*/
|
||||
//find index from xy;
|
||||
i = getIndexFromPos(curx, cury);
|
||||
it = find (case9s.begin(), case9s.end(), i);
|
||||
if (it != case9s.end())
|
||||
{
|
||||
//found, so we go down, and delete from case9s;
|
||||
stepx = 0;
|
||||
stepy = 1;
|
||||
case9s.erase(it);
|
||||
problem = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//not found, we go up, and add to case9s;
|
||||
stepx = 0;
|
||||
stepy = -1;
|
||||
case9s.push_back(i);
|
||||
}
|
||||
break;
|
||||
case 6 :
|
||||
/*
|
||||
6
|
||||
+---+---+
|
||||
| | 2 |
|
||||
+---+---+
|
||||
| 4 | |
|
||||
+---+---+
|
||||
this normally go RIGHT, but if its coming from UP, it should go LEFT
|
||||
*/
|
||||
i = getIndexFromPos(curx, cury);
|
||||
it = find (case6s.begin(), case6s.end(), i);
|
||||
if (it != case6s.end())
|
||||
{
|
||||
//found, so we go down, and delete from case9s;
|
||||
stepx = -1;
|
||||
stepy = 0;
|
||||
case6s.erase(it);
|
||||
problem = true;
|
||||
}
|
||||
else{
|
||||
//not found, we go up, and add to case9s;
|
||||
stepx = 1;
|
||||
stepy = 0;
|
||||
case6s.push_back(i);
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
CCLOG("case 0 at x:%d, y:%d, coming from %d, %d", curx, cury, prevx, prevy);
|
||||
CCASSERT(false, "this shoudln't happen");
|
||||
break;
|
||||
case 15:
|
||||
CCLOG("case 15 at x:%d, y:%d, coming from %d, %d", curx, cury, prevx, prevy);
|
||||
CCASSERT(false, "this shoudln't happen");
|
||||
break;
|
||||
|
||||
}
|
||||
//little optimization
|
||||
// if previous direction is same as current direction,
|
||||
// then we should modify the last vec to current
|
||||
curx += stepx;
|
||||
cury += stepy;
|
||||
if(stepx == prevx && stepy == prevy)
|
||||
{
|
||||
points.back().x = (float)(curx) / scaleFactor;
|
||||
points.back().y = (float)(height-cury) / scaleFactor;
|
||||
}
|
||||
else if(problem)
|
||||
{
|
||||
//TODO: we triangulation cannot work collineer points, so we need to modify same point a little
|
||||
//TODO: maybe we can detect if we go into a hole and coming back the hole, we should extract those points and remove them
|
||||
points.back().x -= 0.00001f;
|
||||
points.back().y -= 0.00001f;
|
||||
points.push_back(Vec2((float)curx, (float)height-cury)/ scaleFactor);
|
||||
}
|
||||
else{
|
||||
points.push_back(Vec2((float)curx, (float)height-cury)/ scaleFactor);
|
||||
}
|
||||
|
||||
count++;
|
||||
prevx = stepx;
|
||||
prevy = stepy;
|
||||
problem = false;
|
||||
CCASSERT(count <= totalPixel, "oh no, marching square cannot find starting position");
|
||||
} while(curx != startx || cury != starty);
|
||||
}
|
||||
|
||||
void MarchingSquare::printPoints()
|
||||
{
|
||||
for(auto p : points)
|
||||
{
|
||||
CCLOG("%.1f %.1f", p.x, height-p.y);
|
||||
}
|
||||
}
|
||||
|
||||
float MarchingSquare::perpendicularDistance(cocos2d::Vec2 ii, cocos2d::Vec2 ss, cocos2d::Vec2 ee)
|
||||
{
|
||||
float res;
|
||||
float slope;
|
||||
float intercept;
|
||||
|
||||
if(ss.x == ee.x)
|
||||
{
|
||||
res = fabsf(ii.x- ee.x);
|
||||
}
|
||||
else if (ss.y == ee.y)
|
||||
{
|
||||
res = fabsf(ii.y - ee.y);
|
||||
}
|
||||
else{
|
||||
slope = (ee.y - ss.y) / (ee.x - ss.x);
|
||||
intercept = ss.y - (slope*ss.x);
|
||||
res = fabsf(slope * ii.x - ii.y + intercept) / sqrtf(powf(slope, 2)+1);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
std::vector<cocos2d::Vec2> MarchingSquare::rdp(std::vector<cocos2d::Vec2> v)
|
||||
{
|
||||
if(v.size() < 3)
|
||||
return v;
|
||||
|
||||
int index = -1;
|
||||
float dist = 0;
|
||||
//not looping first and last point
|
||||
for(int i = 1; i < v.size()-1; i++)
|
||||
{
|
||||
float cdist = perpendicularDistance(v[i], v.front(), v.back());
|
||||
if(cdist > dist)
|
||||
{
|
||||
dist = cdist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (dist>epsilon)
|
||||
{
|
||||
std::vector<Vec2>::const_iterator begin = v.begin();
|
||||
std::vector<Vec2>::const_iterator end = v.end();
|
||||
std::vector<Vec2> l1(begin, begin+index+1);
|
||||
std::vector<Vec2> l2(begin+index, end);
|
||||
|
||||
std::vector<Vec2> r1 = rdp(l1);
|
||||
std::vector<Vec2> r2 = rdp(l2);
|
||||
|
||||
r1.insert(r1.end(), r2.begin()+1, r2.end());
|
||||
return r1;
|
||||
}
|
||||
else {
|
||||
std::vector<Vec2> ret;
|
||||
ret.push_back(v.front());
|
||||
ret.push_back(v.back());
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
void MarchingSquare::optimize(float level)
|
||||
{
|
||||
if(level <= 0 || points.size()<4)
|
||||
return;
|
||||
epsilon = level;
|
||||
points = rdp(points);
|
||||
auto last = points.back();
|
||||
|
||||
if(last.y > points.front().y)
|
||||
points.front().y = last.y;
|
||||
points.pop_back();
|
||||
|
||||
//delete the last point, because its almost the same as the starting point
|
||||
// CCLOG("%.1f, %.1f, %.1f, %.1f", points[0].x, points[0].y, points.back().x, points.back().y);
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef COCOS_2D_MARCHINGSQUARE_H__
|
||||
#define COCOS_2D_MARCHINGSQUARE_H__
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "base/CCConsole.h"
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
#include "math/Vec2.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class CC_DLL MarchingSquare
|
||||
{
|
||||
public:
|
||||
MarchingSquare(const std::string &filename, const unsigned int threshold = 0);
|
||||
//TODO: should return list of vec2s
|
||||
void trace();
|
||||
void setThreshold(unsigned int threshold){_threshold = threshold;};
|
||||
unsigned int getThreshold(){return _threshold;};
|
||||
ssize_t getVecCount(){return points.size();};
|
||||
std::vector<cocos2d::Vec2> getPoints(){return points;};
|
||||
void printPoints();
|
||||
//using Ramer–Douglas–Peucker algorithm
|
||||
void optimize(float level = 0);
|
||||
protected:
|
||||
unsigned int findFirstNoneTransparentPixel();
|
||||
void marchSquare(int startx, int starty);
|
||||
unsigned int getSquareValue(int x, int y);
|
||||
unsigned char * data;
|
||||
std::string _filename;
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int _threshold;
|
||||
unsigned char getAlphaAt(const unsigned int i);
|
||||
unsigned char getAlphaAt(const int x, const int y);
|
||||
cocos2d::Vec2 start;
|
||||
std::vector<cocos2d::Vec2> points;
|
||||
int getIndexFromPos(int x, int y){return y*width+x;};
|
||||
cocos2d::Vec2 getPosFromIndex(int i){return cocos2d::Vec2(i%width, i/width);};
|
||||
|
||||
float epsilon;
|
||||
std::vector<cocos2d::Vec2> rdp(std::vector<cocos2d::Vec2> v);
|
||||
float perpendicularDistance(cocos2d::Vec2 i, cocos2d::Vec2 start, cocos2d::Vec2 end);
|
||||
float scaleFactor;
|
||||
|
||||
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif // #ifndef COCOS_2D_MARCHINGSQUARE_H__
|
|
@ -1,506 +0,0 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#include "SpritePolygon.h"
|
||||
#include "3d/CCMesh.h"
|
||||
#include "3d/CCMeshVertexIndexData.h"
|
||||
|
||||
#include "MarchingSquare.h"
|
||||
|
||||
#include "base/CCDirector.h"
|
||||
#include "renderer/CCRenderer.h"
|
||||
#include "renderer/CCTextureCache.h"
|
||||
#include "renderer/CCGLProgramState.h"
|
||||
#include "renderer/CCGLProgramCache.h"
|
||||
#include <vector>
|
||||
|
||||
#include "poly2tri/poly2tri.h"
|
||||
#include "SpritePolygonCache.h"
|
||||
#include "platform/CCFileUtils.h"
|
||||
using namespace std;
|
||||
|
||||
|
||||
USING_NS_CC;
|
||||
using namespace cocos2d::experimental;
|
||||
|
||||
SpritePolygon *SpritePolygon::create(const std::string& file, std::vector<cocos2d::V3F_C4B_T2F>& verts, std::vector<unsigned short>& indices)
|
||||
{
|
||||
SpritePolygon *ret = new (std::nothrow) SpritePolygon();
|
||||
if (ret && ret->initWithVerts(file, verts, indices))
|
||||
{
|
||||
ret->autorelease();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
CC_SAFE_DELETE(ret);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
SpritePolygon *SpritePolygon::create(const std::string& file, std::vector<cocos2d::Vec2>& verts,std::vector<unsigned short>& indices, const cocos2d::Rect& rect)
|
||||
{
|
||||
SpritePolygon *ret = new (std::nothrow) SpritePolygon();
|
||||
if (ret && ret->initWithRect(file, verts, indices, rect))
|
||||
{
|
||||
ret->autorelease();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
CC_SAFE_DELETE(ret);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
SpritePolygon *SpritePolygon::create(const std::string& file, std::vector<cocos2d::Vec2>& verts, const cocos2d::Rect& rect)
|
||||
{
|
||||
SpritePolygon *ret = new (std::nothrow) SpritePolygon();
|
||||
if (ret && ret->initWithPoly2tri(file, verts, rect))
|
||||
{
|
||||
ret->autorelease();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
CC_SAFE_DELETE(ret);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
SpritePolygon *SpritePolygon::create(const std::string &file, const cocos2d::Rect &rect, float optimization)
|
||||
{
|
||||
SpritePolygon *ret = new (std::nothrow) SpritePolygon();
|
||||
if (ret)
|
||||
{
|
||||
auto info = SpritePolygonCache::getInstance()->getSpritePolygonCache(file, rect);
|
||||
if(info)
|
||||
{
|
||||
// CCLOG("created from cache");
|
||||
ret->initWithCache(file, info);
|
||||
}
|
||||
else{
|
||||
// CCLOG("created with marching square");
|
||||
ret->initWithMarching(file, rect, optimization);
|
||||
}
|
||||
ret->autorelease();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
CC_SAFE_DELETE(ret);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SpritePolygon::calculateUVandContentSize()
|
||||
{
|
||||
/*
|
||||
whole texture UV coordination
|
||||
0,0 1,0
|
||||
+---------------------+
|
||||
| |0.1
|
||||
| |0.2
|
||||
| +--------+ |0.3
|
||||
| |texRect | |0.4
|
||||
| | | |0.5
|
||||
| | | |0.6
|
||||
| +--------+ |0.7
|
||||
| |0.8
|
||||
| |0.9
|
||||
+---------------------+
|
||||
0,1 1,1
|
||||
|
||||
because when we scanned the image upside down, our uv is now upside down too
|
||||
*/
|
||||
|
||||
float scaleFactor = Director::getInstance()->getContentScaleFactor();
|
||||
float texWidth = _texture->getPixelsWide()/scaleFactor;
|
||||
float texHeight = _texture->getPixelsHigh()/scaleFactor;
|
||||
|
||||
// the texture rect in pixels, for example, an image is 32x32 pixels
|
||||
Rect* textRect = &_polygonInfo->_rect;
|
||||
|
||||
|
||||
bool needDelete = false;
|
||||
if(textRect->equals(Rect::ZERO))
|
||||
{
|
||||
//zero sized rect specified, so it means the whole image, for our calculation, we need actual image rect
|
||||
textRect = new Rect(0,0, texWidth, texHeight);
|
||||
needDelete = true;
|
||||
}
|
||||
setContentSize(textRect->size);
|
||||
|
||||
|
||||
auto end = &_polygonInfo->_triangles.verts[_polygonInfo->_triangles.vertCount];
|
||||
for(auto i = _polygonInfo->_triangles.verts; i != end; i++)
|
||||
{
|
||||
// for every point, offset with the centerpoint
|
||||
float u = i->vertices.x / texWidth;
|
||||
float v = (texHeight - i->vertices.y) / texHeight;
|
||||
i->texCoords.u = u;
|
||||
i->texCoords.v = v;
|
||||
}
|
||||
|
||||
if(needDelete)
|
||||
delete textRect;
|
||||
}
|
||||
|
||||
TrianglesCommand::Triangles SpritePolygon::triangulate(std::vector<cocos2d::Vec2> & verts)
|
||||
{
|
||||
std::vector<p2t::Point*> points;
|
||||
for(std::vector<Vec2>::const_iterator it = verts.begin(); it<verts.end(); it++)
|
||||
{
|
||||
p2t::Point * p = new p2t::Point(it->x, it->y);
|
||||
points.push_back(p);
|
||||
}
|
||||
auto cdt = new p2t::CDT(points);
|
||||
cdt->Triangulate();
|
||||
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
|
||||
|
||||
vector<V3F_C4B_T2F> *_verts = new vector<V3F_C4B_T2F>();
|
||||
vector<unsigned short> *_indices = new vector<unsigned short>;
|
||||
unsigned short idx = 0;
|
||||
for(std::vector<p2t::Triangle*>::const_iterator ite = tris.begin(); ite < tris.end(); ite++)
|
||||
{
|
||||
for(int i = 0; i < 3; i++)
|
||||
{
|
||||
auto p = (*ite)->GetPoint(i);
|
||||
auto v3 = Vec3(p->x, p->y, 0);
|
||||
bool found = false;
|
||||
int j;
|
||||
for(j = 0; j < _verts->size(); j++)
|
||||
{
|
||||
if((*_verts)[j].vertices == v3)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(found)
|
||||
{
|
||||
//if we found the same vertice, don't add to verts, but use the same vert with indices
|
||||
_indices->push_back(j);
|
||||
}
|
||||
else
|
||||
{
|
||||
//vert does not exist yet, so we need to create a new one,
|
||||
auto c4b = Color4B::WHITE;
|
||||
auto t2f = Tex2F(0,0); // don't worry about tex coords now, we calculate that later
|
||||
V3F_C4B_T2F vert = {v3,c4b,t2f};
|
||||
_verts->push_back(vert);
|
||||
_indices->push_back(idx);
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(auto j : points)
|
||||
{
|
||||
delete j;
|
||||
}
|
||||
delete cdt;
|
||||
|
||||
TrianglesCommand::Triangles triangles = {&(*_verts)[0], &(*_indices)[0], (ssize_t)_verts->size(), (ssize_t)_indices->size()};
|
||||
return triangles;
|
||||
}
|
||||
bool SpritePolygon::initWithCache(const std::string &file, SpritePolygonInfo *info)
|
||||
{
|
||||
CCASSERT(file.size()>0, "Invalid filename for sprite");
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(file);
|
||||
CCASSERT(texture, "texture was not loaded properly");
|
||||
_polygonInfo = info;
|
||||
initWithTexture(texture);
|
||||
if(_polygonInfo->_rect.equals(Rect::ZERO))
|
||||
{
|
||||
setContentSize(Size(texture->getPixelsWide(), texture->getPixelsHigh())/Director::getInstance()->getContentScaleFactor());
|
||||
}
|
||||
else
|
||||
{
|
||||
setContentSize(_polygonInfo->_rect.size);
|
||||
}
|
||||
|
||||
|
||||
setAnchorPoint(Vec2(0.5,0.5));
|
||||
return true;
|
||||
}
|
||||
bool SpritePolygon::initWithMarching(const std::string &file, const cocos2d::Rect &rect, float optimization)
|
||||
{
|
||||
CCASSERT(file.size()>0, "Invalid filename for sprite");
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(file);
|
||||
CCASSERT(texture, "texture was not loaded properly");
|
||||
initWithTexture(texture);
|
||||
optimization = (optimization < 0)? (float)texture->getPixelsHigh()*(float)texture->getPixelsWide()*0.00015/Director::getInstance()->getContentScaleFactor() : optimization/Director::getInstance()->getContentScaleFactor();
|
||||
|
||||
//Marching Square
|
||||
auto marcher = new MarchingSquare(file);
|
||||
marcher->trace();
|
||||
marcher->optimize(optimization);
|
||||
// marcher->test();
|
||||
|
||||
auto p = marcher->getPoints();
|
||||
auto triangles = triangulate(p);
|
||||
delete marcher;
|
||||
|
||||
//save result to cache
|
||||
_polygonInfo = SpritePolygonCache::getInstance()->addSpritePolygonCache(file, rect, triangles);
|
||||
setAnchorPoint(Vec2(0.5,0.5));
|
||||
calculateUVandContentSize();
|
||||
|
||||
// SpritePolygonCache::printInfo(*_polygonInfo);
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
debugDraw();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
bool SpritePolygon::initWithPoly2tri(const std::string &filename, std::vector<cocos2d::Vec2> & verts, const cocos2d::Rect &Rect)
|
||||
{
|
||||
CCASSERT(filename.size()>0, "Invalid filename for sprite");
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename);
|
||||
CCASSERT(texture, "texture was not loaded properly");
|
||||
initWithTexture(texture);
|
||||
_polygonInfo = SpritePolygonCache::getInstance()->addSpritePolygonCache(filename, Rect, triangulate(verts));
|
||||
setAnchorPoint(Vec2(0.5,0.5));
|
||||
calculateUVandContentSize();
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
debugDraw();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
Rect SpritePolygon::getTextRectFromTriangles(std::vector<cocos2d::V3F_C4B_T2F>& _verts)
|
||||
{
|
||||
// CCASSERT(_polygonInfo, "cannot get texture rect because triangles were not defined");
|
||||
auto text = getTexture();
|
||||
int width = text->getPixelsWide();
|
||||
int height = text->getPixelsHigh();
|
||||
auto firstV = _verts[0];
|
||||
auto left = firstV.texCoords.u;
|
||||
auto right = firstV.texCoords.u;
|
||||
auto top = firstV.texCoords.v;
|
||||
auto bot = firstV.texCoords.v;
|
||||
for(std::vector<V3F_C4B_T2F>::const_iterator v = _verts.begin(); v < _verts.end(); v++)
|
||||
{
|
||||
if(v->texCoords.u < left)
|
||||
{
|
||||
left = v->texCoords.u;
|
||||
}
|
||||
else if (v->texCoords.u > right)
|
||||
{
|
||||
right = v->texCoords.u;
|
||||
}
|
||||
if(v->texCoords.v < bot)
|
||||
{
|
||||
bot = v->texCoords.v;
|
||||
}
|
||||
else if (v->texCoords.v > top)
|
||||
{
|
||||
top = v->texCoords.v;
|
||||
}
|
||||
}
|
||||
return Rect(left*width, bot*height, right*width, top*height);
|
||||
}
|
||||
|
||||
bool SpritePolygon::initWithVerts(const std::string& filename,std::vector<cocos2d::V3F_C4B_T2F>& verts, std::vector<unsigned short>& indices)
|
||||
{
|
||||
CCASSERT(filename.size()>0, "Invalid filename for sprite");
|
||||
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename);
|
||||
CCASSERT(texture, "texture was not loaded properly");
|
||||
|
||||
|
||||
initWithTexture(texture);
|
||||
auto _textureRect = getTextRectFromTriangles(verts);
|
||||
setContentSize(_textureRect.size/Director::getInstance()->getContentScaleFactor());
|
||||
setAnchorPoint(Vec2(0.5,0.5));
|
||||
_transformDirty = true;
|
||||
TrianglesCommand::Triangles triangles = {&verts[0], &indices[0], (ssize_t)verts.size(), (ssize_t)indices.size()};
|
||||
_polygonInfo = SpritePolygonCache::getInstance()->addSpritePolygonCache(filename, _textureRect, triangles);
|
||||
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
debugDraw();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SpritePolygon::initWithRect(const std::string& filename, std::vector<cocos2d::Vec2>& verts, std::vector<unsigned short>& indices, const cocos2d::Rect& rect)
|
||||
{
|
||||
CCASSERT(filename.size()>0, "Invalid filename for sprite");
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename);
|
||||
CCASSERT(texture, "texture was not loaded properly");
|
||||
initWithTexture(texture);
|
||||
//build v3f_c4b_t2f verts from vec2 vector
|
||||
vector<V3F_C4B_T2F> _verts;
|
||||
for(std::vector<Vec2>::const_iterator it = verts.begin(); it<verts.end(); it++)
|
||||
{
|
||||
auto v3 = Vec3(it->x, it->y, 0);
|
||||
auto c4b = Color4B::WHITE;
|
||||
auto t2f = Tex2F(0,0);
|
||||
V3F_C4B_T2F vert = {v3,c4b,t2f};
|
||||
_verts.push_back(vert);
|
||||
}
|
||||
|
||||
TrianglesCommand::Triangles triangles = {&_verts[0], &indices[0], (ssize_t)_verts.size(), (ssize_t)indices.size()};
|
||||
_polygonInfo = SpritePolygonCache::getInstance()->addSpritePolygonCache(filename, rect, triangles);
|
||||
calculateUVandContentSize();
|
||||
setAnchorPoint(Vec2(0.5,0.5));
|
||||
#if CC_SPRITE_DEBUG_DRAW
|
||||
debugDraw();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SpritePolygon::initWithTexture(Texture2D *texture)
|
||||
{
|
||||
Node::init();
|
||||
//init the triangles command
|
||||
setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP));
|
||||
_blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
|
||||
setTexture(texture);
|
||||
return true;
|
||||
}
|
||||
void SpritePolygon::setTexture(const std::string &filename)
|
||||
{
|
||||
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename);
|
||||
setTexture(texture);
|
||||
}
|
||||
static unsigned char cc_2x2_white_image[] = {
|
||||
// RGBA8888
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF
|
||||
};
|
||||
#define CC_2x2_WHITE_IMAGE_KEY "/cc_2x2_white_image"
|
||||
void SpritePolygon::setTexture(Texture2D *texture)
|
||||
{
|
||||
// accept texture==nil as argument
|
||||
CCASSERT( !texture || dynamic_cast<Texture2D*>(texture), "setTexture expects a Texture2D. Invalid argument");
|
||||
|
||||
if (texture == nullptr)
|
||||
{
|
||||
// Gets the texture by key firstly.
|
||||
texture = Director::getInstance()->getTextureCache()->getTextureForKey(CC_2x2_WHITE_IMAGE_KEY);
|
||||
|
||||
// If texture wasn't in cache, create it from RAW data.
|
||||
if (texture == nullptr)
|
||||
{
|
||||
Image* image = new (std::nothrow) Image();
|
||||
bool isOK = image->initWithRawData(cc_2x2_white_image, sizeof(cc_2x2_white_image), 2, 2, 8);
|
||||
CC_UNUSED_PARAM(isOK);
|
||||
CCASSERT(isOK, "The 2x2 empty texture was created unsuccessfully.");
|
||||
|
||||
texture = Director::getInstance()->getTextureCache()->addImage(image, CC_2x2_WHITE_IMAGE_KEY);
|
||||
CC_SAFE_RELEASE(image);
|
||||
}
|
||||
}
|
||||
|
||||
if (_texture != texture)
|
||||
{
|
||||
CC_SAFE_RETAIN(texture);
|
||||
CC_SAFE_RELEASE(_texture);
|
||||
_texture = texture;
|
||||
}
|
||||
}
|
||||
const float SpritePolygon::getArea(){
|
||||
float area = 0;
|
||||
V3F_C4B_T2F *verts = _polygonInfo->_triangles.verts;
|
||||
unsigned short *indices = _polygonInfo->_triangles.indices;
|
||||
for(int i = 0; i < _polygonInfo->_triangles.indexCount; i=i+3)
|
||||
{
|
||||
auto A = verts[indices[i]].vertices;
|
||||
auto B = verts[indices[i+1]].vertices;
|
||||
auto C = verts[indices[i+2]].vertices;
|
||||
area += (A.x*(B.y-C.y) + B.x*(C.y-A.y) + C.x*(A.y - B.y))/2;
|
||||
}
|
||||
return area;
|
||||
}
|
||||
|
||||
void SpritePolygon::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
||||
{
|
||||
_tcmd.init(0, _texture->getName(), getGLProgramState(), _blendFunc, _polygonInfo->_triangles, transform, flags);
|
||||
renderer->addCommand(&_tcmd);
|
||||
}
|
||||
void SpritePolygon::debugDraw()
|
||||
{
|
||||
if(!_debugDrawNode)
|
||||
{
|
||||
_debugDrawNode = DrawNode::create();
|
||||
addChild(_debugDrawNode);
|
||||
}
|
||||
else{
|
||||
_debugDrawNode->clear();
|
||||
}
|
||||
//draw all points
|
||||
auto positions = new (std::nothrow) Vec2[_polygonInfo->_triangles.vertCount];
|
||||
Vec2 *pos = &positions[0];
|
||||
auto verts = _polygonInfo->_triangles.verts;
|
||||
auto end = &verts[_polygonInfo->_triangles.vertCount];
|
||||
for(V3F_C4B_T2F *v = verts; v != end; pos++, v++)
|
||||
{
|
||||
pos->x = v->vertices.x;
|
||||
pos->y = v->vertices.y;
|
||||
}
|
||||
_debugDrawNode->drawPoints(positions, (unsigned int)_polygonInfo->_triangles.vertCount, 8, Color4F(0.0f, 1.0f, 1.0f, 1.0f));
|
||||
//draw lines
|
||||
auto last = _polygonInfo->_triangles.indexCount/3;
|
||||
auto _indices = _polygonInfo->_triangles.indices;
|
||||
auto _verts = _polygonInfo->_triangles.verts;
|
||||
for(unsigned int i = 0; i < last; i++)
|
||||
{
|
||||
//draw 3 lines
|
||||
Vec3 from =_verts[_indices[i*3]].vertices;
|
||||
Vec3 to = _verts[_indices[i*3+1]].vertices;
|
||||
_debugDrawNode->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
|
||||
|
||||
from =_verts[_indices[i*3+1]].vertices;
|
||||
to = _verts[_indices[i*3+2]].vertices;
|
||||
_debugDrawNode->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
|
||||
|
||||
from =_verts[_indices[i*3+2]].vertices;
|
||||
to = _verts[_indices[i*3]].vertices;
|
||||
_debugDrawNode->drawLine(Vec2(from.x, from.y), Vec2(to.x,to.y), Color4F::GREEN);
|
||||
|
||||
}
|
||||
CC_SAFE_DELETE_ARRAY(positions);
|
||||
}
|
||||
|
||||
void SpritePolygon::showDebug(const bool val)
|
||||
{
|
||||
if(val)
|
||||
{
|
||||
if(!_debugDrawNode)
|
||||
{
|
||||
debugDraw();
|
||||
}
|
||||
else{
|
||||
_debugDrawNode->setVisible(val);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(_debugDrawNode)
|
||||
{
|
||||
_debugDrawNode->setVisible(val);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,108 +0,0 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef COCOS_2D_SpritePolygon_H__
|
||||
#define COCOS_2D_SpritePolygon_H__
|
||||
|
||||
#include <vector>
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
#include "2d/CCNode.h"
|
||||
#include "renderer/CCTrianglesCommand.h"
|
||||
#include "CCDrawNode.h"
|
||||
#include "SpritePolygonCache.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
namespace experimental{
|
||||
|
||||
class CC_DLL SpritePolygon : public cocos2d::Node
|
||||
{
|
||||
public:
|
||||
//create with manually created vertices, color and uv and
|
||||
static SpritePolygon *create(const std::string&, std::vector<cocos2d::V3F_C4B_T2F>&, std::vector<unsigned short>&);
|
||||
bool initWithVerts(const std::string&, std::vector<cocos2d::V3F_C4B_T2F>&, std::vector<unsigned short>&);
|
||||
|
||||
//create from list of vertices, with texture rect, and triangle indices, UV is calculated from the texture rect
|
||||
static SpritePolygon *create(const std::string&, std::vector<cocos2d::Vec2>&, std::vector<unsigned short>&, const cocos2d::Rect&rect = cocos2d::Rect::ZERO);
|
||||
bool initWithRect(const std::string&, std::vector<cocos2d::Vec2>&, std::vector<unsigned short>&, const cocos2d::Rect&rect = cocos2d::Rect::ZERO);
|
||||
|
||||
// //create from ordered list of vertices, with texture rect, Triangles and UV is calculated on the fly
|
||||
static SpritePolygon *create(const std::string&, std::vector<cocos2d::Vec2>&, const cocos2d::Rect& rect = cocos2d::Rect::ZERO);
|
||||
bool initWithPoly2tri(const std::string&, std::vector<cocos2d::Vec2>&, const cocos2d::Rect&);
|
||||
|
||||
//create from a texture (rect), and automatically trace and optimize the points.
|
||||
//not recommended for production, its better to use the vec2 list for better performance
|
||||
static SpritePolygon *create(const std::string&, const cocos2d::Rect& rect = cocos2d::Rect::ZERO, float optimization = -1);
|
||||
bool initWithMarching(const std::string &file, const cocos2d::Rect &rect, float optimization);
|
||||
bool initWithCache(const std::string &file, SpritePolygonInfo *info);
|
||||
|
||||
bool initWithTexture(cocos2d::Texture2D *texture);
|
||||
|
||||
virtual void setTexture(const std::string &filename );
|
||||
virtual void setTexture(cocos2d::Texture2D *texture);
|
||||
|
||||
/** returns the Texture2D object used by the sprite */
|
||||
virtual cocos2d::Texture2D* getTexture(){return _texture;};
|
||||
const float getArea();
|
||||
const ssize_t getTrianglesCount(){return _polygonInfo->_triangles.indexCount/3;};
|
||||
const ssize_t getVertCount(){return _polygonInfo->_triangles.vertCount;};
|
||||
|
||||
void showDebug(const bool val);
|
||||
protected:
|
||||
SpritePolygon()
|
||||
: _debugDrawNode(nullptr)
|
||||
, _texture(nullptr)
|
||||
, _polygonInfo(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
cocos2d::DrawNode *_debugDrawNode;
|
||||
void debugDraw();
|
||||
|
||||
void calculateUVandContentSize();
|
||||
|
||||
cocos2d::TrianglesCommand _tcmd;
|
||||
cocos2d::BlendFunc _blendFunc;
|
||||
cocos2d::Texture2D *_texture;
|
||||
SpritePolygonInfo *_polygonInfo;
|
||||
virtual void draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t flags);
|
||||
|
||||
cocos2d::Rect getTextRectFromTriangles(std::vector<cocos2d::V3F_C4B_T2F>& verts);
|
||||
|
||||
//======Triangulation
|
||||
cocos2d::TrianglesCommand::Triangles triangulate(std::vector<cocos2d::Vec2> & verts);
|
||||
|
||||
|
||||
//TODO: move those to ccUtils
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif // #ifndef COCOS_2D_SpritePolygon_H__
|
|
@ -1,231 +0,0 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#include "SpritePolygonCache.h"
|
||||
#include "3d/CCMesh.h"
|
||||
#include "3d/CCMeshVertexIndexData.h"
|
||||
|
||||
#include "base/CCDirector.h"
|
||||
#include "renderer/CCRenderer.h"
|
||||
#include "renderer/CCTextureCache.h"
|
||||
#include "renderer/CCGLProgramState.h"
|
||||
#include "renderer/CCGLProgramCache.h"
|
||||
#include <vector>
|
||||
|
||||
#include "poly2tri/poly2tri.h"
|
||||
#include "platform/CCFileUtils.h"
|
||||
using namespace std;
|
||||
|
||||
USING_NS_CC;
|
||||
|
||||
SpritePolygonCache* SpritePolygonCache::_SpritePolygonCache = nullptr;
|
||||
|
||||
SpritePolygonCache::SpritePolygonCache()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SpritePolygonCache::~SpritePolygonCache()
|
||||
{
|
||||
}
|
||||
|
||||
SpritePolygonCache* SpritePolygonCache::getInstance()
|
||||
{
|
||||
if (NULL == _SpritePolygonCache)
|
||||
{
|
||||
_SpritePolygonCache = new (std::nothrow) SpritePolygonCache();
|
||||
_SpritePolygonCache->init();
|
||||
}
|
||||
return _SpritePolygonCache;
|
||||
}
|
||||
|
||||
void SpritePolygonCache::destroyInstance()
|
||||
{
|
||||
CC_SAFE_DELETE(_SpritePolygonCache);
|
||||
}
|
||||
|
||||
void SpritePolygonCache::init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SpritePolygonInfo* SpritePolygonCache::addSpritePolygonCache(const std::string& filePath, const cocos2d::Rect& rect, const cocos2d::TrianglesCommand::Triangles trianglesCommand)
|
||||
{
|
||||
auto fullpath = filePath;
|
||||
|
||||
auto it = _SpritePolygonCacheMap.find(fullpath);
|
||||
if (_SpritePolygonCacheMap.end() != it)
|
||||
{
|
||||
VecSpritePolygonInfo vecInfo = it->second;
|
||||
|
||||
auto infoIt = vecInfo.begin();
|
||||
for (; infoIt != vecInfo.end(); infoIt++)
|
||||
{
|
||||
if ((*infoIt)->_rect.equals(rect))
|
||||
{
|
||||
//Update
|
||||
CC_SAFE_DELETE((*infoIt)->_triangles.verts);
|
||||
CC_SAFE_DELETE((*infoIt)->_triangles.indices);
|
||||
(*infoIt)->_triangles.verts = new V3F_C4B_T2F[trianglesCommand.vertCount];
|
||||
(*infoIt)->_triangles.indices = new unsigned short[trianglesCommand.indexCount];
|
||||
(*infoIt)->_triangles.vertCount = trianglesCommand.vertCount;
|
||||
(*infoIt)->_triangles.indexCount = trianglesCommand.indexCount;
|
||||
memcpy((*infoIt)->_triangles.verts, trianglesCommand.verts, trianglesCommand.vertCount*sizeof(V3F_C4B_T2F));
|
||||
memcpy((*infoIt)->_triangles.indices, trianglesCommand.indices, trianglesCommand.indexCount*sizeof(unsigned short));
|
||||
return *infoIt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VecSpritePolygonInfo vecInfo;
|
||||
vecInfo.clear();
|
||||
if (it != _SpritePolygonCacheMap.end())
|
||||
{
|
||||
vecInfo = it->second;
|
||||
}
|
||||
SpritePolygonInfo* info = new SpritePolygonInfo;
|
||||
if (nullptr != info)
|
||||
{
|
||||
info->_rect = rect;
|
||||
|
||||
info->_triangles.verts = new V3F_C4B_T2F[trianglesCommand.vertCount];
|
||||
info->_triangles.indices = new unsigned short[trianglesCommand.indexCount];
|
||||
info->_triangles.vertCount = trianglesCommand.vertCount;
|
||||
info->_triangles.indexCount = trianglesCommand.indexCount;
|
||||
|
||||
|
||||
memcpy(info->_triangles.verts, trianglesCommand.verts, trianglesCommand.vertCount*sizeof(V3F_C4B_T2F));
|
||||
memcpy(info->_triangles.indices, trianglesCommand.indices, trianglesCommand.indexCount*sizeof(unsigned short));
|
||||
|
||||
vecInfo.push_back(info);
|
||||
_SpritePolygonCacheMap[filePath] = vecInfo;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
SpritePolygonInfo* SpritePolygonCache::getSpritePolygonCache(const std::string& filePath, const cocos2d::Rect& rect)
|
||||
{
|
||||
auto fullpath = filePath;
|
||||
|
||||
auto it = _SpritePolygonCacheMap.find(fullpath);
|
||||
if (_SpritePolygonCacheMap.end() == it)
|
||||
return nullptr;
|
||||
|
||||
auto infoIter = it->second.begin();
|
||||
for (; infoIter != it->second.end(); infoIter++)
|
||||
{
|
||||
if ((*infoIter)->_rect.equals(rect))
|
||||
return *infoIter;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void SpritePolygonCache::removeSpritePolygonCache(const std::string& filePath, const cocos2d::Rect* rect)
|
||||
{
|
||||
std::string fullpath = FileUtils::getInstance()->fullPathForFilename(filePath);
|
||||
if (fullpath.size() == 0)
|
||||
return;
|
||||
|
||||
auto it = _SpritePolygonCacheMap.find(fullpath);
|
||||
if (_SpritePolygonCacheMap.end() == it)
|
||||
return;
|
||||
|
||||
if (nullptr == rect)
|
||||
return;
|
||||
|
||||
auto infoIter = it->second.begin();
|
||||
for (; infoIter != it->second.end(); infoIter++)
|
||||
{
|
||||
if((*infoIter)->_rect.equals(*rect))
|
||||
{
|
||||
CC_SAFE_DELETE(*infoIter);
|
||||
it->second.erase(infoIter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void SpritePolygonCache::removeAllSpritePolygonCache()
|
||||
{
|
||||
for (std::unordered_map<std::string, VecSpritePolygonInfo>::iterator it = _SpritePolygonCacheMap.begin(); it != _SpritePolygonCacheMap.end(); ++it)
|
||||
{
|
||||
for (auto infoIter = it->second.begin(); infoIter != it->second.end(); infoIter++)
|
||||
{
|
||||
CC_SAFE_DELETE(*infoIter);
|
||||
}
|
||||
it->second.clear();
|
||||
}
|
||||
_SpritePolygonCacheMap.clear();
|
||||
}
|
||||
|
||||
bool SpritePolygonCache::isSpritePolygonCachExist(const std::string& filePath, const cocos2d::Rect& rect)
|
||||
{
|
||||
std::string fullpath = FileUtils::getInstance()->fullPathForFilename(filePath);
|
||||
if (fullpath.size() == 0)
|
||||
return false;
|
||||
|
||||
auto it = _SpritePolygonCacheMap.find(fullpath);
|
||||
if (_SpritePolygonCacheMap.end() == it)
|
||||
return false;
|
||||
|
||||
auto infoIter = it->second.begin();
|
||||
for (; infoIter != it->second.end(); infoIter++)
|
||||
{
|
||||
if ((*infoIter)->_rect.equals(rect))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void SpritePolygonCache::printInfo(SpritePolygonInfo &info){
|
||||
CCLOG("========================");
|
||||
CCLOG("%zd, %zd", info._triangles.vertCount, info._triangles.indexCount);
|
||||
|
||||
auto vertEnd = &info._triangles.verts[info._triangles.vertCount];
|
||||
for(auto v = info._triangles.verts; v < vertEnd; v++)
|
||||
{
|
||||
CCLOG("%f, %f", v->vertices.x, v->vertices.y);
|
||||
}
|
||||
auto indEnd = &info._triangles.indices[info._triangles.indexCount];
|
||||
for(auto i = info._triangles.indices; i < indEnd; i+=3)
|
||||
{
|
||||
CCLOG("%d, %d, %d,", *i,*(i+1), *(i+2));
|
||||
}
|
||||
|
||||
auto uvEnd = &info._triangles.verts[info._triangles.vertCount];
|
||||
for(auto v = info._triangles.verts; v < uvEnd; v++)
|
||||
{
|
||||
CCLOG("%f, %f", v->texCoords.u, v->texCoords.v);
|
||||
}
|
||||
}
|
||||
|
||||
USING_NS_CC;
|
|
@ -1,85 +0,0 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2008-2010 Ricardo Quesada
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2011 Zynga Inc.
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef COCOS_2D_SpritePolygonCACHE_H__
|
||||
#define COCOS_2D_SpritePolygonCACHE_H__
|
||||
|
||||
#include <vector>
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
#include "2d/CCNode.h"
|
||||
#include "renderer/CCTrianglesCommand.h"
|
||||
#include "CCDrawNode.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
typedef struct CC_DLL _SpritePolygonInfo
|
||||
{
|
||||
cocos2d::Rect _rect;
|
||||
cocos2d::TrianglesCommand::Triangles _triangles;
|
||||
~_SpritePolygonInfo()
|
||||
{
|
||||
if(nullptr != _triangles.verts)
|
||||
{
|
||||
CC_SAFE_DELETE_ARRAY(_triangles.verts);
|
||||
}
|
||||
|
||||
if(nullptr != _triangles.indices)
|
||||
{
|
||||
CC_SAFE_DELETE_ARRAY(_triangles.indices);
|
||||
}
|
||||
}
|
||||
} SpritePolygonInfo;
|
||||
|
||||
typedef std::vector<SpritePolygonInfo*> VecSpritePolygonInfo;
|
||||
typedef std::unordered_map<std::string, VecSpritePolygonInfo> MapSpritePolygonInfo;
|
||||
|
||||
class CC_DLL SpritePolygonCache: public cocos2d::Ref
|
||||
{
|
||||
public:
|
||||
virtual ~SpritePolygonCache();
|
||||
static SpritePolygonCache* getInstance();
|
||||
static void destroyInstance();
|
||||
SpritePolygonInfo* addSpritePolygonCache(const std::string& filePath, const cocos2d::Rect& rect, const cocos2d::TrianglesCommand::Triangles trianglesCommand);
|
||||
SpritePolygonInfo* getSpritePolygonCache(const std::string& filePath, const cocos2d::Rect& rect);
|
||||
void removeSpritePolygonCache(const std::string& filePath, const cocos2d::Rect* rect = nullptr);
|
||||
void removeAllSpritePolygonCache();
|
||||
bool isSpritePolygonCachExist(const std::string& filePath, const cocos2d::Rect& rect);
|
||||
|
||||
static void printInfo(SpritePolygonInfo &info);
|
||||
protected:
|
||||
SpritePolygonCache();
|
||||
private:
|
||||
void init();
|
||||
private:
|
||||
static SpritePolygonCache* _SpritePolygonCache;
|
||||
MapSpritePolygonInfo _SpritePolygonCacheMap;
|
||||
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif // #ifndef COCOS_2D_SpritePolygonCACHE_H__
|
|
@ -355,6 +355,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClCompile Include="..\..\extensions\Particle3D\PU\CCPUVortexAffectorTranslator.cpp" />
|
||||
<ClCompile Include="..\..\extensions\physics-nodes\CCPhysicsDebugNode.cpp" />
|
||||
<ClCompile Include="..\..\extensions\physics-nodes\CCPhysicsSprite.cpp" />
|
||||
<ClCompile Include="..\..\external\clipper\clipper.cpp" />
|
||||
<ClCompile Include="..\..\external\ConvertUTF\ConvertUTF.c" />
|
||||
<ClCompile Include="..\..\external\ConvertUTF\ConvertUTFWrapper.cpp" />
|
||||
<ClCompile Include="..\..\external\edtaa3func\edtaa3func.cpp" />
|
||||
|
@ -668,6 +669,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClCompile Include="CCAnimation.cpp" />
|
||||
<ClCompile Include="CCAnimationCache.cpp" />
|
||||
<ClCompile Include="CCAtlasNode.cpp" />
|
||||
<ClCompile Include="CCAutoPolygon.cpp" />
|
||||
<ClCompile Include="CCCamera.cpp" />
|
||||
<ClCompile Include="CCClippingNode.cpp" />
|
||||
<ClCompile Include="CCClippingRectangleNode.cpp" />
|
||||
|
@ -721,9 +723,6 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClCompile Include="CCTransitionPageTurn.cpp" />
|
||||
<ClCompile Include="CCTransitionProgress.cpp" />
|
||||
<ClCompile Include="CCTweenFunction.cpp" />
|
||||
<ClCompile Include="MarchingSquare.cpp" />
|
||||
<ClCompile Include="SpritePolygon.cpp" />
|
||||
<ClCompile Include="SpritePolygonCache.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\extensions\assets-manager\AssetsManager.h" />
|
||||
|
@ -903,6 +902,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClInclude Include="..\..\extensions\Particle3D\PU\CCPUVortexAffectorTranslator.h" />
|
||||
<ClInclude Include="..\..\extensions\physics-nodes\CCPhysicsDebugNode.h" />
|
||||
<ClInclude Include="..\..\extensions\physics-nodes\CCPhysicsSprite.h" />
|
||||
<ClInclude Include="..\..\external\clipper\clipper.hpp" />
|
||||
<ClInclude Include="..\..\external\ConvertUTF\ConvertUTF.h" />
|
||||
<ClInclude Include="..\..\external\edtaa3func\edtaa3func.h" />
|
||||
<ClInclude Include="..\..\external\flatbuffers\flatbuffers.h" />
|
||||
|
@ -1275,6 +1275,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClInclude Include="CCAnimation.h" />
|
||||
<ClInclude Include="CCAnimationCache.h" />
|
||||
<ClInclude Include="CCAtlasNode.h" />
|
||||
<ClInclude Include="CCAutoPolygon.h" />
|
||||
<ClInclude Include="CCCamera.h" />
|
||||
<ClInclude Include="CCClippingNode.h" />
|
||||
<ClInclude Include="CCClippingRectangleNode.h" />
|
||||
|
@ -1328,9 +1329,6 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClInclude Include="CCTransitionPageTurn.h" />
|
||||
<ClInclude Include="CCTransitionProgress.h" />
|
||||
<ClInclude Include="CCTweenFunction.h" />
|
||||
<ClInclude Include="MarchingSquare.h" />
|
||||
<ClInclude Include="SpritePolygon.h" />
|
||||
<ClInclude Include="SpritePolygonCache.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\3d\CCAnimationCurve.inl" />
|
||||
|
|
|
@ -271,6 +271,8 @@
|
|||
<Filter Include="physics3d">
|
||||
<UniqueIdentifier>{e492faef-2169-4117-8d73-e0c66271fe25}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="external\clipper">
|
||||
<UniqueIdentifier>{ff65e340-b79d-4f87-9b4c-ed46bda5d20f}</UniqueIdentifier>
|
||||
<Filter Include="navmesh">
|
||||
<UniqueIdentifier>{0f3fa25d-9e2b-4a2e-a1df-834b796b3fb3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
|
@ -1824,15 +1826,6 @@
|
|||
<ClCompile Include="..\..\external\poly2tri\sweep\sweep_context.cc">
|
||||
<Filter>external\poly2tri\sweep</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MarchingSquare.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SpritePolygon.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SpritePolygonCache.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\physics3d\CCPhysics3D.cpp">
|
||||
<Filter>physics3d</Filter>
|
||||
</ClCompile>
|
||||
|
@ -1897,6 +1890,12 @@
|
|||
<ClCompile Include="..\renderer\CCFrameBuffer.cpp">
|
||||
<Filter>renderer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CCAutoPolygon.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\external\clipper\clipper.cpp">
|
||||
<Filter>external\clipper</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\physics\CCPhysicsBody.h">
|
||||
|
@ -3636,15 +3635,6 @@
|
|||
<ClInclude Include="..\..\external\poly2tri\sweep\sweep_context.h">
|
||||
<Filter>external\poly2tri\sweep</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MarchingSquare.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SpritePolygon.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SpritePolygonCache.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\physics3d\CCPhysics3D.h">
|
||||
<Filter>physics3d</Filter>
|
||||
</ClInclude>
|
||||
|
@ -3709,6 +3699,12 @@
|
|||
<ClInclude Include="..\renderer\CCFrameBuffer.h">
|
||||
<Filter>renderer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CCAutoPolygon.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\external\clipper\clipper.hpp">
|
||||
<Filter>external\clipper</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\math\Mat4.inl">
|
||||
|
|
|
@ -191,6 +191,7 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\extensions\Particle3D\PU\CCPUVortexAffectorTranslator.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\extensions\physics-nodes\CCPhysicsDebugNode.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\extensions\physics-nodes\CCPhysicsSprite.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\clipper\clipper.hpp" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\ConvertUTF\ConvertUTF.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\edtaa3func\edtaa3func.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\flatbuffers\flatbuffers.h" />
|
||||
|
@ -572,6 +573,7 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCAnimation.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCAnimationCache.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCAtlasNode.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCAutoPolygon.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCCamera.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCClippingNode.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCClippingRectangleNode.h" />
|
||||
|
@ -625,9 +627,6 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCTransitionPageTurn.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCTransitionProgress.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCTweenFunction.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\MarchingSquare.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygon.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygonCache.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)targetver.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -804,6 +803,7 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\extensions\Particle3D\PU\CCPUVortexAffectorTranslator.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\extensions\physics-nodes\CCPhysicsDebugNode.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\extensions\physics-nodes\CCPhysicsSprite.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\clipper\clipper.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\ConvertUTF\ConvertUTF.c">
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
</ClCompile>
|
||||
|
@ -1157,6 +1157,7 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCAnimation.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCAnimationCache.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCAtlasNode.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCAutoPolygon.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCCamera.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCClippingNode.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCClippingRectangleNode.cpp" />
|
||||
|
@ -1210,9 +1211,6 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCTransitionPageTurn.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCTransitionProgress.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCTweenFunction.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\MarchingSquare.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygon.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygonCache.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectCapability Include="SourceItemsFromImports" />
|
||||
|
|
|
@ -1743,9 +1743,6 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\platform\winrt\WICImageLoader-winrt.h">
|
||||
<Filter>platform\winrt</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\MarchingSquare.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\poly2tri\common\shapes.h">
|
||||
<Filter>external\poly2tri\common</Filter>
|
||||
</ClInclude>
|
||||
|
@ -1767,12 +1764,6 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\poly2tri\poly2tri.h">
|
||||
<Filter>external\poly2tri</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygon.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygonCache.h">
|
||||
<Filter>2d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\renderer\CCRenderState.h">
|
||||
<Filter>renderer</Filter>
|
||||
</ClInclude>
|
||||
|
@ -1845,6 +1836,8 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\physics3d\CCPhysicsSprite3D.h">
|
||||
<Filter>physics3d</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\clipper\clipper.hpp" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCAutoPolygon.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\cocos2d.cpp">
|
||||
|
@ -3415,9 +3408,6 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\platform\winrt\WICImageLoader-winrt.cpp">
|
||||
<Filter>platform\winrt</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\MarchingSquare.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\poly2tri\common\shapes.cc">
|
||||
<Filter>external\poly2tri\common</Filter>
|
||||
</ClCompile>
|
||||
|
@ -3433,12 +3423,6 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\poly2tri\sweep\sweep_context.cc">
|
||||
<Filter>external\poly2tri\sweep</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygon.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\SpritePolygonCache.cpp">
|
||||
<Filter>2d</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\renderer\CCRenderState.cpp">
|
||||
<Filter>renderer</Filter>
|
||||
</ClCompile>
|
||||
|
@ -3517,6 +3501,8 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\base\CCUserDefault-winrt.cpp">
|
||||
<Filter>base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\..\external\clipper\clipper.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCAutoPolygon.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="2d">
|
||||
|
@ -3774,6 +3760,9 @@
|
|||
<Filter Include="external\poly2tri\sweep">
|
||||
<UniqueIdentifier>{932c5f6e-07b3-4b34-97ae-2f3d42024149}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="external\clipper">
|
||||
<UniqueIdentifier>{37ad3bdd-733d-46e4-b28d-b350521e6f54}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="audio">
|
||||
<UniqueIdentifier>{f1c7e21a-6d78-44ba-9480-d7ba197c7b42}</UniqueIdentifier>
|
||||
</Filter>
|
||||
|
|
|
@ -230,7 +230,7 @@ void BillBoard::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
|
|||
{
|
||||
//FIXME: frustum culling here
|
||||
flags |= Node::FLAGS_RENDER_AS_3D;
|
||||
_trianglesCommand.init(0, _texture->getName(), getGLProgramState(), _blendFunc, getRenderedTriangles(), _modelViewTransform, flags);
|
||||
_trianglesCommand.init(0, _texture->getName(), getGLProgramState(), _blendFunc, _polyInfo.triangles, _modelViewTransform, flags);
|
||||
_trianglesCommand.setTransparent(true);
|
||||
_trianglesCommand.set3D(true);
|
||||
renderer->addCommand(&_trianglesCommand);
|
||||
|
|
|
@ -613,8 +613,9 @@ void Mesh::setLightUniforms(Pass* pass, Scene* scene, const Vec4& color, unsigne
|
|||
if (hasAmbient)
|
||||
{
|
||||
ambient.x /= 255.f; ambient.y /= 255.f; ambient.z /= 255.f;
|
||||
//override the uniform value of u_color using the calculated color
|
||||
glProgramState->setUniformVec4("u_color", Vec4(color.x * ambient.x, color.y * ambient.y, color.z * ambient.z, color.w));
|
||||
}
|
||||
glProgramState->setUniformVec4("u_color", Vec4(color.x * ambient.x, color.y * ambient.y, color.z * ambient.z, color.w));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -159,11 +159,9 @@ void Terrain::onDraw(const Mat4 &transform, uint32_t flags)
|
|||
|
||||
if(_isCameraViewChanged )
|
||||
{
|
||||
auto camPos = camera->getPosition3D();
|
||||
auto camModelMat = camera->getNodeToWorldTransform();
|
||||
camModelMat.transformPoint(&camPos);
|
||||
auto m = camera->getNodeToWorldTransform();
|
||||
//set lod
|
||||
setChunksLOD(camPos);
|
||||
setChunksLOD(Vec3(m.m[12], m.m[13], m.m[14]));
|
||||
}
|
||||
|
||||
if(_isCameraViewChanged )
|
||||
|
@ -265,7 +263,7 @@ void Terrain::setChunksLOD(Vec3 cameraPos)
|
|||
{
|
||||
AABB aabb = _chunkesArray[m][n]->_parent->_worldSpaceAABB;
|
||||
auto center = aabb.getCenter();
|
||||
float dist = Vec3(center.x,0,center.z).distance(Vec3(cameraPos.x,0,cameraPos.z));
|
||||
float dist = Vec2(center.x, center.z).distance(Vec2(cameraPos.x, cameraPos.z));
|
||||
_chunkesArray[m][n]->_currentLod = 3;
|
||||
for(int i =0;i<3;i++)
|
||||
{
|
||||
|
|
|
@ -83,9 +83,7 @@ cocos2d.cpp \
|
|||
2d/CCTransitionPageTurn.cpp \
|
||||
2d/CCTransitionProgress.cpp \
|
||||
2d/CCTweenFunction.cpp \
|
||||
2d/MarchingSquare.cpp \
|
||||
2d/SpritePolygon.cpp \
|
||||
2d/SpritePolygonCache.cpp \
|
||||
2d/CCAutoPolygon.cpp \
|
||||
3d/CCFrustum.cpp \
|
||||
3d/CCPlane.cpp \
|
||||
platform/CCFileUtils.cpp \
|
||||
|
@ -221,7 +219,8 @@ navmesh/CCNavMeshUtils.cpp \
|
|||
../external/poly2tri/sweep/advancing_front.cc \
|
||||
../external/poly2tri/sweep/cdt.cc \
|
||||
../external/poly2tri/sweep/sweep_context.cc \
|
||||
../external/poly2tri/sweep/sweep.cc
|
||||
../external/poly2tri/sweep/sweep.cc \
|
||||
../external/clipper/clipper.cpp
|
||||
|
||||
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) \
|
||||
|
@ -237,7 +236,8 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) \
|
|||
$(LOCAL_PATH)/../external/nslog \
|
||||
$(LOCAL_PATH)/../external/poly2tri \
|
||||
$(LOCAL_PATH)/../external/poly2tri/common \
|
||||
$(LOCAL_PATH)/../external/poly2tri/sweep
|
||||
$(LOCAL_PATH)/../external/poly2tri/sweep \
|
||||
$(LOCAL_PATH)/../external/clipper
|
||||
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH) \
|
||||
$(LOCAL_PATH)/platform \
|
||||
|
@ -251,7 +251,8 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH) \
|
|||
$(LOCAL_PATH)/../external/nslog \
|
||||
$(LOCAL_PATH)/../external/poly2tri \
|
||||
$(LOCAL_PATH)/../external/poly2tri/common \
|
||||
$(LOCAL_PATH)/../external/poly2tri/sweep
|
||||
$(LOCAL_PATH)/../external/poly2tri/sweep \
|
||||
$(LOCAL_PATH)/../external/clipper
|
||||
|
||||
LOCAL_EXPORT_LDLIBS := -lGLESv2 \
|
||||
-llog \
|
||||
|
|
|
@ -84,6 +84,7 @@ set(COCOS_SRC cocos2d.cpp
|
|||
|
||||
#todo: provide prebuild versions of the xx libs for all platforms
|
||||
include_directories(../external/xxtea)
|
||||
include_directories(../external/clipper)
|
||||
|
||||
|
||||
add_library(cocos2d ${COCOS_SRC})
|
||||
|
|
|
@ -254,6 +254,7 @@ THE SOFTWARE.
|
|||
#include "2d/CCAnimation.h"
|
||||
#include "2d/CCAnimationCache.h"
|
||||
#include "2d/CCSprite.h"
|
||||
#include "2d/CCAutoPolygon.h"
|
||||
#include "2d/CCSpriteBatchNode.h"
|
||||
#include "2d/CCSpriteFrame.h"
|
||||
#include "2d/CCSpriteFrameCache.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2010-2012 cocos2d-x.org
|
||||
Copyright (c) 2013-2014 Chukong Technologies
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -33,26 +33,26 @@ namespace cocostudio {
|
|||
|
||||
enum FrameType
|
||||
{
|
||||
kKeyframeMove = 0,
|
||||
kKeyframeScale,
|
||||
kKeyframeRotate,
|
||||
kKeyframeTint,
|
||||
kKeyframeFade,
|
||||
kKeyframeMax
|
||||
kKeyframeMove = 0,
|
||||
kKeyframeScale,
|
||||
kKeyframeRotate,
|
||||
kKeyframeTint,
|
||||
kKeyframeFade,
|
||||
kKeyframeMax
|
||||
};
|
||||
|
||||
enum class FrameEaseType
|
||||
{
|
||||
Custom = -1,
|
||||
Custom = -1,
|
||||
|
||||
LINERAR = 0,
|
||||
LINERAR = 0,
|
||||
|
||||
SINE_EASEIN,
|
||||
SINE_EASEOUT,
|
||||
SINE_EASEINOUT,
|
||||
SINE_EASEOUT,
|
||||
SINE_EASEINOUT,
|
||||
|
||||
QUAD_EASEIN,
|
||||
QUAD_EASEOUT,
|
||||
QUAD_EASEOUT,
|
||||
QUAD_EASEINOUT,
|
||||
|
||||
CUBIC_EASEIN,
|
||||
|
@ -64,7 +64,7 @@ enum class FrameEaseType
|
|||
QUART_EASEINOUT,
|
||||
|
||||
QUINT_EASEIN,
|
||||
QUINT_EASEOUT,
|
||||
QUINT_EASEOUT,
|
||||
QUINT_EASEINOUT,
|
||||
|
||||
EXPO_EASEIN,
|
||||
|
@ -87,7 +87,7 @@ enum class FrameEaseType
|
|||
BOUNCE_EASEOUT,
|
||||
BOUNCE_EASEINOUT,
|
||||
|
||||
TWEEN_EASING_MAX = 10000
|
||||
TWEEN_EASING_MAX = 10000
|
||||
};
|
||||
/**
|
||||
* @js NA
|
||||
|
@ -98,113 +98,113 @@ class CC_STUDIO_DLL ActionFrame: public cocos2d::Ref
|
|||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionFrame();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionFrame();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionFrame();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionFrame();
|
||||
|
||||
/**
|
||||
* Changes the index of action frame
|
||||
*
|
||||
* @param index the index of action frame
|
||||
*/
|
||||
void setFrameIndex(int index);
|
||||
/**
|
||||
* Changes the index of action frame
|
||||
*
|
||||
* @param index the index of action frame
|
||||
*/
|
||||
void setFrameIndex(int index);
|
||||
|
||||
/**
|
||||
* Gets the index of action frame
|
||||
*
|
||||
* @return the index of action frame
|
||||
*/
|
||||
int getFrameIndex();
|
||||
/**
|
||||
* Gets the index of action frame
|
||||
*
|
||||
* @return the index of action frame
|
||||
*/
|
||||
int getFrameIndex();
|
||||
|
||||
/**
|
||||
* Changes the time of action frame
|
||||
*
|
||||
* @param fTime the time of action frame
|
||||
*/
|
||||
void setFrameTime(float fTime);
|
||||
/**
|
||||
* Changes the time of action frame
|
||||
*
|
||||
* @param fTime the time of action frame
|
||||
*/
|
||||
void setFrameTime(float fTime);
|
||||
|
||||
/**
|
||||
* Gets the time of action frame
|
||||
*
|
||||
* @return fTime the time of action frame
|
||||
*/
|
||||
float getFrameTime();
|
||||
/**
|
||||
* Gets the time of action frame
|
||||
*
|
||||
* @return fTime the time of action frame
|
||||
*/
|
||||
float getFrameTime();
|
||||
|
||||
/**
|
||||
* Changes the type of action frame
|
||||
*
|
||||
* @param frameType the type of action frame
|
||||
*/
|
||||
void setFrameType(int frameType);
|
||||
/**
|
||||
* Changes the type of action frame
|
||||
*
|
||||
* @param frameType the type of action frame
|
||||
*/
|
||||
void setFrameType(int frameType);
|
||||
|
||||
/**
|
||||
* Gets the type of action frame
|
||||
*
|
||||
* @return the type of action frame
|
||||
*/
|
||||
int getFrameType();
|
||||
/**
|
||||
* Gets the type of action frame
|
||||
*
|
||||
* @return the type of action frame
|
||||
*/
|
||||
int getFrameType();
|
||||
|
||||
/**
|
||||
* Changes the easing type.
|
||||
*
|
||||
* @param easingType the easing type.
|
||||
*/
|
||||
void setEasingType(int easingType);
|
||||
/**
|
||||
* Changes the easing type.
|
||||
*
|
||||
* @param easingType the easing type.
|
||||
*/
|
||||
void setEasingType(int easingType);
|
||||
|
||||
/**
|
||||
* Gets the easing type.
|
||||
*
|
||||
* @return the easing type.
|
||||
*/
|
||||
int getEasingType();
|
||||
/**
|
||||
* Gets the easing type.
|
||||
*
|
||||
* @return the easing type.
|
||||
*/
|
||||
int getEasingType();
|
||||
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @parame duration the source ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration,ActionFrame* srcFrame);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @parame duration the source ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration,ActionFrame* srcFrame);
|
||||
|
||||
/**
|
||||
*Set the ActionInterval easing parameter.
|
||||
*
|
||||
*@parame parameter the parameter for frame ease
|
||||
*
|
||||
*/
|
||||
virtual void setEasingParameter(std::vector<float>& parameter);
|
||||
/**
|
||||
*Set the ActionInterval easing parameter.
|
||||
*
|
||||
*@parame parameter the parameter for frame ease
|
||||
*
|
||||
*/
|
||||
virtual void setEasingParameter(std::vector<float>& parameter);
|
||||
protected:
|
||||
/**
|
||||
* Gets the Easing Action of ActionFrame.
|
||||
*
|
||||
* @parame action the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getEasingAction(cocos2d::ActionInterval* action);
|
||||
/**
|
||||
* Gets the Easing Action of ActionFrame.
|
||||
*
|
||||
* @parame action the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getEasingAction(cocos2d::ActionInterval* action);
|
||||
protected:
|
||||
int _frameType;
|
||||
int _frameIndex;
|
||||
float _fTime;
|
||||
FrameEaseType _easingType;
|
||||
std::vector<float> _Parameter;
|
||||
int _frameType;
|
||||
int _frameIndex;
|
||||
float _fTime;
|
||||
FrameEaseType _easingType;
|
||||
std::vector<float> _Parameter;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -215,38 +215,38 @@ class CC_STUDIO_DLL ActionMoveFrame:public ActionFrame
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionMoveFrame();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionMoveFrame();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionMoveFrame();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionMoveFrame();
|
||||
|
||||
/**
|
||||
* Changes the move action position.
|
||||
*
|
||||
* @param the move action position.
|
||||
*/
|
||||
void setPosition(cocos2d::Vec2 pos);
|
||||
/**
|
||||
* Changes the move action position.
|
||||
*
|
||||
* @param the move action position.
|
||||
*/
|
||||
void setPosition(cocos2d::Vec2 pos);
|
||||
|
||||
/**
|
||||
* Gets the move action position.
|
||||
*
|
||||
* @return the move action position.
|
||||
*/
|
||||
cocos2d::Vec2 getPosition();
|
||||
/**
|
||||
* Gets the move action position.
|
||||
*
|
||||
* @return the move action position.
|
||||
*/
|
||||
cocos2d::Vec2 getPosition();
|
||||
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
protected:
|
||||
cocos2d::Vec2 _position;
|
||||
};
|
||||
|
@ -259,55 +259,55 @@ class CC_STUDIO_DLL ActionScaleFrame:public ActionFrame
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionScaleFrame();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionScaleFrame();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionScaleFrame();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionScaleFrame();
|
||||
|
||||
/**
|
||||
* Changes the scale action scaleX.
|
||||
*
|
||||
* @param the scale action scaleX.
|
||||
*/
|
||||
void setScaleX(float scaleX);
|
||||
/**
|
||||
* Changes the scale action scaleX.
|
||||
*
|
||||
* @param the scale action scaleX.
|
||||
*/
|
||||
void setScaleX(float scaleX);
|
||||
|
||||
/**
|
||||
* Gets the scale action scaleX.
|
||||
*
|
||||
* @return the scale action scaleX.
|
||||
*/
|
||||
float getScaleX();
|
||||
/**
|
||||
* Gets the scale action scaleX.
|
||||
*
|
||||
* @return the scale action scaleX.
|
||||
*/
|
||||
float getScaleX();
|
||||
|
||||
/**
|
||||
* Changes the scale action scaleY.
|
||||
*
|
||||
* @param rotation the scale action scaleY.
|
||||
*/
|
||||
void setScaleY(float scaleY);
|
||||
/**
|
||||
* Changes the scale action scaleY.
|
||||
*
|
||||
* @param rotation the scale action scaleY.
|
||||
*/
|
||||
void setScaleY(float scaleY);
|
||||
|
||||
/**
|
||||
* Gets the scale action scaleY.
|
||||
*
|
||||
* @return the the scale action scaleY.
|
||||
*/
|
||||
float getScaleY();
|
||||
/**
|
||||
* Gets the scale action scaleY.
|
||||
*
|
||||
* @return the the scale action scaleY.
|
||||
*/
|
||||
float getScaleY();
|
||||
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
protected:
|
||||
float _scaleX;
|
||||
float _scaleY;
|
||||
float _scaleX;
|
||||
float _scaleY;
|
||||
};
|
||||
/**
|
||||
* @js NA
|
||||
|
@ -317,50 +317,50 @@ class CC_STUDIO_DLL ActionRotationFrame:public ActionFrame
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionRotationFrame();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionRotationFrame();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionRotationFrame();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionRotationFrame();
|
||||
|
||||
/**
|
||||
* Changes rotate action rotation.
|
||||
*
|
||||
* @param rotation rotate action rotation.
|
||||
*/
|
||||
void setRotation(float rotation);
|
||||
/**
|
||||
* Changes rotate action rotation.
|
||||
*
|
||||
* @param rotation rotate action rotation.
|
||||
*/
|
||||
void setRotation(float rotation);
|
||||
|
||||
/**
|
||||
* Gets the rotate action rotation.
|
||||
*
|
||||
* @return the rotate action rotation.
|
||||
*/
|
||||
float getRotation();
|
||||
/**
|
||||
* Gets the rotate action rotation.
|
||||
*
|
||||
* @return the rotate action rotation.
|
||||
*/
|
||||
float getRotation();
|
||||
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @parame duration the source ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration,ActionFrame* srcFrame);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @parame duration the source ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration,ActionFrame* srcFrame);
|
||||
public:
|
||||
float _rotation;
|
||||
float _rotation;
|
||||
};
|
||||
/**
|
||||
* @js NA
|
||||
|
@ -370,40 +370,40 @@ class CC_STUDIO_DLL ActionFadeFrame:public ActionFrame
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionFadeFrame();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionFadeFrame();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionFadeFrame();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionFadeFrame();
|
||||
|
||||
/**
|
||||
* Changes the fade action opacity.
|
||||
*
|
||||
* @param opacity the fade action opacity
|
||||
*/
|
||||
void setOpacity(int opacity);
|
||||
/**
|
||||
* Changes the fade action opacity.
|
||||
*
|
||||
* @param opacity the fade action opacity
|
||||
*/
|
||||
void setOpacity(int opacity);
|
||||
|
||||
/**
|
||||
* Gets the fade action opacity.
|
||||
*
|
||||
* @return the fade action opacity.
|
||||
*/
|
||||
int getOpacity();
|
||||
/**
|
||||
* Gets the fade action opacity.
|
||||
*
|
||||
* @return the fade action opacity.
|
||||
*/
|
||||
int getOpacity();
|
||||
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
protected:
|
||||
float _opacity;
|
||||
float _opacity;
|
||||
};
|
||||
/**
|
||||
* @js NA
|
||||
|
@ -414,40 +414,40 @@ class CC_STUDIO_DLL ActionTintFrame:public ActionFrame
|
|||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionTintFrame();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionTintFrame();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionTintFrame();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionTintFrame();
|
||||
|
||||
/**
|
||||
* Changes the tint action color.
|
||||
*
|
||||
* @param ccolor the tint action color
|
||||
*/
|
||||
void setColor(cocos2d::Color3B ccolor);
|
||||
/**
|
||||
* Changes the tint action color.
|
||||
*
|
||||
* @param ccolor the tint action color
|
||||
*/
|
||||
void setColor(cocos2d::Color3B ccolor);
|
||||
|
||||
/**
|
||||
* Gets the tint action color.
|
||||
*
|
||||
* @return the tint action color.
|
||||
*/
|
||||
cocos2d::Color3B getColor();
|
||||
/**
|
||||
* Gets the tint action color.
|
||||
*
|
||||
* @return the tint action color.
|
||||
*/
|
||||
cocos2d::Color3B getColor();
|
||||
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
/**
|
||||
* Gets the ActionInterval of ActionFrame.
|
||||
*
|
||||
* @parame duration the duration time of ActionFrame
|
||||
*
|
||||
* @return ActionInterval
|
||||
*/
|
||||
virtual cocos2d::ActionInterval* getAction(float duration);
|
||||
protected:
|
||||
cocos2d::Color3B _color;
|
||||
cocos2d::Color3B _color;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -32,25 +32,25 @@ namespace cocostudio {
|
|||
|
||||
enum FrameEasingType
|
||||
{
|
||||
kframeEasingInstant,
|
||||
kframeEasingInstant,
|
||||
|
||||
kframeEasingLinear,
|
||||
kframeEasingLinear,
|
||||
|
||||
kframeEasingCubicIn,
|
||||
kframeEasingCubicOut,
|
||||
kframeEasingCubicInOut,
|
||||
kframeEasingCubicIn,
|
||||
kframeEasingCubicOut,
|
||||
kframeEasingCubicInOut,
|
||||
|
||||
kframeEasingElasticIn,
|
||||
kframeEasingElasticOut,
|
||||
kframeEasingElasticInOut,
|
||||
kframeEasingElasticIn,
|
||||
kframeEasingElasticOut,
|
||||
kframeEasingElasticInOut,
|
||||
|
||||
kframeEasingBounceIn,
|
||||
kframeEasingBounceOut,
|
||||
kframeEasingBounceInOut,
|
||||
kframeEasingBounceIn,
|
||||
kframeEasingBounceOut,
|
||||
kframeEasingBounceInOut,
|
||||
|
||||
kframeEasingBackIn,
|
||||
kframeEasingBackOut,
|
||||
kframeEasingBackInOut,
|
||||
kframeEasingBackIn,
|
||||
kframeEasingBackOut,
|
||||
kframeEasingBackInOut,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -60,15 +60,15 @@ enum FrameEasingType
|
|||
class CC_STUDIO_DLL ActionFrameEasing:public cocos2d::Ref
|
||||
{
|
||||
protected:
|
||||
FrameEasingType _type;
|
||||
float _fValue;
|
||||
FrameEasingType _type;
|
||||
float _fValue;
|
||||
public:
|
||||
ActionFrameEasing();
|
||||
virtual ~ActionFrameEasing();
|
||||
ActionFrameEasing();
|
||||
virtual ~ActionFrameEasing();
|
||||
|
||||
float bounceTime(float t);
|
||||
float bounceTime(float t);
|
||||
|
||||
float easeValue(float t);
|
||||
float easeValue(float t);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -38,89 +38,89 @@ class CC_STUDIO_DLL ActionManagerEx:public cocos2d::Ref
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
* @js ctor
|
||||
*/
|
||||
ActionManagerEx();
|
||||
/**
|
||||
* Default constructor
|
||||
* @js ctor
|
||||
*/
|
||||
ActionManagerEx();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
* @js NA
|
||||
* @lua NA
|
||||
*/
|
||||
virtual ~ActionManagerEx();
|
||||
/**
|
||||
* Default destructor
|
||||
* @js NA
|
||||
* @lua NA
|
||||
*/
|
||||
virtual ~ActionManagerEx();
|
||||
|
||||
/**
|
||||
* Gets the static instance of ActionManager.
|
||||
* @js getInstance
|
||||
* @lua getInstance
|
||||
*/
|
||||
static ActionManagerEx* getInstance();
|
||||
/**
|
||||
* Gets the static instance of ActionManager.
|
||||
* @js getInstance
|
||||
* @lua getInstance
|
||||
*/
|
||||
static ActionManagerEx* getInstance();
|
||||
|
||||
/**
|
||||
* Purges ActionManager point.
|
||||
* @js purge
|
||||
* @lua destroyActionManager
|
||||
*/
|
||||
static void destroyInstance();
|
||||
/**
|
||||
* Purges ActionManager point.
|
||||
* @js purge
|
||||
* @lua destroyActionManager
|
||||
*/
|
||||
static void destroyInstance();
|
||||
|
||||
/**
|
||||
* Gets an ActionObject with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in the UI file.
|
||||
*
|
||||
* @return ActionObject which named as the param name
|
||||
*/
|
||||
ActionObject* getActionByName(const char* jsonName,const char* actionName);
|
||||
/**
|
||||
* Gets an ActionObject with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in the UI file.
|
||||
*
|
||||
* @return ActionObject which named as the param name
|
||||
*/
|
||||
ActionObject* getActionByName(const char* jsonName,const char* actionName);
|
||||
|
||||
/**
|
||||
* Play an Action with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in teh UIfile.
|
||||
*
|
||||
* @return ActionObject which named as the param name
|
||||
*/
|
||||
ActionObject* playActionByName(const char* jsonName,const char* actionName);
|
||||
/**
|
||||
* Play an Action with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in teh UIfile.
|
||||
*
|
||||
* @return ActionObject which named as the param name
|
||||
*/
|
||||
ActionObject* playActionByName(const char* jsonName,const char* actionName);
|
||||
|
||||
/**
|
||||
* Play an Action with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in teh UIfile.
|
||||
*
|
||||
* @param func ui action call back
|
||||
*/
|
||||
ActionObject* playActionByName(const char* jsonName,const char* actionName, cocos2d::CallFunc* func);
|
||||
/**
|
||||
* Play an Action with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in teh UIfile.
|
||||
*
|
||||
* @param func ui action call back
|
||||
*/
|
||||
ActionObject* playActionByName(const char* jsonName,const char* actionName, cocos2d::CallFunc* func);
|
||||
|
||||
/**
|
||||
* Stop an Action with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in teh UIfile.
|
||||
*
|
||||
* @return ActionObject which named as the param name
|
||||
*/
|
||||
ActionObject* stopActionByName(const char* jsonName,const char* actionName);
|
||||
/**
|
||||
* Stop an Action with a name.
|
||||
*
|
||||
* @param jsonName UI file name
|
||||
*
|
||||
* @param actionName action name in teh UIfile.
|
||||
*
|
||||
* @return ActionObject which named as the param name
|
||||
*/
|
||||
ActionObject* stopActionByName(const char* jsonName,const char* actionName);
|
||||
|
||||
/*init properties with json dictionay*/
|
||||
void initWithDictionary(const char* jsonName,const rapidjson::Value &dic, Ref* root);
|
||||
void initWithBinary(const char* file, Ref* root, CocoLoader* cocoLoader, stExpCocoNode* pCocoNode);
|
||||
/*init properties with json dictionay*/
|
||||
void initWithDictionary(const char* jsonName,const rapidjson::Value &dic, Ref* root);
|
||||
void initWithBinary(const char* file, Ref* root, CocoLoader* cocoLoader, stExpCocoNode* pCocoNode);
|
||||
|
||||
/**
|
||||
* Release all actions.
|
||||
*
|
||||
*/
|
||||
void releaseActions();
|
||||
/**
|
||||
* Release all actions.
|
||||
*
|
||||
*/
|
||||
void releaseActions();
|
||||
|
||||
protected:
|
||||
std::unordered_map<std::string, cocos2d::Vector<ActionObject*>> _actionDic;
|
||||
std::unordered_map<std::string, cocos2d::Vector<ActionObject*>> _actionDic;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -41,149 +41,149 @@ class CC_STUDIO_DLL ActionNode : public cocos2d::Ref
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionNode();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionNode();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionNode();
|
||||
/**
|
||||
* Sets the time interval of frame.
|
||||
*
|
||||
* @param fTime the time interval of frame
|
||||
*/
|
||||
void setUnitTime(float fTime);
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionNode();
|
||||
/**
|
||||
* Sets the time interval of frame.
|
||||
*
|
||||
* @param fTime the time interval of frame
|
||||
*/
|
||||
void setUnitTime(float fTime);
|
||||
|
||||
/**
|
||||
* Gets the time interval of frame.
|
||||
*
|
||||
* @return fTime the time interval of frame
|
||||
*/
|
||||
float getUnitTime();
|
||||
/**
|
||||
* Sets tag for ActionNode
|
||||
*
|
||||
* @param tag tag of ActionNode
|
||||
*/
|
||||
void setActionTag(int tag);
|
||||
/**
|
||||
* Gets the time interval of frame.
|
||||
*
|
||||
* @return fTime the time interval of frame
|
||||
*/
|
||||
float getUnitTime();
|
||||
/**
|
||||
* Sets tag for ActionNode
|
||||
*
|
||||
* @param tag tag of ActionNode
|
||||
*/
|
||||
void setActionTag(int tag);
|
||||
|
||||
/**
|
||||
* Gets tag for ActionNode
|
||||
*
|
||||
* @return tag tag of ActionNode
|
||||
*/
|
||||
int getActionTag();
|
||||
/**
|
||||
* Gets tag for ActionNode
|
||||
*
|
||||
* @return tag tag of ActionNode
|
||||
*/
|
||||
int getActionTag();
|
||||
|
||||
/**
|
||||
* Sets node which will run a action.
|
||||
*
|
||||
* @param node which will run a action
|
||||
*/
|
||||
void setObject(cocos2d::Ref* node);
|
||||
/**
|
||||
* Sets node which will run a action.
|
||||
*
|
||||
* @param node which will run a action
|
||||
*/
|
||||
void setObject(cocos2d::Ref* node);
|
||||
|
||||
/**
|
||||
* Gets node which will run a action.
|
||||
*
|
||||
* @return node which will run a action
|
||||
*/
|
||||
cocos2d::Ref* getObject();
|
||||
/**
|
||||
* Gets node which will run a action.
|
||||
*
|
||||
* @return node which will run a action
|
||||
*/
|
||||
cocos2d::Ref* getObject();
|
||||
|
||||
/**
|
||||
* Insets a ActionFrame to ActionNode.
|
||||
*
|
||||
* @param index the index of ActionFrame
|
||||
*
|
||||
* @param frame the ActionFrame which will be inserted
|
||||
*/
|
||||
void insertFrame(int index, ActionFrame* frame);
|
||||
/**
|
||||
* Insets a ActionFrame to ActionNode.
|
||||
*
|
||||
* @param index the index of ActionFrame
|
||||
*
|
||||
* @param frame the ActionFrame which will be inserted
|
||||
*/
|
||||
void insertFrame(int index, ActionFrame* frame);
|
||||
|
||||
/**
|
||||
* Pushs back a ActionFrame to ActionNode.
|
||||
*
|
||||
* @param frame the ActionFrame which will be added
|
||||
*/
|
||||
void addFrame(ActionFrame* frame);
|
||||
/**
|
||||
* Pushs back a ActionFrame to ActionNode.
|
||||
*
|
||||
* @param frame the ActionFrame which will be added
|
||||
*/
|
||||
void addFrame(ActionFrame* frame);
|
||||
|
||||
/**
|
||||
* Remove a ActionFrame from ActionNode.
|
||||
*
|
||||
* @param frame the ActionFrame which will be removed
|
||||
*/
|
||||
void deleteFrame(ActionFrame* frame );
|
||||
/**
|
||||
* Remove a ActionFrame from ActionNode.
|
||||
*
|
||||
* @param frame the ActionFrame which will be removed
|
||||
*/
|
||||
void deleteFrame(ActionFrame* frame );
|
||||
|
||||
/**
|
||||
* Remove all ActionFrames from ActionNode.
|
||||
*/
|
||||
void clearAllFrame();
|
||||
/**
|
||||
* Remove all ActionFrames from ActionNode.
|
||||
*/
|
||||
void clearAllFrame();
|
||||
|
||||
/**
|
||||
* Gets index of first ActionFrame.
|
||||
*
|
||||
* @return index of first ActionFrame
|
||||
*/
|
||||
int getFirstFrameIndex();
|
||||
/**
|
||||
* Gets index of first ActionFrame.
|
||||
*
|
||||
* @return index of first ActionFrame
|
||||
*/
|
||||
int getFirstFrameIndex();
|
||||
|
||||
/**
|
||||
* Gets index of last ActionFrame.
|
||||
*
|
||||
* @return index of last ActionFrame
|
||||
*/
|
||||
int getLastFrameIndex();
|
||||
/**
|
||||
* Gets index of last ActionFrame.
|
||||
*
|
||||
* @return index of last ActionFrame
|
||||
*/
|
||||
int getLastFrameIndex();
|
||||
|
||||
/**
|
||||
* Updates action states to some time.
|
||||
*
|
||||
* @param fTime the time when need to update
|
||||
*/
|
||||
virtual bool updateActionToTimeLine(float fTime);
|
||||
/**
|
||||
* Updates action states to some time.
|
||||
*
|
||||
* @param fTime the time when need to update
|
||||
*/
|
||||
virtual bool updateActionToTimeLine(float fTime);
|
||||
|
||||
/**
|
||||
* Play the action.
|
||||
*/
|
||||
virtual void playAction();
|
||||
/**
|
||||
* Play the action.
|
||||
*/
|
||||
virtual void playAction();
|
||||
|
||||
/**
|
||||
* Stop the action.
|
||||
*/
|
||||
virtual void stopAction();
|
||||
/**
|
||||
* Stop the action.
|
||||
*/
|
||||
virtual void stopAction();
|
||||
|
||||
/*init properties with a json dictionary*/
|
||||
virtual void initWithDictionary(const rapidjson::Value& dic, cocos2d::Ref* root);
|
||||
virtual void initWithBinary(CocoLoader* cocoLoader, stExpCocoNode* pCocoNode, Ref* root);
|
||||
/*init properties with a json dictionary*/
|
||||
virtual void initWithDictionary(const rapidjson::Value& dic, cocos2d::Ref* root);
|
||||
virtual void initWithBinary(CocoLoader* cocoLoader, stExpCocoNode* pCocoNode, Ref* root);
|
||||
|
||||
/**
|
||||
* Gets if the action is done once time.
|
||||
*
|
||||
* @return that if the action is done once time
|
||||
*/
|
||||
virtual bool isActionDoneOnce();
|
||||
/**
|
||||
* Gets if the action is done once time.
|
||||
*
|
||||
* @return that if the action is done once time
|
||||
*/
|
||||
virtual bool isActionDoneOnce();
|
||||
protected:
|
||||
int valueToInt(const std::string& value);
|
||||
bool valueToBool(const std::string& value);
|
||||
float valueToFloat(const std::string& value);
|
||||
|
||||
int _currentFrameIndex;
|
||||
int _destFrameIndex;
|
||||
int _currentFrameIndex;
|
||||
int _destFrameIndex;
|
||||
|
||||
float _fUnitTime;
|
||||
float _fUnitTime;
|
||||
|
||||
int _actionTag;
|
||||
cocos2d::Spawn * _actionSpawn;
|
||||
cocos2d::Action* _action;
|
||||
cocos2d::Ref* _object;
|
||||
int _actionTag;
|
||||
cocos2d::Spawn * _actionSpawn;
|
||||
cocos2d::Action* _action;
|
||||
cocos2d::Ref* _object;
|
||||
|
||||
std::vector<cocos2d::Vector<ActionFrame*>*> _frameArray;
|
||||
int _frameArrayNum;
|
||||
std::vector<cocos2d::Vector<ActionFrame*>*> _frameArray;
|
||||
int _frameArrayNum;
|
||||
|
||||
protected:
|
||||
virtual cocos2d::Node* getActionNode();
|
||||
virtual cocos2d::Spawn * refreshActionProperty();
|
||||
virtual void runAction();
|
||||
virtual void initActionNodeFromRoot(cocos2d::Ref* root);
|
||||
virtual void easingToFrame(float duration,float delayTime,ActionFrame* srcFrame,ActionFrame* destFrame);
|
||||
virtual cocos2d::Node* getActionNode();
|
||||
virtual cocos2d::Spawn * refreshActionProperty();
|
||||
virtual void runAction();
|
||||
virtual void initActionNodeFromRoot(cocos2d::Ref* root);
|
||||
virtual void easingToFrame(float duration,float delayTime,ActionFrame* srcFrame,ActionFrame* destFrame);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -43,148 +43,148 @@ class CC_STUDIO_DLL ActionObject : public cocos2d::Ref
|
|||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionObject();
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
ActionObject();
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionObject();
|
||||
/**
|
||||
* Default destructor
|
||||
*/
|
||||
virtual ~ActionObject();
|
||||
|
||||
/**
|
||||
* Sets name for object
|
||||
*
|
||||
* @param name name of object
|
||||
*/
|
||||
void setName(const char* name);
|
||||
/**
|
||||
* Sets name for object
|
||||
*
|
||||
* @param name name of object
|
||||
*/
|
||||
void setName(const char* name);
|
||||
|
||||
/**
|
||||
* Gets name of object
|
||||
*
|
||||
* @return name of object
|
||||
*/
|
||||
const char* getName();
|
||||
/**
|
||||
* Gets name of object
|
||||
*
|
||||
* @return name of object
|
||||
*/
|
||||
const char* getName();
|
||||
|
||||
/**
|
||||
* Sets if the action will loop play.
|
||||
*
|
||||
* @param bLoop that if the action will loop play
|
||||
*/
|
||||
void setLoop(bool bLoop);
|
||||
/**
|
||||
* Sets if the action will loop play.
|
||||
*
|
||||
* @param bLoop that if the action will loop play
|
||||
*/
|
||||
void setLoop(bool bLoop);
|
||||
|
||||
/**
|
||||
* Gets if the action will loop play.
|
||||
*
|
||||
* @return that if the action will loop play
|
||||
*/
|
||||
bool getLoop();
|
||||
/**
|
||||
* Gets if the action will loop play.
|
||||
*
|
||||
* @return that if the action will loop play
|
||||
*/
|
||||
bool getLoop();
|
||||
|
||||
/**
|
||||
* Sets the time interval of frame.
|
||||
*
|
||||
* @param fTime the time interval of frame
|
||||
*/
|
||||
void setUnitTime(float fTime);
|
||||
/**
|
||||
* Sets the time interval of frame.
|
||||
*
|
||||
* @param fTime the time interval of frame
|
||||
*/
|
||||
void setUnitTime(float fTime);
|
||||
|
||||
/**
|
||||
* Gets the time interval of frame.
|
||||
*
|
||||
* @return the time interval of frame
|
||||
*/
|
||||
float getUnitTime();
|
||||
/**
|
||||
* Gets the time interval of frame.
|
||||
*
|
||||
* @return the time interval of frame
|
||||
*/
|
||||
float getUnitTime();
|
||||
|
||||
/**
|
||||
* Sets the current time of frame.
|
||||
*
|
||||
* @param fTime the current time of frame
|
||||
*/
|
||||
void setCurrentTime(float fTime);
|
||||
/**
|
||||
* Sets the current time of frame.
|
||||
*
|
||||
* @param fTime the current time of frame
|
||||
*/
|
||||
void setCurrentTime(float fTime);
|
||||
|
||||
/**
|
||||
* Gets the current time of frame.
|
||||
*
|
||||
* @return the current time of frame
|
||||
*/
|
||||
float getCurrentTime();
|
||||
/**
|
||||
* Gets the current time of frame.
|
||||
*
|
||||
* @return the current time of frame
|
||||
*/
|
||||
float getCurrentTime();
|
||||
|
||||
/**
|
||||
* Gets the total time of frame.
|
||||
*
|
||||
* @return the total time of frame
|
||||
*/
|
||||
float getTotalTime();
|
||||
/**
|
||||
* Gets the total time of frame.
|
||||
*
|
||||
* @return the total time of frame
|
||||
*/
|
||||
float getTotalTime();
|
||||
|
||||
/**
|
||||
* Return if the action is playing.
|
||||
*
|
||||
* @return true if the action is playing, false the otherwise
|
||||
*/
|
||||
bool isPlaying();
|
||||
/**
|
||||
* Return if the action is playing.
|
||||
*
|
||||
* @return true if the action is playing, false the otherwise
|
||||
*/
|
||||
bool isPlaying();
|
||||
|
||||
/**
|
||||
* Play the action.
|
||||
*/
|
||||
void play();
|
||||
/**
|
||||
* Play the action.
|
||||
*/
|
||||
void play();
|
||||
|
||||
/**
|
||||
* Play the action.
|
||||
*
|
||||
* @param func Action Call Back
|
||||
*/
|
||||
void play(cocos2d::CallFunc* func);
|
||||
/**
|
||||
* Play the action.
|
||||
*
|
||||
* @param func Action Call Back
|
||||
*/
|
||||
void play(cocos2d::CallFunc* func);
|
||||
|
||||
/**
|
||||
* Pause the action.
|
||||
*/
|
||||
void pause();
|
||||
/**
|
||||
* Pause the action.
|
||||
*/
|
||||
void pause();
|
||||
|
||||
/**
|
||||
* Stop the action.
|
||||
*/
|
||||
void stop();
|
||||
/**
|
||||
* Stop the action.
|
||||
*/
|
||||
void stop();
|
||||
|
||||
/**
|
||||
* Adds a ActionNode to play the action.
|
||||
*
|
||||
* @param node the ActionNode which will play the action
|
||||
*/
|
||||
void addActionNode(ActionNode* node);
|
||||
/**
|
||||
* Adds a ActionNode to play the action.
|
||||
*
|
||||
* @param node the ActionNode which will play the action
|
||||
*/
|
||||
void addActionNode(ActionNode* node);
|
||||
|
||||
/**
|
||||
* Removes a ActionNode which play the action.
|
||||
*
|
||||
* @param node the ActionNode which play the action
|
||||
*/
|
||||
void removeActionNode(ActionNode* node);
|
||||
/**
|
||||
* Removes a ActionNode which play the action.
|
||||
*
|
||||
* @param node the ActionNode which play the action
|
||||
*/
|
||||
void removeActionNode(ActionNode* node);
|
||||
|
||||
/*update frame method*/
|
||||
void updateToFrameByTime(float fTime);
|
||||
/*update frame method*/
|
||||
void updateToFrameByTime(float fTime);
|
||||
|
||||
/*init properties with a json dictionary*/
|
||||
void initWithDictionary(const rapidjson::Value& dic, cocos2d::Ref* root);
|
||||
/*init properties with a json dictionary*/
|
||||
void initWithDictionary(const rapidjson::Value& dic, cocos2d::Ref* root);
|
||||
|
||||
void initWithBinary(CocoLoader* cocoLoader, stExpCocoNode* pCocoNode, cocos2d::Ref* root);
|
||||
void initWithBinary(CocoLoader* cocoLoader, stExpCocoNode* pCocoNode, cocos2d::Ref* root);
|
||||
|
||||
|
||||
/*scheduler update function*/
|
||||
void simulationActionUpdate(float dt);
|
||||
/*scheduler update function*/
|
||||
void simulationActionUpdate(float dt);
|
||||
protected:
|
||||
int valueToInt(const std::string& value);
|
||||
bool valueToBool(const std::string& value);
|
||||
float valueToFloat(const std::string& value);
|
||||
|
||||
cocos2d::Vector<ActionNode*> _actionNodeList;
|
||||
std::string _name;
|
||||
bool _loop;
|
||||
bool _bPause;
|
||||
bool _bPlaying;
|
||||
float _fUnitTime;
|
||||
float _currentTime;
|
||||
cocos2d::Scheduler *_pScheduler;
|
||||
cocos2d::CallFunc *_CallBack;
|
||||
float _fTotalTime;
|
||||
cocos2d::Vector<ActionNode*> _actionNodeList;
|
||||
std::string _name;
|
||||
bool _loop;
|
||||
bool _bPause;
|
||||
bool _bPlaying;
|
||||
float _fUnitTime;
|
||||
float _currentTime;
|
||||
cocos2d::Scheduler *_pScheduler;
|
||||
cocos2d::CallFunc *_CallBack;
|
||||
float _fTotalTime;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -176,7 +176,7 @@ public:
|
|||
* @lua NA
|
||||
*/
|
||||
inline const cocos2d::BlendFunc &getBlendFunc(void) const override{ return _blendFunc; }
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Set contentsize and Calculate anchor point.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -75,7 +75,7 @@ public:
|
|||
*/
|
||||
static ArmatureAnimation *create(Armature *armature);
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ArmatureAnimation();
|
||||
|
@ -275,13 +275,13 @@ protected:
|
|||
//! Scale the animation speed
|
||||
float _speedScale;
|
||||
|
||||
MovementData *_movementData; //! MovementData save all MovementFrameDatas this animation used.
|
||||
MovementData *_movementData; //! MovementData save all MovementFrameDatas this animation used.
|
||||
|
||||
Armature *_armature; //! A weak reference of armature
|
||||
Armature *_armature; //! A weak reference of armature
|
||||
|
||||
std::string _movementID; //! Current movment's name
|
||||
std::string _movementID; //! Current movment's name
|
||||
|
||||
int _toIndex; //! The frame index in MovementData->m_pMovFrameDataArr, it's different from m_iFrameIndex.
|
||||
int _toIndex; //! The frame index in MovementData->m_pMovFrameDataArr, it's different from m_iFrameIndex.
|
||||
|
||||
cocos2d::Vector<Tween*> _tweenList;
|
||||
|
||||
|
|
|
@ -40,12 +40,12 @@ struct RelativeData
|
|||
};
|
||||
|
||||
/**
|
||||
* @brief format and manage armature configuration and armature animation
|
||||
* @brief format and manage armature configuration and armature animation
|
||||
*/
|
||||
class CC_STUDIO_DLL ArmatureDataManager : public cocos2d::Ref
|
||||
{
|
||||
public:
|
||||
/** @deprecated Use getInstance() instead */
|
||||
/** @deprecated Use getInstance() instead */
|
||||
CC_DEPRECATED_ATTRIBUTE static ArmatureDataManager *sharedArmatureDataManager() { return ArmatureDataManager::getInstance(); }
|
||||
|
||||
/** @deprecated Use destoryInstance() instead */
|
||||
|
@ -55,7 +55,7 @@ public:
|
|||
static void destroyInstance();
|
||||
|
||||
private:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ArmatureDataManager(void);
|
||||
|
@ -80,82 +80,82 @@ public:
|
|||
void addArmatureData(const std::string& id, ArmatureData *armatureData, const std::string& configFilePath = "");
|
||||
|
||||
/**
|
||||
* @brief get armature data
|
||||
* @param id the id of the armature data you want to get
|
||||
* @return ArmatureData *
|
||||
* @brief get armature data
|
||||
* @param id the id of the armature data you want to get
|
||||
* @return ArmatureData *
|
||||
*/
|
||||
ArmatureData *getArmatureData(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief remove armature data
|
||||
* @param id the id of the armature data you want to get
|
||||
* @brief remove armature data
|
||||
* @param id the id of the armature data you want to get
|
||||
*/
|
||||
void removeArmatureData(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief add animation data
|
||||
* @param id the id of the animation data
|
||||
* @brief add animation data
|
||||
* @param id the id of the animation data
|
||||
* @return AnimationData *
|
||||
*/
|
||||
void addAnimationData(const std::string& id, AnimationData *animationData, const std::string& configFilePath = "");
|
||||
|
||||
/**
|
||||
* @brief get animation data from _animationDatas(Dictionary)
|
||||
* @param id the id of the animation data you want to get
|
||||
* @brief get animation data from _animationDatas(Dictionary)
|
||||
* @param id the id of the animation data you want to get
|
||||
* @return AnimationData *
|
||||
*/
|
||||
AnimationData *getAnimationData(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief remove animation data
|
||||
* @param id the id of the animation data
|
||||
* @brief remove animation data
|
||||
* @param id the id of the animation data
|
||||
*/
|
||||
void removeAnimationData(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief add texture data
|
||||
* @param id the id of the texture data
|
||||
* @brief add texture data
|
||||
* @param id the id of the texture data
|
||||
* @return TextureData *
|
||||
*/
|
||||
void addTextureData(const std::string& id, TextureData *textureData, const std::string& configFilePath = "");
|
||||
|
||||
/**
|
||||
* @brief get texture data
|
||||
* @param id the id of the texture data you want to get
|
||||
* @brief get texture data
|
||||
* @param id the id of the texture data you want to get
|
||||
* @return TextureData *
|
||||
*/
|
||||
TextureData *getTextureData(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief remove texture data
|
||||
* @param id the id of the texture data you want to get
|
||||
* @brief remove texture data
|
||||
* @param id the id of the texture data you want to get
|
||||
*/
|
||||
void removeTextureData(const std::string& id);
|
||||
|
||||
/**
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
*/
|
||||
void addArmatureFileInfo(const std::string& configFilePath);
|
||||
|
||||
/**
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
* It will load data in a new thread
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
* It will load data in a new thread
|
||||
*/
|
||||
void addArmatureFileInfoAsync(const std::string& configFilePath, cocos2d::Ref *target, cocos2d::SEL_SCHEDULE selector);
|
||||
|
||||
/**
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
*/
|
||||
void addArmatureFileInfo(const std::string& imagePath, const std::string& plistPath, const std::string& configFilePath);
|
||||
|
||||
/**
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
* It will load data in a new thread
|
||||
* @brief Add ArmatureFileInfo, it is managed by ArmatureDataManager.
|
||||
* It will load data in a new thread
|
||||
*/
|
||||
void addArmatureFileInfoAsync(const std::string& imagePath, const std::string& plistPath, const std::string& configFilePath, cocos2d::Ref *target, cocos2d::SEL_SCHEDULE selector);
|
||||
|
||||
/**
|
||||
* @brief Add sprite frame to CCSpriteFrameCache, it will save display name and it's relative image name
|
||||
* @brief Add sprite frame to CCSpriteFrameCache, it will save display name and it's relative image name
|
||||
*/
|
||||
void addSpriteFrameFromFile(const std::string& plistPath, const std::string& imagePath, const std::string& configFilePath = "");
|
||||
|
||||
|
@ -163,7 +163,7 @@ public:
|
|||
|
||||
|
||||
/**
|
||||
* @brief Juge whether or not need auto load sprite file
|
||||
* @brief Juge whether or not need auto load sprite file
|
||||
*/
|
||||
bool isAutoLoadSpriteFile();
|
||||
|
||||
|
@ -177,23 +177,23 @@ protected:
|
|||
RelativeData *getRelativeData(const std::string& configFilePath);
|
||||
private:
|
||||
/**
|
||||
* @brief save amature datas
|
||||
* @key std::string
|
||||
* @value ArmatureData *
|
||||
* @brief save amature datas
|
||||
* @key std::string
|
||||
* @value ArmatureData *
|
||||
*/
|
||||
cocos2d::Map<std::string, ArmatureData*> _armarureDatas;
|
||||
|
||||
/**
|
||||
* @brief save animation datas
|
||||
* @key std::string
|
||||
* @value AnimationData *
|
||||
* @brief save animation datas
|
||||
* @key std::string
|
||||
* @value AnimationData *
|
||||
*/
|
||||
cocos2d::Map<std::string, AnimationData*> _animationDatas;
|
||||
|
||||
/**
|
||||
* @brief save texture datas
|
||||
* @key std::string
|
||||
* @value TextureData *
|
||||
* @brief save texture datas
|
||||
* @key std::string
|
||||
* @value TextureData *
|
||||
*/
|
||||
cocos2d::Map<std::string, TextureData*> _textureDatas;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -40,7 +40,7 @@ class CC_STUDIO_DLL BatchNode : public cocos2d::Node
|
|||
public:
|
||||
static BatchNode *create();
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
BatchNode();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -101,7 +101,7 @@ public:
|
|||
|
||||
/**
|
||||
* Add a child to this bone, and it will let this child call setParent(Bone *parent) function to set self to it's parent
|
||||
* @param child the child you want to add
|
||||
* @param child the child you want to add
|
||||
*/
|
||||
void addChildBone(Bone *child);
|
||||
|
||||
|
@ -130,7 +130,7 @@ public:
|
|||
|
||||
/**
|
||||
* Removes a child Bone
|
||||
* @param bone the bone you want to remove
|
||||
* @param bone the bone you want to remove
|
||||
*/
|
||||
void removeChildBone(Bone *bone, bool recursion);
|
||||
|
||||
|
@ -227,20 +227,20 @@ protected:
|
|||
DisplayManager *_displayManager;
|
||||
|
||||
/*
|
||||
* When Armature play an animation, if there is not a MovementBoneData of this bone in this MovementData, this bone will be hidden.
|
||||
* Set IgnoreMovementBoneData to true, then this bone will also be shown.
|
||||
* When Armature play an animation, if there is not a MovementBoneData of this bone in this MovementData, this bone will be hidden.
|
||||
* Set IgnoreMovementBoneData to true, then this bone will also be shown.
|
||||
*/
|
||||
bool _ignoreMovementBoneData;
|
||||
|
||||
cocos2d::BlendFunc _blendFunc;
|
||||
bool _blendDirty;
|
||||
|
||||
Tween *_tween; //! Calculate tween effect
|
||||
Tween *_tween; //! Calculate tween effect
|
||||
|
||||
//! Used for making tween effect in every frame
|
||||
FrameData *_tweenData;
|
||||
|
||||
Bone *_parentBone; //! A weak reference to its parent
|
||||
Bone *_parentBone; //! A weak reference to its parent
|
||||
bool _boneTransformDirty; //! Whether or not transform dirty
|
||||
|
||||
//! self Transform, use this to change display's state
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -137,7 +137,7 @@ public:
|
|||
static ColliderDetector *create();
|
||||
static ColliderDetector *create(Bone *bone);
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ColliderDetector();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -59,16 +59,16 @@ public:
|
|||
* @lua NA
|
||||
*/
|
||||
virtual void onExit() override;
|
||||
/**
|
||||
* @js NA
|
||||
* @lua NA
|
||||
*/
|
||||
virtual void onAdd() override;
|
||||
/**
|
||||
* @js NA
|
||||
* @lua NA
|
||||
*/
|
||||
virtual void onRemove() override;
|
||||
/**
|
||||
* @js NA
|
||||
* @lua NA
|
||||
*/
|
||||
virtual void onAdd() override;
|
||||
/**
|
||||
* @js NA
|
||||
* @lua NA
|
||||
*/
|
||||
virtual void onRemove() override;
|
||||
virtual bool isEnabled() const override;
|
||||
virtual void setEnabled(bool b) override;
|
||||
virtual bool serialize(void* r) override;
|
||||
|
@ -108,8 +108,8 @@ public:
|
|||
void setLoop(bool bLoop);
|
||||
bool isLoop();
|
||||
private:
|
||||
std::string _filePath;
|
||||
bool _loop;
|
||||
std::string _filePath;
|
||||
bool _loop;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -56,44 +56,44 @@ class CC_STUDIO_DLL DataReaderHelper : cocos2d::Ref
|
|||
{
|
||||
protected:
|
||||
|
||||
enum ConfigType
|
||||
{
|
||||
DragonBone_XML,
|
||||
CocoStudio_JSON,
|
||||
enum ConfigType
|
||||
{
|
||||
DragonBone_XML,
|
||||
CocoStudio_JSON,
|
||||
CocoStudio_Binary
|
||||
};
|
||||
};
|
||||
|
||||
typedef struct _AsyncStruct
|
||||
{
|
||||
std::string filename;
|
||||
std::string fileContent;
|
||||
ConfigType configType;
|
||||
std::string baseFilePath;
|
||||
cocos2d::Ref *target;
|
||||
cocos2d::SEL_SCHEDULE selector;
|
||||
bool autoLoadSpriteFile;
|
||||
typedef struct _AsyncStruct
|
||||
{
|
||||
std::string filename;
|
||||
std::string fileContent;
|
||||
ConfigType configType;
|
||||
std::string baseFilePath;
|
||||
cocos2d::Ref *target;
|
||||
cocos2d::SEL_SCHEDULE selector;
|
||||
bool autoLoadSpriteFile;
|
||||
|
||||
std::string imagePath;
|
||||
std::string plistPath;
|
||||
} AsyncStruct;
|
||||
} AsyncStruct;
|
||||
|
||||
typedef struct _DataInfo
|
||||
{
|
||||
AsyncStruct *asyncStruct;
|
||||
std::queue<std::string> configFileQueue;
|
||||
typedef struct _DataInfo
|
||||
{
|
||||
AsyncStruct *asyncStruct;
|
||||
std::queue<std::string> configFileQueue;
|
||||
float contentScale;
|
||||
std::string filename;
|
||||
std::string baseFilePath;
|
||||
float flashToolVersion;
|
||||
float cocoStudioVersion;
|
||||
} DataInfo;
|
||||
} DataInfo;
|
||||
|
||||
public:
|
||||
|
||||
/** @deprecated Use getInstance() instead */
|
||||
CC_DEPRECATED_ATTRIBUTE static DataReaderHelper *sharedDataReaderHelper() { return DataReaderHelper::getInstance(); }
|
||||
/** @deprecated Use getInstance() instead */
|
||||
CC_DEPRECATED_ATTRIBUTE static DataReaderHelper *sharedDataReaderHelper() { return DataReaderHelper::getInstance(); }
|
||||
|
||||
static DataReaderHelper *getInstance();
|
||||
static DataReaderHelper *getInstance();
|
||||
|
||||
/**
|
||||
* Scale the position data, used for multiresolution adapter
|
||||
|
@ -104,10 +104,10 @@ public:
|
|||
|
||||
static void purge();
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
DataReaderHelper();
|
||||
DataReaderHelper();
|
||||
/**
|
||||
* @js NA
|
||||
* @lua NA
|
||||
|
@ -179,48 +179,48 @@ public:
|
|||
|
||||
// for binary decode
|
||||
public:
|
||||
static void addDataFromBinaryCache(const char *fileContent, DataInfo *dataInfo = nullptr);
|
||||
static ArmatureData *decodeArmature(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static BoneData *decodeBone(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static DisplayData *decodeBoneDisplay(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static AnimationData *decodeAnimation(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static MovementData *decodeMovement(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static void addDataFromBinaryCache(const char *fileContent, DataInfo *dataInfo = nullptr);
|
||||
static ArmatureData *decodeArmature(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static BoneData *decodeBone(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static DisplayData *decodeBoneDisplay(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static AnimationData *decodeAnimation(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static MovementData *decodeMovement(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
|
||||
static MovementBoneData *decodeMovementBone(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static FrameData *decodeFrame(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static MovementBoneData *decodeMovementBone(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static FrameData *decodeFrame(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
|
||||
static TextureData *decodeTexture(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode);
|
||||
static ContourData *decodeContour(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode);
|
||||
static TextureData *decodeTexture(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode);
|
||||
static ContourData *decodeContour(CocoLoader *cocoLoader, stExpCocoNode *pCocoNode);
|
||||
|
||||
static void decodeNode(BaseData *node, CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
static void decodeNode(BaseData *node, CocoLoader *cocoLoader, stExpCocoNode *pCocoNode, DataInfo *dataInfo);
|
||||
|
||||
protected:
|
||||
void loadData();
|
||||
void loadData();
|
||||
|
||||
|
||||
|
||||
|
||||
std::condition_variable _sleepCondition;
|
||||
std::condition_variable _sleepCondition;
|
||||
|
||||
std::thread *_loadingThread;
|
||||
std::thread *_loadingThread;
|
||||
|
||||
std::mutex _sleepMutex;
|
||||
std::mutex _sleepMutex;
|
||||
|
||||
std::mutex _asyncStructQueueMutex;
|
||||
std::mutex _dataInfoMutex;
|
||||
std::mutex _asyncStructQueueMutex;
|
||||
std::mutex _dataInfoMutex;
|
||||
|
||||
std::mutex _addDataMutex;
|
||||
std::mutex _addDataMutex;
|
||||
|
||||
std::mutex _getFileMutex;
|
||||
|
||||
|
||||
unsigned long _asyncRefCount;
|
||||
unsigned long _asyncRefTotalCount;
|
||||
|
||||
unsigned long _asyncRefCount;
|
||||
unsigned long _asyncRefTotalCount;
|
||||
|
||||
bool need_quit;
|
||||
bool need_quit;
|
||||
|
||||
std::queue<AsyncStruct *> *_asyncStructQueue;
|
||||
std::queue<DataInfo *> *_dataQueue;
|
||||
std::queue<AsyncStruct *> *_asyncStructQueue;
|
||||
std::queue<DataInfo *> *_dataQueue;
|
||||
|
||||
static std::vector<std::string> _configFileList;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -38,28 +38,28 @@ THE SOFTWARE.
|
|||
|
||||
#define CC_CREATE_NO_PARAM_NO_INIT(varType)\
|
||||
public: \
|
||||
static inline varType *create(void){ \
|
||||
varType *var = new varType();\
|
||||
if (var)\
|
||||
static inline varType *create(void){ \
|
||||
varType *var = new varType();\
|
||||
if (var)\
|
||||
{\
|
||||
var->autorelease();\
|
||||
return var;\
|
||||
var->autorelease();\
|
||||
return var;\
|
||||
}\
|
||||
CC_SAFE_DELETE(var);\
|
||||
return nullptr;\
|
||||
CC_SAFE_DELETE(var);\
|
||||
return nullptr;\
|
||||
}
|
||||
|
||||
#define CC_CREATE_NO_PARAM(varType)\
|
||||
public: \
|
||||
static inline varType *create(void){ \
|
||||
varType *var = new varType();\
|
||||
if (var && var->init())\
|
||||
static inline varType *create(void){ \
|
||||
varType *var = new varType();\
|
||||
if (var && var->init())\
|
||||
{\
|
||||
var->autorelease();\
|
||||
return var;\
|
||||
var->autorelease();\
|
||||
return var;\
|
||||
}\
|
||||
CC_SAFE_DELETE(var);\
|
||||
return nullptr;\
|
||||
CC_SAFE_DELETE(var);\
|
||||
return nullptr;\
|
||||
}
|
||||
|
||||
namespace cocostudio {
|
||||
|
@ -74,7 +74,7 @@ class CC_STUDIO_DLL BaseData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(BaseData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
BaseData();
|
||||
|
@ -101,9 +101,9 @@ public:
|
|||
virtual void setColor(const cocos2d::Color4B &color);
|
||||
virtual cocos2d::Color4B getColor();
|
||||
public:
|
||||
float x; //! position x attribute
|
||||
float y; //! position y attribute
|
||||
int zOrder; //! zorder attribute, used to order the Bone's depth order
|
||||
float x; //! position x attribute
|
||||
float y; //! position y attribute
|
||||
int zOrder; //! zorder attribute, used to order the Bone's depth order
|
||||
|
||||
/**
|
||||
* x y skewX skewY scaleX scaleY used to calculate transform matrix
|
||||
|
@ -145,7 +145,7 @@ public:
|
|||
|
||||
static const std::string changeDisplayToTexture(const std::string& displayName);
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
DisplayData();
|
||||
|
@ -157,7 +157,7 @@ public:
|
|||
|
||||
virtual void copy(DisplayData *displayData);
|
||||
|
||||
DisplayType displayType; //! mark which type your display is
|
||||
DisplayType displayType; //! mark which type your display is
|
||||
std::string displayName;
|
||||
};
|
||||
|
||||
|
@ -171,7 +171,7 @@ class CC_STUDIO_DLL SpriteDisplayData : public DisplayData
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(SpriteDisplayData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
SpriteDisplayData();
|
||||
|
@ -195,7 +195,7 @@ class CC_STUDIO_DLL ArmatureDisplayData : public DisplayData
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(ArmatureDisplayData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ArmatureDisplayData();
|
||||
|
@ -215,7 +215,7 @@ class CC_STUDIO_DLL ParticleDisplayData : public DisplayData
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(ParticleDisplayData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ParticleDisplayData();
|
||||
|
@ -240,7 +240,7 @@ class CC_STUDIO_DLL BoneData : public BaseData
|
|||
public:
|
||||
CC_CREATE_NO_PARAM(BoneData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
BoneData(void);
|
||||
|
@ -274,7 +274,7 @@ class CC_STUDIO_DLL ArmatureData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM(ArmatureData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ArmatureData();
|
||||
|
@ -320,7 +320,7 @@ class CC_STUDIO_DLL FrameData : public BaseData
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(FrameData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
FrameData();
|
||||
|
@ -367,7 +367,7 @@ class CC_STUDIO_DLL MovementBoneData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM(MovementBoneData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
MovementBoneData();
|
||||
|
@ -399,7 +399,7 @@ class CC_STUDIO_DLL MovementData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(MovementData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
MovementData(void);
|
||||
|
@ -414,7 +414,7 @@ public:
|
|||
public:
|
||||
std::string name;
|
||||
int duration; //! the frames this movement will last
|
||||
float scale; //! scale this movement
|
||||
float scale; //! scale this movement
|
||||
|
||||
/**
|
||||
* Change to this movement will last durationTo frames. Use this effect can avoid too suddenly changing.
|
||||
|
@ -441,9 +441,9 @@ public:
|
|||
cocos2d::tweenfunc::TweenType tweenEasing;
|
||||
|
||||
/**
|
||||
* @brief save movment bone data
|
||||
* @key const std::string&
|
||||
* @value MovementBoneData *
|
||||
* @brief save movment bone data
|
||||
* @key const std::string&
|
||||
* @value MovementBoneData *
|
||||
*/
|
||||
cocos2d::Map<std::string, MovementBoneData*> movBoneDataDic;
|
||||
};
|
||||
|
@ -461,7 +461,7 @@ class CC_STUDIO_DLL AnimationData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM_NO_INIT(AnimationData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
AnimationData(void);
|
||||
|
@ -492,7 +492,7 @@ class CC_STUDIO_DLL ContourData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM(ContourData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
ContourData();
|
||||
|
@ -505,7 +505,7 @@ public:
|
|||
virtual bool init();
|
||||
virtual void addVertex(cocos2d::Vec2 &vertex);
|
||||
public:
|
||||
std::vector<cocos2d::Vec2> vertexList; //! Save contour vertex info, vertex saved in a Vec2
|
||||
std::vector<cocos2d::Vec2> vertexList; //! Save contour vertex info, vertex saved in a Vec2
|
||||
};
|
||||
|
||||
|
||||
|
@ -521,7 +521,7 @@ class CC_STUDIO_DLL TextureData : public cocos2d::Ref
|
|||
public:
|
||||
CC_CREATE_NO_PARAM(TextureData)
|
||||
public:
|
||||
/**
|
||||
/**
|
||||
* @js ctor
|
||||
*/
|
||||
TextureData();
|
||||
|
@ -537,13 +537,13 @@ public:
|
|||
ContourData *getContourData(int index);
|
||||
public:
|
||||
|
||||
float height; //! The texture's width, height
|
||||
float height; //! The texture's width, height
|
||||
float width;
|
||||
|
||||
float pivotX; //! The texture's anchor point
|
||||
float pivotX; //! The texture's anchor point
|
||||
float pivotY;
|
||||
|
||||
std::string name; //! The texture's name
|
||||
std::string name; //! The texture's name
|
||||
|
||||
cocos2d::Vector<ContourData*> contourDataList;
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -61,11 +61,11 @@ public:
|
|||
* If index already have a display, then replace it.
|
||||
* If index is current display index, then also change display to _index
|
||||
*
|
||||
* @param displayData it include the display information, like DisplayType.
|
||||
* If you want to create a sprite display, then create a SpriteDisplayData param
|
||||
* @param displayData it include the display information, like DisplayType.
|
||||
* If you want to create a sprite display, then create a SpriteDisplayData param
|
||||
*
|
||||
* @param index the index of the display you want to replace or add to
|
||||
* -1 : append display from back
|
||||
* @param index the index of the display you want to replace or add to
|
||||
* -1 : append display from back
|
||||
*/
|
||||
void addDisplay(DisplayData *displayData, int index);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2015 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -44,7 +44,7 @@ namespace cocostudio {
|
|||
class CC_STUDIO_DLL SpriteFrameCacheHelper
|
||||
{
|
||||
public:
|
||||
/** @deprecated Use getInstance() instead */
|
||||
/** @deprecated Use getInstance() instead */
|
||||
CC_DEPRECATED_ATTRIBUTE static SpriteFrameCacheHelper *sharedSpriteFrameCacheHelper(){ return SpriteFrameCacheHelper::getInstance(); }
|
||||
|
||||
static SpriteFrameCacheHelper *getInstance();
|
||||
|
@ -53,7 +53,7 @@ public:
|
|||
public:
|
||||
|
||||
/**
|
||||
* @brief Add sprite frame to CCSpriteFrameCache, it will save display name and it's relative image name
|
||||
* @brief Add sprite frame to CCSpriteFrameCache, it will save display name and it's relative image name
|
||||
*/
|
||||
void addSpriteFrameFromFile(const std::string& plistPath, const std::string& imagePath);
|
||||
void removeSpriteFrameFromFile(const std::string& plistPath);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -140,7 +140,7 @@ protected:
|
|||
int _totalDuration;
|
||||
|
||||
|
||||
int _fromIndex; //! The current frame index in FrameList of MovementBoneData, it's different from m_iFrameIndex
|
||||
int _fromIndex; //! The current frame index in FrameList of MovementBoneData, it's different from m_iFrameIndex
|
||||
int _toIndex; //! The next frame index in FrameList of MovementBoneData, it's different from m_iFrameIndex
|
||||
|
||||
ArmatureAnimation *_animation;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __CCCOCOSSTUDIO_H__
|
||||
#ifndef __CCCOCOSSTUDIO_H__
|
||||
#define __CCCOCOSSTUDIO_H__
|
||||
|
||||
#if (defined(WIN32) && defined(_WINDOWS)) || defined(WINRT) || defined(WP8)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
@ -44,7 +44,7 @@ namespace cocostudio
|
|||
static void destroyInstance();
|
||||
|
||||
virtual void setPropsFromJsonDictionary(cocos2d::ui::Widget* widget, const rapidjson::Value& options);
|
||||
virtual void setPropsFromBinary(cocos2d::ui::Widget* widget, CocoLoader* cocoLoader, stExpCocoNode* pCocoNode) ;
|
||||
virtual void setPropsFromBinary(cocos2d::ui::Widget* widget, CocoLoader* cocoLoader, stExpCocoNode* pCocoNode) ;
|
||||
flatbuffers::Offset<flatbuffers::Table> createOptionsWithFlatBuffers(const tinyxml2::XMLElement* objectData,
|
||||
flatbuffers::FlatBufferBuilder* builder);
|
||||
void setPropsWithFlatBuffers(cocos2d::Node* node, const flatbuffers::Table* scrollViewOptions);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/****************************************************************************
|
||||
/****************************************************************************
|
||||
Copyright (c) 2014 cocos2d-x.org
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue