Пример #1
0
/**
  * 二項演算生成メソッド
  * @param  JumpStmtAST
  * @return 生成したValueのポインタ
  */
llvm::Value *CodeGen::generateBinaryExpression(BinaryExprAST *bin_expr){
	BaseAST *lhs=bin_expr->getLHS();
	BaseAST *rhs=bin_expr->getRHS();

	llvm::Value *lhs_v;
	llvm::Value *rhs_v;

	//assignment
	if(bin_expr->getOp()=="="){
		//lhs is variable
		VariableAST *lhs_var=llvm::dyn_cast<VariableAST>(lhs);
		llvm::ValueSymbolTable &vs_table = CurFunc->getValueSymbolTable();
		lhs_v = vs_table.lookup(lhs_var->getName());

	//other operand
	}else{
		//lhs=?
		//Binary?
		if(llvm::isa<BinaryExprAST>(lhs))
			lhs_v=generateBinaryExpression(llvm::dyn_cast<BinaryExprAST>(lhs));

		//Variable?
		else if(llvm::isa<VariableAST>(lhs))
			lhs_v=generateVariable(llvm::dyn_cast<VariableAST>(lhs));

		//Number?
		else if(llvm::isa<NumberAST>(lhs)){
			NumberAST *num=llvm::dyn_cast<NumberAST>(lhs);
			lhs_v=generateNumber(num->getNumberValue());
		}
	}


	//create rhs value
	if(llvm::isa<BinaryExprAST>(rhs))
		rhs_v=generateBinaryExpression(llvm::dyn_cast<BinaryExprAST>(rhs));

	//Variable?
	else if(llvm::isa<VariableAST>(rhs))
		rhs_v=generateVariable(llvm::dyn_cast<VariableAST>(rhs));

	//Number?
	else if(llvm::isa<NumberAST>(rhs)){
		NumberAST *num=llvm::dyn_cast<NumberAST>(rhs);
		rhs_v=generateNumber(num->getNumberValue());
	}
	
	
	if(bin_expr->getOp()=="="){
		//store
		return Builder->CreateStore(rhs_v, lhs_v);
	}else if(bin_expr->getOp()=="+"){
		//add
		return Builder->CreateAdd(lhs_v, rhs_v, "add_tmp");
	}else if(bin_expr->getOp()=="-"){
		//sub
		return Builder->CreateSub(lhs_v, rhs_v, "sub_tmp");
	}else if(bin_expr->getOp()=="*"){
		//mul
		return Builder->CreateMul(lhs_v, rhs_v, "mul_tmp");
	}else if(bin_expr->getOp()=="/"){
		//div
		return Builder->CreateSDiv(lhs_v, rhs_v, "div_tmp");
	}
}
Пример #2
0
void GameManager::init()
{
	int quadrante;
	double direction;

	std::srand(std::time(0));


	//Initializing Flags
	wireFlag = false;
	dirLightFlag = false;
	spotLightFlag = false;
	pointLightFlag = false;
	activateLights = false;
	shadeFlag = false;
	pauseFlag = false;
	startFlag = false;


	//Constructing Textures
	//_pauseTex = new Texture("C:\\Users\\DanielaD\\Desktop\\MicroMachines CG\\pause.jpg");
	//_gameOverTex = new Texture("C:\\Users\\DanielaD\\Desktop\\MicroMachines CG\\gameover.jpg");

	_pausePlane = new Plane(0, 0, 10);
	_pausePlane->setFileName("C:\\Users\\DanielaD\\Desktop\\MicroMachines CG\\pause.png");
	_gameOverPlane = new Plane(0, 0, 10);
	_gameOverPlane->setFileName("C:\\Users\\DanielaD\\Desktop\\MicroMachines CG\\rip.png");
	
	//Constructing Objects//
	Table * table = new Table();
	table->setPosition(0, 0, 0);
	//table->setTexture("C:\\Users\\DanielaD\\Desktop\\MicroMachines CG\\wood.png");
	_gameObjects.push_back(table);

	Roadside * roadside = new Roadside();
	roadside->setPosition(0, 0, 0.05);
	_gameObjects.push_back(roadside);


	//criar a posicao de cada cheerio (outer road)
	int angle = 0;
	double x, y;

	while (angle < 360) {
		x = OUTTERLENGTH * cos((angle)*(PI / 180));
		y = OUTTERLENGTH * sin((angle)*(PI / 180));

		Cheerio *cNew = new Cheerio(x, y, 1.6);
		roadside->insertCheerio(cNew);
		_gameObjects.push_back(cNew);
		angle += OUTTER_ANGLE_INCREASE;
	}

	//criar a posicao de cada cheerio (inner road)
	angle = 0;

	while (angle < 360) {
		x = INNERLENGTH * cos((angle)*(PI / 180));
		y = INNERLENGTH * sin((angle)*(PI / 180));

		Cheerio *cNew = new Cheerio(x, y, 1.6);
		roadside->insertCheerio(cNew);
		_gameObjects.push_back(cNew);
		angle += INNER_ANGLE_INCREASE;
	}

	_car = new Car();
	_car->setPosition(-12, 0, 1.7);
	_car->setRight(false);
	_car->setLeft(false);
	_car->setUp(false);
	_car->setDown(false);
	_gameObjects.push_back(_car);

	x = -14, y = -14;
	for (int i = 0; i < _lifes; i++) {
		Car* tempLife = new Car();
		tempLife->setPosition(x, y, 10);
		tempLife->setRight(false);
		tempLife->setLeft(false);
		tempLife->setUp(false);
		tempLife->setDown(false);
		_lifeVector.push_back(tempLife);
		x += 1.5;
	}


	Butter * butter1 = new Butter();
	butter1->setPosition(3, 12, 1.6);
	_gameObjects.push_back(butter1);

	Butter * butter2 = new Butter();
	butter2->setPosition(4, 13, 1.6);
	_gameObjects.push_back(butter2);

	Butter * butter3 = new Butter();
	butter3->setPosition(5, 12, 1.6);
	_gameObjects.push_back(butter3);

	Butter * butter4 = new Butter();
	butter4->setPosition(-3, -10, 1.6);
	_gameObjects.push_back(butter4);

	Butter * butter5 = new Butter();
	butter5->setPosition(-2, -11, 1.6);
	_gameObjects.push_back(butter5);


	for (int i = 0; i < NORANGES; i++) {

		Orange * orange = new Orange();

		quadrante = rand() % NQUADRANTES;
		direction = generateNumber(365, 1);

		orange->setId(i);
		orange->setPosition(generatePosition(quadrante, 0), generatePosition(quadrante, 1), 2.5);
		orange->setCurrentSpeed(generateNumber(SPEEDHIGHERINI, SPEEDLOWERINI));
		orange->setDirection(cos(direction*(PI / 180)), sin(direction*(PI / 180)), 0);
		orange->setLifeState(true);

		_gameObjects.push_back(orange);
		_oranges.push_back(orange);
	}


	//Constructing Camera
	_2dCamera = new OrthogonalCamera();
	_2dCamera->setEye(0, 0, 15);
	_2dCamera->setCenter(0, 0, 1);
	_2dCamera->setUp(0, 1, 0);
	_2dCamera->setLowerLimits(-15, -15, -15);
	_2dCamera->setUpperLimits(15, 15, 15);
	_activeCamera = _2dCamera;

	_guiCamera = new OrthogonalCamera();
	_guiCamera->setEye(0, 0, 20);
	_guiCamera->setCenter(0, 0, 1);
	_guiCamera->setUp(0, 1, 0);
	_guiCamera->setLowerLimits(-15, -15, -15);
	_guiCamera->setUpperLimits(15, 15, 15);

	_fieldCamera = new PerspectiveCamera();
	_fieldCamera->setEye(-20, -20, 20);
	_fieldCamera->setCenter(0, 0, 2);
	_fieldCamera->setUp(20, 20, 19);
	_fieldCamera->update(90, 1, 0.01, 150);

	_carCamera = new PerspectiveCamera();
	_carCamera->setEye(_car->getPosition()->getX() - (CAR_CAMERA_DISTANCE * (cos(_car->getCurrentAngle() * (PI / 180)))),
		_car->getPosition()->getY() - (CAR_CAMERA_DISTANCE * (sin(_car->getCurrentAngle() * (PI / 180)))),
		CAR_CAMERA_DISTANCE);
	_carCamera->setCenter(_car->getPosition()->getX(), _car->getPosition()->getY(), _car->getPosition()->getZ());
	//_carCamera->setUp(_car->getSpeed()->getX(), _car->getSpeed()->getY(), _car->getSpeed()->getZ());
	_carCamera->setUp(0, 0, 1);
	_carCamera->update(60, 1, 0.01, 150);


	//Constructing light sources

	Vela* vela1 = new Vela();
	vela1->setPosition(-6, 6, 1.6);
	_gameObjects.push_back(vela1);

	Vela* vela2 = new Vela();
	vela2->setPosition(6, 6, 1.6);
	_gameObjects.push_back(vela2);

	Vela* vela3 = new Vela();
	vela3->setPosition(0, -6, 1.6);
	_gameObjects.push_back(vela3);

	Vela* vela4 = new Vela();
	vela4->setPosition(-10, -10, 1.6);
	_gameObjects.push_back(vela4);

	Vela* vela5 = new Vela();
	vela5->setPosition(10, -10, 1.6);
	_gameObjects.push_back(vela5);

	Vela* vela6 = new Vela();
	vela6->setPosition(0, 14, 1.6);
	_gameObjects.push_back(vela6);


	LightSource* daylight = new LightSource(0);
	daylight->setPosition(0, 0, 10, 0);
	daylight->setAmbient(0.5, 0.5, 0.5, 1);
	daylight->setDiffuse(1, 1, 1, 1);
	daylight->setSpecular(1, 1, 1, 1);
	_lightSources.push_back(daylight);

	LightSource* candle1 = new LightSource(1);
	candle1->setPosition(-6, 6, 1, 1);
	candle1->setAmbient(0.7, 0.7, 0.7, 1);
	candle1->setDiffuse(1, 1, 1, 1);
	candle1->setSpecular(1, 1, 1, 1);
	candle1->setAttenuation(1, 0, 0.1);
	_lightSources.push_back(candle1);

	LightSource* candle2 = new LightSource(2);
	candle2->setPosition(6, 6, 1, 1);
	candle2->setAmbient(0.7, 0.7, 0.7, 1);
	candle2->setDiffuse(1, 1, 1, 1);
	candle2->setSpecular(1, 1, 1, 1);
	candle2->setAttenuation(1, 0, 0.1);
	_lightSources.push_back(candle2);

	LightSource* candle3 = new LightSource(3);
	candle3->setPosition(0, -6, 1, 1);
	candle3->setAmbient(0.7, 0.7, 0.7, 1);
	candle3->setDiffuse(1, 1, 1, 1);
	candle3->setSpecular(1, 1, 1, 1);
	candle3->setAttenuation(1, 0, 0.1);
	_lightSources.push_back(candle3);

	LightSource* candle4 = new LightSource(4);
	candle4->setPosition(-10, -10, 1, 1);
	candle4->setAmbient(0.7, 0.7, 0.7, 1);
	candle4->setDiffuse(1, 1, 1, 1);
	candle4->setSpecular(1, 1, 1, 1);
	candle4->setAttenuation(1, 0, 0.1);
	_lightSources.push_back(candle4);

	LightSource* candle5 = new LightSource(5);
	candle5->setPosition(10, -10, 1, 1);
	candle5->setAmbient(0.7, 0.7, 0.7, 1);
	candle5->setDiffuse(1, 1, 1, 1);
	candle5->setSpecular(1, 1, 1, 1);
	candle5->setAttenuation(1, 0, 0.1);
	_lightSources.push_back(candle5);

	LightSource* candle6 = new LightSource(6);
	candle6->setPosition(0, 15, 1, 1);
	candle6->setAmbient(0.7, 0.7, 0.7, 1);
	candle6->setDiffuse(1, 1, 1, 1);
	candle6->setSpecular(1, 1, 1, 1);
	candle6->setAttenuation(1.0, 0, 0.1);
	_lightSources.push_back(candle6);

	LightSource* spotlight = new LightSource(7);
	spotlight->setAmbient(0.8, 0.8, 0.8, 1);
	spotlight->setDiffuse(1, 1, 1, 1);
	spotlight->setSpecular(1, 1, 1, 1);
	spotlight->setExponent(new GLfloat(5));
	spotlight->setCutOff(new GLfloat(40));
	spotlight->setAttenuation(0, 0.6, 0.3);
	_lightSources.push_back(spotlight);

	initIsDone = true;
}