-HttpClient: ’Content-Length’ is added to httprequest if not provided in the headers and a body exists

-expressions in GDScript can take multiple lines if inside parenthesis (python-like)
-Added \ to force linebreaks to GDscript (python-like)
-added exclude objects from raycast
-fixed crashes
This commit is contained in:
Juan Linietsky 2014-04-05 18:50:09 -03:00
parent 9f33134c93
commit b4969373b3
8 changed files with 309 additions and 212 deletions

View file

@ -97,8 +97,16 @@ Error HTTPClient::request( Method p_method, const String& p_url, const Vector<St
String request=String(_methods[p_method])+" "+p_url+" HTTP/1.1\r\n";
request+="Host: "+conn_host+":"+itos(conn_port)+"\r\n";
bool add_clen=p_body.length()>0;
for(int i=0;i<p_headers.size();i++) {
request+=p_headers[i]+"\r\n";
if (add_clen && p_headers[i].find("Content-Length:")==0) {
add_clen=false;
}
}
if (add_clen) {
request+="Content-Length: "+itos(p_body.utf8().length())+"\r\n";
//should it add utf8 encoding? not sure
}
request+="\r\n";
request+=p_body;

View file

@ -56,7 +56,7 @@ String Variant::get_type_name(Variant::Type p_type) {
} break;
case REAL: {
return "real";
return "float";
} break;
case STRING: {

View file

@ -174,10 +174,19 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
/* Parse Operand */
/*****************/
if (parenthesis>0) {
//remove empty space (only allowed if inside parenthesis
while(tokenizer->get_token()==GDTokenizer::TK_NEWLINE) {
tokenizer->advance();
}
}
if (tokenizer->get_token()==GDTokenizer::TK_PARENTHESIS_OPEN) {
//subexpression ()
tokenizer->advance();
parenthesis++;
Node* subexpr = _parse_expression(p_parent,p_static);
parenthesis--;
if (!subexpr)
return NULL;
@ -629,6 +638,12 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
/* Parse Operator */
/******************/
if (parenthesis>0) {
//remove empty space (only allowed if inside parenthesis
while(tokenizer->get_token()==GDTokenizer::TK_NEWLINE) {
tokenizer->advance();
}
}
Expression e;
e.is_op=false;
@ -2475,6 +2490,7 @@ void GDParser::clear() {
tab_level.push_back(0);
error_line=0;
error_column=0;
parenthesis=0;
current_export.type=Variant::NIL;
error="";

View file

@ -356,6 +356,7 @@ private:
template<class T>
T* alloc_node();
int parenthesis;
bool error_set;
String error;
int error_line;

View file

@ -242,6 +242,24 @@ void GDTokenizerText::_advance() {
case 0:
_make_token(TK_EOF);
break;
case '\\':
INCPOS(1);
if (GETCHAR(0)=='\r') {
INCPOS(1);
}
if (GETCHAR(0)!='\n') {
_make_error("Expected newline after '\\'.");
return;
}
INCPOS(1);
while(GETCHAR(0)==' ' || GETCHAR(0)=='\t') {
INCPOS(1);
}
continue;
case '\t':
case '\r':
case ' ':

View file

@ -350,8 +350,10 @@ void CanvasItem::_notification(int p_what) {
if (xform_change.in_list())
get_scene()->xform_change_list.remove(&xform_change);
_exit_canvas();
if (C)
if (C) {
get_parent()->cast_to<CanvasItem>()->children_items.erase(C);
C=NULL;
}
} break;
case NOTIFICATION_DRAW: {

View file

@ -28,6 +28,7 @@
/*************************************************************************/
#include "ray_cast_2d.h"
#include "servers/physics_2d_server.h"
#include "collision_object_2d.h"
void RayCast2D::set_cast_to(const Vector2& p_point) {
@ -151,7 +152,7 @@ void RayCast2D::_notification(int p_what) {
Physics2DDirectSpaceState::RayResult rr;
if (dss->intersect_ray(gt.get_origin(),gt.xform(to),rr)) {
if (dss->intersect_ray(gt.get_origin(),gt.xform(to),rr,exclude)) {
collided=true;
against=rr.collider_id;
@ -168,6 +169,41 @@ void RayCast2D::_notification(int p_what) {
}
}
void RayCast2D::add_exception_rid(const RID& p_rid) {
exclude.insert(p_rid);
}
void RayCast2D::add_exception(const Object* p_object){
ERR_FAIL_NULL(p_object);
CollisionObject2D *co=((Object*)p_object)->cast_to<CollisionObject2D>();
if (!co)
return;
add_exception_rid(co->get_rid());
}
void RayCast2D::remove_exception_rid(const RID& p_rid) {
exclude.erase(p_rid);
}
void RayCast2D::remove_exception(const Object* p_object){
ERR_FAIL_NULL(p_object);
CollisionObject2D *co=((Object*)p_object)->cast_to<CollisionObject2D>();
if (!co)
return;
remove_exception_rid(co->get_rid());
}
void RayCast2D::clear_exceptions(){
exclude.clear();
}
void RayCast2D::_bind_methods() {
@ -184,6 +220,14 @@ void RayCast2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_collision_point"),&RayCast2D::get_collision_point);
ObjectTypeDB::bind_method(_MD("get_collision_normal"),&RayCast2D::get_collision_normal);
ObjectTypeDB::bind_method(_MD("add_exception_rid","rid"),&RayCast2D::add_exception_rid);
ObjectTypeDB::bind_method(_MD("add_exception","node"),&RayCast2D::add_exception);
ObjectTypeDB::bind_method(_MD("remove_exception_rid","rid"),&RayCast2D::remove_exception_rid);
ObjectTypeDB::bind_method(_MD("remove_exception","node"),&RayCast2D::remove_exception);
ObjectTypeDB::bind_method(_MD("clear_exceptions"),&RayCast2D::clear_exceptions);
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"enabled"),_SCS("set_enabled"),_SCS("is_enabled"));
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"cast_to"),_SCS("set_cast_to"),_SCS("get_cast_to"));
}

View file

@ -42,6 +42,8 @@ class RayCast2D : public Node2D {
int against_shape;
Vector2 collision_point;
Vector2 collision_normal;
Set<RID> exclude;
Vector2 cast_to;
protected:
@ -62,6 +64,12 @@ public:
Vector2 get_collision_point() const;
Vector2 get_collision_normal() const;
void add_exception_rid(const RID& p_rid);
void add_exception(const Object* p_object);
void remove_exception_rid(const RID& p_rid);
void remove_exception(const Object* p_object);
void clear_exceptions();
RayCast2D();
};