示例#1
0
	void PhysicsNode::readXml(const Xml *xml) {

		Node::readXml(xml);

		float mass = 0.0f;
		int body_type = BODY_BOX;

		xml->getChildData("body", body_type);
		xml->getChildData("mass", mass);
		xml->getChildData("render_body", render_body);
		xml->getChildData("object_2d", object_2d);

		body->setBody(BodyType(body_type));
		body->setMass(mass);

		const Xml *transform = xml->getChild("init_transform");

		if (transform != NULL) {
			transform->getArg("pos", init_pos);
			transform->getArg("rot", init_rot);
			transform->getArg("scale", init_scale);
			do_invalidate_matrix = false;
			setPos(init_pos);
			setRot(init_rot);
			setScale(init_scale);
			do_invalidate_matrix = true;
			invalidateMatrix();
		}

		invalidate();

	}
示例#2
0
	PhysicsNode &PhysicsNode::operator= (const PhysicsNode &o) {
		Node::operator= (o);
		body->setSize(o.body->getSize());
		body->setMass(o.body->getMass());
		body->setBody(o.body->getBody());
		render_body = o.render_body;
		set2d(o.object_2d);
		invalidateMatrix();
		return *this;
	}
Board::~Board() {

    invalidateMatrix();
    for (std::vector<Piece *>::iterator it = whitePieces.begin(); it != whitePieces.end(); ++it) {
        delete (*it);
    }

    for (std::vector<Piece *>::iterator it = blackPieces.begin(); it != blackPieces.end(); ++it) {
        delete (*it);
    }

}
示例#4
0
	void PhysicsNode::restore() {

		do_invalidate_matrix = false;
		setPos(init_pos);
		setRot(init_rot);
		setScale(init_scale);
		do_invalidate_matrix = true;

		do_init_state = false;
		invalidateMatrix();
		do_init_state = true;

		body->clearVelocity();
		body->clearOmega();
	}
/**
 * Check a check state for a king and all the opposite pieces
 */
bool Board::isInCheckWithPieces(Piece *king, std::vector<Piece *> pieces) {

    bool value = false;

    for (std::vector<Piece *>::iterator it = pieces.begin(); it != pieces.end(); ++it) {

        //matrix = nullptr;
        invalidateMatrix();
        matrix = getMatrix();
        std::vector<Move *> *moves = (*it)->makeMove(matrix);
        removeInvalidMoves(*it, moves);

        for (std::vector<Move *>::iterator move = moves->begin(); move != moves->end(); ++move) {
            if (king->getX() == (*move)->getX() && king->getY() == (*move)->getY()) {
                value =  true;
            }
            delete (*move);
        }
        delete moves;
    }

    return value;
}