diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/entities.cpp | 27 | ||||
-rw-r--r-- | src/gameplay.cpp | 20 | ||||
-rw-r--r-- | src/inventory.cpp | 42 | ||||
-rw-r--r-- | src/world.cpp | 74 |
4 files changed, 138 insertions, 25 deletions
diff --git a/src/entities.cpp b/src/entities.cpp index 5c00cc7..9d0ea9b 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -10,6 +10,8 @@ extern Player *player; extern const char *itemName; +extern + void getRandomName(Entity *e){ int tempNum,max=0; char *bufs; @@ -57,6 +59,7 @@ void Entity::spawn(float x, float y){ //spawns the entity you pass to it based o near = false; canMove = true; ground = false; + hit = false; ticksToUse = 0; @@ -116,12 +119,12 @@ NPC::~NPC(){ } Structures::Structures(){ //sets the structure type - health = maxHealth = 1; + health = maxHealth = 25; alive = false; near = false; - tex = new Texturec(1,"assets/house1.png"); + tex = new Texturec(3,"assets/house1.png", "assets/house2.png", "assets/fountain1.png"); inWorld = NULL; name = NULL; @@ -211,6 +214,7 @@ void Entity::draw(void){ //draws the entities static int texState = 0; static bool up = true; if(loops % (int)((float)4/(float)speed) == 0){ + //currentWorld->addParticle(loc.x,loc.y-HLINE,HLINE,HLINE,0,0,{0.0f,.17f,0.0f},1000); if(up){ if(++texState==2)up=false; tex->bindNext(); @@ -241,6 +245,19 @@ void Entity::draw(void){ //draws the entities break; } break; + case STRUCTURET: + for(auto &strt : currentWorld->build){ + if(this == strt){ + if(strt->bsubtype == HOUSE){ + tex->bind(0); + }else if(strt->bsubtype == HOUSE2){ + tex->bind(1); + }else if(strt->bsubtype == FOUNTAIN){ + tex->bind(2); + } + } + } + break; default: tex->bind(0); break; @@ -319,7 +336,8 @@ const char *randomDialog[] = { "Did you know this game has over 4000 lines of code? I didn\'t. I didn't even know I was in a game until now...", "HELP MY CAPS LOCK IS STUCK", "You know, if anyone ever asked me who I wanted to be when I grow up, I would say Abby Ross.", - "I want to have the wallpaper in our house changed. It doesn\'t really fit the environment." + "I want to have the wallpaper in our house changed. It doesn\'t really fit the environment.", + "Frig." }; void NPC::interact(){ //have the npc's interact back to the player @@ -368,7 +386,7 @@ void Object::interact(void){ * point to have non-normal traits so it could be invisible or invincible... */ -unsigned int Structures::spawn(_TYPE t, float x, float y){ +unsigned int Structures::spawn(_TYPE t, BUILD_SUB sub, float x, float y){ loc.x = x; loc.y = y; type = t; @@ -377,6 +395,7 @@ unsigned int Structures::spawn(_TYPE t, float x, float y){ width = 50 * HLINE; height = 40 * HLINE; + bsubtype = sub; /* * tempN is the amount of entities that will be spawned in the village. Currently the village diff --git a/src/gameplay.cpp b/src/gameplay.cpp index 74414d7..59320af 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -103,7 +103,7 @@ void initEverything(void){ worldSpawnHill2->setBackground(BG_FOREST); worldSpawnHill2->setBGM("assets/music/embark.wav"); worldSpawnHill2->addMob(MS_TRIGGER,-400,0,worldSpawnHill2_infoSprint); - + worldSpawnHill3 = new World(); worldSpawnHill3->generateFunc(1000,gen_worldSpawnHill3); worldSpawnHill3->setBackground(BG_FOREST); @@ -116,11 +116,25 @@ void initEverything(void){ worldSpawnHill1->toRight = worldSpawnHill2; worldSpawnHill2->toLeft = worldSpawnHill1; - worldSpawnHill2->toRight = worldSpawnHill3; worldSpawnHill3->toLeft = worldSpawnHill2; - + + /* + * Spawn some entities. + */ + + //playerSpawnHill->addMob(MS_TRIGGER,player->loc.x,0,story); + + //worldSpawnHill2->addStructure(STRUCTURET,HOUSE,(rand()%120*HLINE),100,worldSpawnHill1,worldSpawnHill2); + //playerSpawnHill->addStructure(STRUCTURET,FOUNTAIN,(rand()%120*HLINE)+100*HLINE,100,test,iw); + //playerSpawnHill->addStructure(STRUCTURET,HOUSE2,(rand()%120*HLINE)+300*HLINE,100,test,iw); + + //playerSpawnHill->addVillage(5,1,4,STRUCTURET,rand()%500+120,(float)200,playerSpawnHill,iw); + //playerSpawnHill->addMob(MS_TRIGGER,-1300,0,CUTSCENEEE);*/ + + currentWorld = worldSpawnHill1; + worldSpawnHill2->addStructure(STRUCTURET,FOUNTAIN,(rand()%120*HLINE)+100*HLINE,100,worldSpawnHill2,worldSpawnHill2); player = new Player(); player->spawn(200,100); diff --git a/src/inventory.cpp b/src/inventory.cpp index 8d8f958..5ae97b4 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -7,7 +7,7 @@ extern Player *player; extern GLuint invUI; static float hangle = 0.0f; -static bool up = true; +static bool swing = false; static float xc,yc; static vec2 itemLoc; Mix_Chunk* swordSwing; @@ -26,7 +26,7 @@ void initInventorySprites(void){ } swordSwing = Mix_LoadWAV("assets/sounds/shortSwing.wav"); - Mix_Volume(2,75); + Mix_Volume(2,100); } char *getItemTexturePath(ITEM_ID id){ @@ -278,13 +278,13 @@ void itemDraw(Player *p,ITEM_ID id,ITEM_TYPE type){ if(hangle < 15){ hangle=15.0f; p->inv->usingi = false; - up = false; + //swing=false; } }else{ if(hangle > -15){ hangle=-15.0f; p->inv->usingi = false; - up = false; + //swing=false; } } break; @@ -310,19 +310,35 @@ void itemDraw(Player *p,ITEM_ID id,ITEM_TYPE type){ } int Inventory::useItem(void){ + static bool up = false; ITEM_TYPE type = item[inv[sel].id].type; if(!invHover){ switch(type){ case SWORD: - if(!player->left){ - if(hangle==-15){up=true;Mix_PlayChannel(2,swordSwing,0);} - if(up)hangle-=15; - if(hangle<=-90)hangle=-14; - }else{ - if(hangle==15){up=true;Mix_PlayChannel(2,swordSwing,0);} - if(up)hangle+=15; - if(hangle>=90)hangle=14; - } + if(swing){ + if(!player->left){ + if(hangle==-15){up=true;Mix_PlayChannel(2,swordSwing,0);} + if(up)hangle-=.75*deltaTime; + if(hangle<=-90)hangle=-14; + }else{ + if(hangle==15){up=true;Mix_PlayChannel(2,swordSwing,0);} + if(up)hangle+=.75*deltaTime; + if(hangle>=90)hangle=14; + /* + if(hangle<90&&!up)hangle+=.75*deltaTime; + if(hangle>=90&&!up)up=true; + if(up)hangle-=.75*deltaTime; + if(up&&hangle<=15){ + up=false; + swing=false; + hangle=15; + return 0; + }*/ + } + }else if(!swing){ + swing=true; + Mix_PlayChannel(2,swordSwing,0); + } break; default: break; diff --git a/src/world.cpp b/src/world.cpp index 3f35e21..c1c306e 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -106,7 +106,14 @@ void World::deleteEntities(void){ delete object.back(); object.pop_back(); } - while(!entity.empty()) entity.pop_back(); + while(!entity.empty()){ + entity.pop_back(); + } + + while(!particles.empty()){ + delete particles.back(); + particles.pop_back(); + }//particles.clear(); } World::~World(void){ @@ -296,6 +303,28 @@ void World::update(Player *p,unsigned int delta){ else if(e->vel.x > 0)e->left = false; } } + uint oh = 0; + for(auto &pa : particles){ + if(pa->kill(deltaTime)){ + delete pa; + particles.erase(particles.begin()+oh); + }else if(pa->canMove){ + pa->loc.y += pa->vely * deltaTime; + pa->loc.x += pa->velx * deltaTime; + + for(auto &b : build){ + if(b->bsubtype==FOUNTAIN){ + if(pa->loc.x >= b->loc.x && pa->loc.x <= b->loc.x+b->width){ + if(pa->loc.y <= b->loc.y + b->height*.25){ + delete pa; + particles.erase(particles.begin()+oh); + } + } + } + } + } + oh++; + }oh=0; if(ui::dialogImportant){ Mix_FadeOutMusic(2000); @@ -592,7 +621,7 @@ LOOP2: /* * Draw non-structure entities. */ - + for(auto &part : particles){part->draw();} for(auto &n : current->npc){ n->loc.y+=(yoff-DRAW_Y_OFFSET); n->draw(); @@ -610,6 +639,7 @@ LOOP2: o->loc.y-=(yoff-DRAW_Y_OFFSET); } } + /* * If we're drawing the closest/last world, handle and draw the player. @@ -842,23 +872,52 @@ void World::detect(Player *p){ */ LOOOOP: + static int what = 0; for(auto &e : hey->entity) hey->singleDetect(e); + for(auto &part : particles){ + int l; + unsigned int i; + l=(part->loc.x + part->width / 2 - x_start) / HLINE; + if(l < 0) l=0; + i = l; + if(i > lineCount-1) i=lineCount-1; + if(part->loc.y < line[i].y){ + part->loc.y = line[i].y; + part->vely = 0; + part->velx = 0; + part->canMove = false; + }else{ + if(part->vely > -2)part->vely-=.003 * deltaTime; + } + what++; + }what=0; if(hey->infront){ hey = hey->infront; goto LOOOOP; } } - -void World::addStructure(_TYPE t,float x,float y,World *outside,World *inside){ +void World::addStructure(_TYPE t,BUILD_SUB sub, float x,float y,World *outside,World *inside){ build.push_back(new Structures()); - build.back()->spawn(t,x,y); + build.back()->spawn(t,sub,x,y); build.back()->inWorld=outside; build.back()->inside=(void *)inside; entity.push_back(build.back()); } +void World::addVillage(int bCount, int npcMin, int npcMax,_TYPE t,float x,float y,World *outside,World *inside){ + std::cout << npcMin << ", " << npcMax << std::endl; + int xwasd; + for(int i = 0; i < bCount; i++){ + xwasd = (rand()%(int)x+1000*HLINE); + HERE: + for(auto &bu : build){ + if(xwasd > bu->loc.x && xwasd < bu->loc.x+bu->width)goto HERE; + } + addStructure(t,HOUSE,xwasd,y,outside,inside); + } +} void World::addMob(int t,float x,float y){ mob.push_back(new Mob(t)); mob.back()->spawn(x,y); @@ -888,6 +947,11 @@ void World::addObject(ITEM_ID i, bool q, const char *p, float x, float y){ entity.push_back(object.back()); } +void World::addParticle(float x, float y, float w, float h, float vx, float vy, Color color, int d){ + particles.push_back(new Particles(x,y,w,h,vx,vy,color,d)); + particles.back()->canMove = true; +} + /*void World::removeObject(Object i){ object.delete[](i); }*/ |