/** * 二項演算生成メソッド * @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"); } }
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; }