Beispiel #1
0
void vlang_run(const char* buffer)
{
	ParserEnv e;
	ParserEnv_Init(&e, buffer);

	CFunctionConfig cfc(CFuncTest);
	cfc.AddInputParam(xhn::string("x"), FloatValue);
	cfc.AddOutputParam(xhn::string("ret"), FloatValue);
	cfc.AttachToParseEnv(&e, xhn::string("c_test"));

	yyparse(&e);
	///vptr addr = FunctionClosures_get_vari_addr(&e, e.curt_func, "a");
	if (array_n(e.exce_array))
	{
		elog("error line %d char count %d\n", e.line_count, e.char_count);
		for (euint i = 0; i < array_n(e.exce_array); i++)
		{
			parser_exception exce = e.exce_array[i];
			elog("EXCE:%s\n", exce.exce_desc);
		}
		return;
	}
	ParserEnv_print_all_function(&e);
	///int vari_type;
	FunctionClosures fc = ParserEnv_find_function(&e, "main");
	///FunctionPrint(&e, fc);
	if (fc)
		e.curt_func = fc;
	elog("############################\n");
	FunctionClosures_execute(&e, e.curt_func);
}
Beispiel #2
0
	void compile(const char* path, CompileOptions& opts)
	{
		Buffer buf = opts.read(path);
		TempAllocator4096 ta;
		JsonObject object(ta);
		sjson::parse(buf, object);

		Array<PhysicsConfigMaterial> materials(default_allocator());
		Array<PhysicsConfigShape> shapes(default_allocator());
		Array<PhysicsConfigActor> actors(default_allocator());
		CollisionFilterCompiler cfc(opts);

		// Parse materials
		if (map::has(object, FixedString("collision_filters")))
			cfc.parse(object["collision_filters"]);
		if (map::has(object, FixedString("materials")))
			parse_materials(object["materials"], materials);
		if (map::has(object, FixedString("shapes")))
			parse_shapes(object["shapes"], shapes);
		if (map::has(object, FixedString("actors")))
			parse_actors(object["actors"], actors);

		// Setup struct for writing
		PhysicsConfigResource pcr;
		pcr.version       = RESOURCE_VERSION_PHYSICS_CONFIG;
		pcr.num_materials = array::size(materials);
		pcr.num_shapes    = array::size(shapes);
		pcr.num_actors    = array::size(actors);
		pcr.num_filters   = array::size(cfc._filters);

		u32 offt = sizeof(PhysicsConfigResource);
		pcr.materials_offset = offt;
		offt += sizeof(PhysicsConfigMaterial) * pcr.num_materials;

		pcr.shapes_offset = offt;
		offt += sizeof(PhysicsConfigShape) * pcr.num_shapes;

		pcr.actors_offset = offt;
		offt += sizeof(PhysicsConfigActor) * pcr.num_actors;

		pcr.filters_offset = offt;
		offt += sizeof(PhysicsCollisionFilter) * pcr.num_filters;

		// Write all
		opts.write(pcr.version);
		opts.write(pcr.num_materials);
		opts.write(pcr.materials_offset);
		opts.write(pcr.num_shapes);
		opts.write(pcr.shapes_offset);
		opts.write(pcr.num_actors);
		opts.write(pcr.actors_offset);
		opts.write(pcr.num_filters);
		opts.write(pcr.filters_offset);

		// Write material objects
		for (u32 i = 0; i < pcr.num_materials; ++i)
		{
			opts.write(materials[i].name._id);
			opts.write(materials[i].static_friction);
			opts.write(materials[i].dynamic_friction);
			opts.write(materials[i].restitution);
		}

		// Write material objects
		for (u32 i = 0; i < pcr.num_shapes; ++i)
		{
			opts.write(shapes[i].name._id);
			opts.write(shapes[i].trigger);
			opts.write(shapes[i]._pad[0]);
			opts.write(shapes[i]._pad[1]);
			opts.write(shapes[i]._pad[2]);
		}

		// Write actor objects
		for (u32 i = 0; i < pcr.num_actors; ++i)
		{
			opts.write(actors[i].name._id);
			opts.write(actors[i].linear_damping);
			opts.write(actors[i].angular_damping);
			opts.write(actors[i].flags);
		}

		for (u32 i = 0; i < array::size(cfc._filters); ++i)
		{
			opts.write(cfc._filters[i].name._id);
			opts.write(cfc._filters[i].me);
			opts.write(cfc._filters[i].mask);
		}
	}