mirror of
https://github.com/love2d/love.git
synced 2026-08-20 20:49:54 +02:00
Add ChainShape
--HG-- branch : box2d-update
This commit is contained in:
@@ -211,6 +211,8 @@
|
|||||||
A9CF0E8610B9EB1000E6F37E /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9CF0E8510B9EB1000E6F37E /* utf8.cpp */; };
|
A9CF0E8610B9EB1000E6F37E /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9CF0E8510B9EB1000E6F37E /* utf8.cpp */; };
|
||||||
A9D1D20214224E1300A8BC2F /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D1D20114224E1300A8BC2F /* RopeJoint.cpp */; };
|
A9D1D20214224E1300A8BC2F /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D1D20114224E1300A8BC2F /* RopeJoint.cpp */; };
|
||||||
A9D1D2041422578C00A8BC2F /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D1D2031422578A00A8BC2F /* wrap_RopeJoint.cpp */; };
|
A9D1D2041422578C00A8BC2F /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D1D2031422578A00A8BC2F /* wrap_RopeJoint.cpp */; };
|
||||||
|
A9D1D20A1422959100A8BC2F /* ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D1D2091422959100A8BC2F /* ChainShape.cpp */; };
|
||||||
|
A9D1D20D14229B6500A8BC2F /* wrap_ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D1D20C14229B5800A8BC2F /* wrap_ChainShape.cpp */; };
|
||||||
A9D307EA106635C3004FEDF8 /* physfs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; };
|
A9D307EA106635C3004FEDF8 /* physfs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; };
|
||||||
A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; };
|
A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; };
|
||||||
A9DEC1C11046EFA70049C70C /* Love.icns in Resources */ = {isa = PBXBuildFile; fileRef = A9DEC1BF1046EFA60049C70C /* Love.icns */; };
|
A9DEC1C11046EFA70049C70C /* Love.icns in Resources */ = {isa = PBXBuildFile; fileRef = A9DEC1BF1046EFA60049C70C /* Love.icns */; };
|
||||||
@@ -675,6 +677,10 @@
|
|||||||
A9D1D20114224E1300A8BC2F /* RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RopeJoint.cpp; sourceTree = "<group>"; };
|
A9D1D20114224E1300A8BC2F /* RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RopeJoint.cpp; sourceTree = "<group>"; };
|
||||||
A9D1D2031422578A00A8BC2F /* wrap_RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RopeJoint.cpp; sourceTree = "<group>"; };
|
A9D1D2031422578A00A8BC2F /* wrap_RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RopeJoint.cpp; sourceTree = "<group>"; };
|
||||||
A9D1D2051422579500A8BC2F /* wrap_RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RopeJoint.h; sourceTree = "<group>"; };
|
A9D1D2051422579500A8BC2F /* wrap_RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RopeJoint.h; sourceTree = "<group>"; };
|
||||||
|
A9D1D2091422959100A8BC2F /* ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChainShape.cpp; sourceTree = "<group>"; };
|
||||||
|
A9D1D20B142295A800A8BC2F /* ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChainShape.h; sourceTree = "<group>"; };
|
||||||
|
A9D1D20C14229B5800A8BC2F /* wrap_ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ChainShape.cpp; sourceTree = "<group>"; };
|
||||||
|
A9D1D20E14229B7300A8BC2F /* wrap_ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ChainShape.h; sourceTree = "<group>"; };
|
||||||
A9D307E9106635C3004FEDF8 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = "<absolute>"; };
|
A9D307E9106635C3004FEDF8 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = "<absolute>"; };
|
||||||
A9DEC1BF1046EFA60049C70C /* Love.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Love.icns; path = icons/Love.icns; sourceTree = "<group>"; };
|
A9DEC1BF1046EFA60049C70C /* Love.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Love.icns; path = icons/Love.icns; sourceTree = "<group>"; };
|
||||||
A9DEC1C01046EFA70049C70C /* LoveDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = LoveDocument.icns; path = icons/LoveDocument.icns; sourceTree = "<group>"; };
|
A9DEC1C01046EFA70049C70C /* LoveDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = LoveDocument.icns; path = icons/LoveDocument.icns; sourceTree = "<group>"; };
|
||||||
@@ -1201,6 +1207,8 @@
|
|||||||
A93E6AEB10420AC7007D418B /* Body.cpp */,
|
A93E6AEB10420AC7007D418B /* Body.cpp */,
|
||||||
A93E6AEC10420AC7007D418B /* Body.h */,
|
A93E6AEC10420AC7007D418B /* Body.h */,
|
||||||
A986EBC3132CE6D800F048C8 /* Box2D */,
|
A986EBC3132CE6D800F048C8 /* Box2D */,
|
||||||
|
A9D1D2091422959100A8BC2F /* ChainShape.cpp */,
|
||||||
|
A9D1D20B142295A800A8BC2F /* ChainShape.h */,
|
||||||
A93E6AED10420AC7007D418B /* CircleShape.cpp */,
|
A93E6AED10420AC7007D418B /* CircleShape.cpp */,
|
||||||
A93E6AEE10420AC7007D418B /* CircleShape.h */,
|
A93E6AEE10420AC7007D418B /* CircleShape.h */,
|
||||||
A93E6AEF10420AC7007D418B /* Contact.cpp */,
|
A93E6AEF10420AC7007D418B /* Contact.cpp */,
|
||||||
@@ -1242,6 +1250,8 @@
|
|||||||
A93E6B4F10420ACA007D418B /* World.h */,
|
A93E6B4F10420ACA007D418B /* World.h */,
|
||||||
A93E6B5010420ACA007D418B /* wrap_Body.cpp */,
|
A93E6B5010420ACA007D418B /* wrap_Body.cpp */,
|
||||||
A93E6B5110420ACA007D418B /* wrap_Body.h */,
|
A93E6B5110420ACA007D418B /* wrap_Body.h */,
|
||||||
|
A9D1D20C14229B5800A8BC2F /* wrap_ChainShape.cpp */,
|
||||||
|
A9D1D20E14229B7300A8BC2F /* wrap_ChainShape.h */,
|
||||||
A93E6B5210420ACA007D418B /* wrap_CircleShape.cpp */,
|
A93E6B5210420ACA007D418B /* wrap_CircleShape.cpp */,
|
||||||
A93E6B5310420ACA007D418B /* wrap_CircleShape.h */,
|
A93E6B5310420ACA007D418B /* wrap_CircleShape.h */,
|
||||||
A93E6B5410420ACA007D418B /* wrap_Contact.cpp */,
|
A93E6B5410420ACA007D418B /* wrap_Contact.cpp */,
|
||||||
@@ -1810,6 +1820,8 @@
|
|||||||
A96F41A71412C92B0067FE9A /* wrap_EdgeShape.cpp in Sources */,
|
A96F41A71412C92B0067FE9A /* wrap_EdgeShape.cpp in Sources */,
|
||||||
A9D1D20214224E1300A8BC2F /* RopeJoint.cpp in Sources */,
|
A9D1D20214224E1300A8BC2F /* RopeJoint.cpp in Sources */,
|
||||||
A9D1D2041422578C00A8BC2F /* wrap_RopeJoint.cpp in Sources */,
|
A9D1D2041422578C00A8BC2F /* wrap_RopeJoint.cpp in Sources */,
|
||||||
|
A9D1D20A1422959100A8BC2F /* ChainShape.cpp in Sources */,
|
||||||
|
A9D1D20D14229B6500A8BC2F /* wrap_ChainShape.cpp in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2006-2011 LOVE Development Team
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "ChainShape.h"
|
||||||
|
|
||||||
|
// Module
|
||||||
|
#include "Body.h"
|
||||||
|
#include "World.h"
|
||||||
|
#include "Physics.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace physics
|
||||||
|
{
|
||||||
|
namespace box2d
|
||||||
|
{
|
||||||
|
ChainShape::ChainShape(b2ChainShape * c, bool loop)
|
||||||
|
: loop(loop)
|
||||||
|
{
|
||||||
|
shape = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChainShape::~ChainShape()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChainShape::setNextVertex(float x, float y)
|
||||||
|
{
|
||||||
|
if (loop) {
|
||||||
|
throw love::Exception("Physics error: Can't call setNextVertex on a loop ChainShape");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
b2Vec2 v(x, y);
|
||||||
|
b2ChainShape * c = (b2ChainShape *)shape;
|
||||||
|
c->SetNextVertex(Physics::scaleDown(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChainShape::setPrevVertex(float x, float y)
|
||||||
|
{
|
||||||
|
if (loop) {
|
||||||
|
throw love::Exception("Physics error: Can't call setPrevVertex on a loop ChainShape");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
b2Vec2 v(x, y);
|
||||||
|
b2ChainShape * c = (b2ChainShape *)shape;
|
||||||
|
c->SetNextVertex(Physics::scaleDown(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
EdgeShape * ChainShape::getChildEdge(int index) const
|
||||||
|
{
|
||||||
|
b2ChainShape * c = (b2ChainShape *)shape;
|
||||||
|
b2EdgeShape e;
|
||||||
|
c->GetChildEdge(&e, index);
|
||||||
|
return new EdgeShape(&e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ChainShape::getVertexCount() const
|
||||||
|
{
|
||||||
|
b2ChainShape * c = (b2ChainShape *)shape;
|
||||||
|
return c->GetVertexCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
b2Vec2 ChainShape::getVertex(int index) const
|
||||||
|
{
|
||||||
|
b2ChainShape * c = (b2ChainShape *)shape;
|
||||||
|
const b2Vec2 & v = c->GetVertex(index);
|
||||||
|
return Physics::scaleUp(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
const b2Vec2 * ChainShape::getVertices() const
|
||||||
|
{
|
||||||
|
b2ChainShape * c = (b2ChainShape *)shape;
|
||||||
|
return c->GetVertices();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // box2d
|
||||||
|
} // physics
|
||||||
|
} // love
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2006-2011 LOVE Development Team
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef LOVE_PHYSICS_BOX2D_CHAIN_SHAPE_H
|
||||||
|
#define LOVE_PHYSICS_BOX2D_CHAIN_SHAPE_H
|
||||||
|
|
||||||
|
// Module
|
||||||
|
#include "Shape.h"
|
||||||
|
#include "EdgeShape.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace physics
|
||||||
|
{
|
||||||
|
namespace box2d
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A ChainShape is a freeform collection of line segments.
|
||||||
|
**/
|
||||||
|
class ChainShape : public Shape
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
// True if this ChainShape is a loop.
|
||||||
|
bool loop;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new ChainShape from a Box2D chain shape.
|
||||||
|
* @param c The chain shape.
|
||||||
|
**/
|
||||||
|
ChainShape(b2ChainShape * c, bool loop = false);
|
||||||
|
|
||||||
|
virtual ~ChainShape();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establish connectivity to a vertex that follows
|
||||||
|
* the last vertex. Fails if called on a loop.
|
||||||
|
* @param x The x-coordinate of the vertex.
|
||||||
|
* @param y The y-coordinate of the vertex.
|
||||||
|
**/
|
||||||
|
void setNextVertex(float x, float y);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establish connectivity to a vertex that precedes
|
||||||
|
* the first vertex. Fails if called on a loop.
|
||||||
|
* @param x The x-coordinate of the vertex.
|
||||||
|
* @param y The y-coordinate of the vertex.
|
||||||
|
**/
|
||||||
|
void setPrevVertex(float x, float y);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a child EdgeShape.
|
||||||
|
* @param index The index of the child shape.
|
||||||
|
* @returns The specified child.
|
||||||
|
**/
|
||||||
|
EdgeShape * getChildEdge(int index) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of vertices in the shape.
|
||||||
|
* @returns The number of vertices in the shape.
|
||||||
|
**/
|
||||||
|
int getVertexCount() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the vertex at the given index.
|
||||||
|
* @param index The index of the vertex.
|
||||||
|
* @returns The specified vertex.
|
||||||
|
**/
|
||||||
|
b2Vec2 getVertex(int index) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all of the vertices.
|
||||||
|
* @returns The vertices the shape comprises.
|
||||||
|
**/
|
||||||
|
const b2Vec2 * getVertices() const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // box2d
|
||||||
|
} // physics
|
||||||
|
} // love
|
||||||
|
|
||||||
|
#endif // LOVE_PHYSICS_BOX2D_CHAIN_SHAPE_H
|
||||||
@@ -128,7 +128,7 @@ namespace box2d
|
|||||||
if(count < 3)
|
if(count < 3)
|
||||||
return luaL_error(L, "Polygon degenerated to less than three points.");
|
return luaL_error(L, "Polygon degenerated to less than three points.");
|
||||||
|
|
||||||
b2Vec2 vecs[] = new b2vec2[count];
|
b2Vec2 * vecs = new b2Vec2[count];
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
vecs[i].Set(convex_hull[i].x, convex_hull[i].y);
|
vecs[i].Set(convex_hull[i].x, convex_hull[i].y);
|
||||||
@@ -144,6 +144,38 @@ namespace box2d
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Physics::newChainShape(lua_State * L)
|
||||||
|
{
|
||||||
|
int argc = lua_gettop(L)-1; // first argument is looping
|
||||||
|
int vcount = (int)argc/2;
|
||||||
|
|
||||||
|
b2ChainShape s;
|
||||||
|
|
||||||
|
bool loop = luax_toboolean(L, 1);
|
||||||
|
|
||||||
|
b2Vec2 * vecs = new b2Vec2[vcount];
|
||||||
|
|
||||||
|
for(int i = 0;i<vcount;i++)
|
||||||
|
{
|
||||||
|
float x = (float)lua_tonumber(L, -2);
|
||||||
|
float y = (float)lua_tonumber(L, -1);
|
||||||
|
vecs[i].Set(x, y);
|
||||||
|
lua_pop(L, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loop)
|
||||||
|
s.CreateLoop(vecs, vcount);
|
||||||
|
else
|
||||||
|
s.CreateChain(vecs, vcount);
|
||||||
|
|
||||||
|
ChainShape * c = new ChainShape(&s);
|
||||||
|
delete[] vecs;
|
||||||
|
|
||||||
|
luax_newtype(L, "ChainShape", PHYSICS_CHAIN_SHAPE_T, (void*)c);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
DistanceJoint * Physics::newDistanceJoint(Body * body1, Body * body2, float x1, float y1, float x2, float y2, bool collideConnected)
|
DistanceJoint * Physics::newDistanceJoint(Body * body1, Body * body2, float x1, float y1, float x2, float y2, bool collideConnected)
|
||||||
{
|
{
|
||||||
return new DistanceJoint(body1, body2, x1, y1, x2, y2, collideConnected);
|
return new DistanceJoint(body1, body2, x1, y1, x2, y2, collideConnected);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "CircleShape.h"
|
#include "CircleShape.h"
|
||||||
#include "PolygonShape.h"
|
#include "PolygonShape.h"
|
||||||
#include "EdgeShape.h"
|
#include "EdgeShape.h"
|
||||||
|
#include "ChainShape.h"
|
||||||
#include "Joint.h"
|
#include "Joint.h"
|
||||||
#include "MouseJoint.h"
|
#include "MouseJoint.h"
|
||||||
#include "DistanceJoint.h"
|
#include "DistanceJoint.h"
|
||||||
@@ -156,6 +157,12 @@ namespace box2d
|
|||||||
**/
|
**/
|
||||||
int newPolygonShape(lua_State * L);
|
int newPolygonShape(lua_State * L);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new ChainShape.
|
||||||
|
* @param ... A variable number of vertices.
|
||||||
|
**/
|
||||||
|
int newChainShape(lua_State * L);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new DistanceJoint connecting body1 with body2.
|
* Creates a new DistanceJoint connecting body1 with body2.
|
||||||
* @param x1 Anchor1 along the x-axis. (World coordinates)
|
* @param x1 Anchor1 along the x-axis. (World coordinates)
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2006-2011 LOVE Development Team
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "wrap_ChainShape.h"
|
||||||
|
#include "Physics.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace physics
|
||||||
|
{
|
||||||
|
namespace box2d
|
||||||
|
{
|
||||||
|
ChainShape * luax_checkchainshape(lua_State * L, int idx)
|
||||||
|
{
|
||||||
|
return luax_checktype<ChainShape>(L, idx, "ChainShape", PHYSICS_CHAIN_SHAPE_T);
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_ChainShape_setNextVertex(lua_State * L)
|
||||||
|
{
|
||||||
|
ChainShape * c = luax_checkchainshape(L, 1);
|
||||||
|
float x = (float)luaL_checknumber(L, 2);
|
||||||
|
float y = (float)luaL_checknumber(L, 3);
|
||||||
|
c->setNextVertex(x, y);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_ChainShape_setPrevVertex(lua_State * L)
|
||||||
|
{
|
||||||
|
ChainShape * c = luax_checkchainshape(L, 1);
|
||||||
|
float x = (float)luaL_checknumber(L, 2);
|
||||||
|
float y = (float)luaL_checknumber(L, 3);
|
||||||
|
c->setPrevVertex(x, y);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_ChainShape_getChildEdge(lua_State * L)
|
||||||
|
{
|
||||||
|
ChainShape * c = luax_checkchainshape(L, 1);
|
||||||
|
int index = luaL_checkint(L, 2);
|
||||||
|
EdgeShape * e = c->getChildEdge(index);
|
||||||
|
luax_newtype(L, "EdgeShape", PHYSICS_EDGE_SHAPE_T, e);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_ChainShape_getVertexCount(lua_State * L)
|
||||||
|
{
|
||||||
|
ChainShape * c = luax_checkchainshape(L, 1);
|
||||||
|
int count = c->getVertexCount();
|
||||||
|
lua_pushinteger(L, count);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_ChainShape_getVertex(lua_State * L)
|
||||||
|
{
|
||||||
|
ChainShape * c = luax_checkchainshape(L, 1);
|
||||||
|
int index = luaL_checkint(L, 2);
|
||||||
|
b2Vec2 v = c->getVertex(index);
|
||||||
|
lua_pushnumber(L, v.x);
|
||||||
|
lua_pushnumber(L, v.y);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_ChainShape_getVertices(lua_State * L)
|
||||||
|
{
|
||||||
|
ChainShape * c = luax_checkchainshape(L, 1);
|
||||||
|
const b2Vec2 * verts = c->getVertices();
|
||||||
|
int count = c->getVertexCount();
|
||||||
|
lua_createtable(L, count*2, 0);
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
b2Vec2 v = Physics::scaleUp(verts[i]);
|
||||||
|
lua_pushnumber(L, v.x);
|
||||||
|
lua_rawseti(L, -2, i*2+1);
|
||||||
|
lua_pushnumber(L, v.y);
|
||||||
|
lua_rawseti(L, -2, i*2+2);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const luaL_Reg functions[] = {
|
||||||
|
{ "setNextVertex", w_ChainShape_setNextVertex },
|
||||||
|
{ "setPrevVertex", w_ChainShape_setPrevVertex },
|
||||||
|
{ "getChildEdge", w_ChainShape_getChildEdge },
|
||||||
|
{ "getVertexCount", w_ChainShape_getVertexCount },
|
||||||
|
{ "getVertex", w_ChainShape_getVertex },
|
||||||
|
{ "getVertices", w_ChainShape_getVertices },
|
||||||
|
// From Shape.
|
||||||
|
{ "getType", w_Shape_getType },
|
||||||
|
{ "getRadius", w_Shape_getRadius },
|
||||||
|
{ "getChildCount", w_Shape_getChildCount },
|
||||||
|
{ "testPoint", w_Shape_testPoint },
|
||||||
|
{ "rayCast", w_Shape_rayCast },
|
||||||
|
{ "computeAABB", w_Shape_computeAABB },
|
||||||
|
{ "computeMass", w_Shape_computeMass },
|
||||||
|
{ "destroy", w_Shape_destroy },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int luaopen_chainshape(lua_State * L)
|
||||||
|
{
|
||||||
|
return luax_register_type(L, "ChainShape", functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // box2d
|
||||||
|
} // physics
|
||||||
|
} // love
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2006-2011 LOVE Development Team
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef LOVE_PHYSICS_BOX2D_WRAP_CHAIN_SHAPE_H
|
||||||
|
#define LOVE_PHYSICS_BOX2D_WRAP_CHAIN_SHAPE_H
|
||||||
|
|
||||||
|
// LOVE
|
||||||
|
#include <common/runtime.h>
|
||||||
|
#include "wrap_Shape.h"
|
||||||
|
#include "ChainShape.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace physics
|
||||||
|
{
|
||||||
|
namespace box2d
|
||||||
|
{
|
||||||
|
ChainShape * luax_checkchainshape(lua_State * L, int idx);
|
||||||
|
|
||||||
|
int w_ChainShape_setNextVertex(lua_State * L);
|
||||||
|
int w_ChainShape_setPrevVertex(lua_State * L);
|
||||||
|
int w_ChainShape_getChildEdge(lua_State * L);
|
||||||
|
int w_ChainShape_getVertexCount(lua_State * L);
|
||||||
|
int w_ChainShape_getVertex(lua_State * L);
|
||||||
|
int w_ChainShape_getVertices(lua_State * L);
|
||||||
|
|
||||||
|
int luaopen_chainshape(lua_State * L);
|
||||||
|
|
||||||
|
} // box2d
|
||||||
|
} // physics
|
||||||
|
} // love
|
||||||
|
|
||||||
|
#endif // LOVE_PHYSICS_BOX2D_WRAP_CHAIN_SHAPE_H
|
||||||
@@ -128,6 +128,11 @@ namespace box2d
|
|||||||
return instance->newPolygonShape(L);
|
return instance->newPolygonShape(L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_newChainShape(lua_State * L)
|
||||||
|
{
|
||||||
|
return instance->newChainShape(L);
|
||||||
|
}
|
||||||
|
|
||||||
int w_newDistanceJoint(lua_State * L)
|
int w_newDistanceJoint(lua_State * L)
|
||||||
{
|
{
|
||||||
Body * body1 = luax_checktype<Body>(L, 1, "Body", PHYSICS_BODY_T);
|
Body * body1 = luax_checktype<Body>(L, 1, "Body", PHYSICS_BODY_T);
|
||||||
@@ -284,6 +289,7 @@ namespace box2d
|
|||||||
{ "newRectangleShape", w_newRectangleShape },
|
{ "newRectangleShape", w_newRectangleShape },
|
||||||
{ "newPolygonShape", w_newPolygonShape },
|
{ "newPolygonShape", w_newPolygonShape },
|
||||||
{ "newEdgeShape", w_newEdgeShape },
|
{ "newEdgeShape", w_newEdgeShape },
|
||||||
|
{ "newChainShape", w_newChainShape },
|
||||||
{ "newDistanceJoint", w_newDistanceJoint },
|
{ "newDistanceJoint", w_newDistanceJoint },
|
||||||
{ "newMouseJoint", w_newMouseJoint },
|
{ "newMouseJoint", w_newMouseJoint },
|
||||||
{ "newRevoluteJoint", w_newRevoluteJoint },
|
{ "newRevoluteJoint", w_newRevoluteJoint },
|
||||||
@@ -307,6 +313,7 @@ namespace box2d
|
|||||||
luaopen_circleshape,
|
luaopen_circleshape,
|
||||||
luaopen_polygonshape,
|
luaopen_polygonshape,
|
||||||
luaopen_edgeshape,
|
luaopen_edgeshape,
|
||||||
|
luaopen_chainshape,
|
||||||
luaopen_joint,
|
luaopen_joint,
|
||||||
luaopen_mousejoint,
|
luaopen_mousejoint,
|
||||||
luaopen_distancejoint,
|
luaopen_distancejoint,
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "wrap_CircleShape.h"
|
#include "wrap_CircleShape.h"
|
||||||
#include "wrap_PolygonShape.h"
|
#include "wrap_PolygonShape.h"
|
||||||
#include "wrap_EdgeShape.h"
|
#include "wrap_EdgeShape.h"
|
||||||
|
#include "wrap_ChainShape.h"
|
||||||
#include "wrap_Joint.h"
|
#include "wrap_Joint.h"
|
||||||
#include "wrap_MouseJoint.h"
|
#include "wrap_MouseJoint.h"
|
||||||
#include "wrap_DistanceJoint.h"
|
#include "wrap_DistanceJoint.h"
|
||||||
@@ -55,6 +56,7 @@ namespace box2d
|
|||||||
int w_newRectangleShape(lua_State * L);
|
int w_newRectangleShape(lua_State * L);
|
||||||
int w_newPolygonShape(lua_State * L);
|
int w_newPolygonShape(lua_State * L);
|
||||||
int w_newEdgeShape(lua_State * L);
|
int w_newEdgeShape(lua_State * L);
|
||||||
|
int w_newChainShape(lua_State * L);
|
||||||
int w_newDistanceJoint(lua_State * L);
|
int w_newDistanceJoint(lua_State * L);
|
||||||
int w_newMouseJoint(lua_State * L);
|
int w_newMouseJoint(lua_State * L);
|
||||||
int w_newRevoluteJoint(lua_State * L);
|
int w_newRevoluteJoint(lua_State * L);
|
||||||
|
|||||||
Reference in New Issue
Block a user