void CollisionManager::RemovePoints(int objID) { //this removes the box with the passed in id from the list - from the encounters list, //the endpoints list //endpoints - there will be two x points and two y points - they //may not be next to each other in the array so we will need to check for both and //shuffle accordingly - we can give them a high const value and they will be 'shuffled' out //on the next pass for(int box = 0; box < numBoxes * 2; box++) { if(endpoints[box][X_AXIS].objID == objID) { endpoints[box][X_AXIS].value = SHUFFLE_OUT; } if(endpoints[box][Y_AXIS].objID == objID) { endpoints[box][Y_AXIS].value = SHUFFLE_OUT; } } Update(); RemoveEncounter(objID); numBoxes--; }
void CollisionManager::ResolveEncounters() { //will have to be done later - pass the owner entities of these rects to the //collision resolution code in the actual game - call this code by going //through the list of encounters one by one for(int encounter = 0; encounter < numEncounters; encounter++) { int id1 = encounters[encounter].objIds[0]; int id2 = encounters[encounter].objIds[1]; g_engine->DealWithCollision(id1,id2); RemoveEncounter(id1); } }
//================================================================================================= void Quest_DeliverParcel::SetProgress(int prog2) { bool apply = true; switch(prog2) { case Progress::Started: // give parcel to player { Location& loc = *game->locations[end_loc]; const Item* base_item = FindItem("parcel"); game->PreloadItem(base_item); CreateItemCopy(parcel, base_item); parcel.id = "$parcel"; parcel.name = Format(game->txQuest[8], LocationHelper::IsCity(loc) ? game->txForMayor : game->txForSoltys, loc.name.c_str()); parcel.refid = refid; game->current_dialog->pc->unit->AddItem(&parcel, 1, true); start_time = game->worldtime; state = Quest::Started; name = game->txQuest[9]; quest_index = quest_manager.quests.size(); quest_manager.quests.push_back(this); RemoveElement<Quest*>(quest_manager.unaccepted_quests, this); quest_manager.quests_timeout2.push_back(this); Location& loc2 = *game->locations[start_loc]; msgs.push_back(Format(game->txQuest[3], LocationHelper::IsCity(loc2) ? game->txForMayor : game->txForSoltys, loc2.name.c_str(), game->day + 1, game->month + 1, game->year)); msgs.push_back(Format(game->txQuest[10], LocationHelper::IsCity(loc) ? game->txForMayor : game->txForSoltys, loc.name.c_str(), GetLocationDirName(loc2.pos, loc.pos))); game->game_gui->journal->NeedUpdate(Journal::Quests, quest_index); game->AddGameMsg3(GMS_JOURNAL_UPDATED); if(Rand() % 4 != 0) { Encounter* e = game->AddEncounter(enc); e->pos = (loc.pos + loc2.pos) / 2; e->zasieg = 64; e->szansa = 45; e->dont_attack = true; e->dialog = FindDialog("q_deliver_parcel_bandits"); e->grupa = SG_BANDYCI; e->text = game->txQuest[11]; e->quest = this; e->timed = true; e->location_event_handler = nullptr; } if(Net::IsOnline()) { game->Net_AddQuest(refid); game->Net_RegisterItem(&parcel, base_item); if(!game->current_dialog->is_local) { game->Net_AddItem(game->current_dialog->pc, &parcel, true); game->Net_AddedItemMsg(game->current_dialog->pc); } else game->AddGameMsg3(GMS_ADDED_ITEM); } else game->AddGameMsg3(GMS_ADDED_ITEM); } break; case Progress::DeliverAfterTime: // player failed to deliver parcel in time, but gain some gold anyway { state = Quest::Failed; ((City*)game->locations[start_loc])->quest_mayor = CityQuestState::Failed; game->current_dialog->pc->unit->RemoveQuestItem(refid); game->AddReward(125); msgs.push_back(game->txQuest[12]); game->game_gui->journal->NeedUpdate(Journal::Quests, quest_index); game->AddGameMsg3(GMS_JOURNAL_UPDATED); RemoveElementTry(quest_manager.quests_timeout2, (Quest*)this); RemoveEncounter(); if(Net::IsOnline()) { game->Net_UpdateQuest(refid); if(!game->current_dialog->is_local) game->Net_RemoveQuestItem(game->current_dialog->pc, refid); } } break; case Progress::Timeout: // player failed to deliver parcel in time { state = Quest::Failed; ((City*)game->locations[start_loc])->quest_mayor = CityQuestState::Failed; msgs.push_back(game->txQuest[13]); game->game_gui->journal->NeedUpdate(Journal::Quests, quest_index); game->AddGameMsg3(GMS_JOURNAL_UPDATED); RemoveElementTry(quest_manager.quests_timeout2, (Quest*)this); RemoveEncounter(); if(Net::IsOnline()) game->Net_UpdateQuest(refid); } break; case Progress::Finished: // parcel delivered, end of quest { state = Quest::Completed; ((City*)game->locations[start_loc])->quest_mayor = CityQuestState::None; game->current_dialog->pc->unit->RemoveQuestItem(refid); game->AddReward(250); RemoveEncounter(); msgs.push_back(game->txQuest[14]); game->game_gui->journal->NeedUpdate(Journal::Quests, quest_index); game->AddGameMsg3(GMS_JOURNAL_UPDATED); RemoveElementTry(quest_manager.quests_timeout2, (Quest*)this); if(Net::IsOnline()) { game->Net_UpdateQuest(refid); if(!game->current_dialog->is_local) game->Net_RemoveQuestItem(game->current_dialog->pc, refid); } } break; case Progress::AttackedBandits: // don't giver parcel to bandits, get attacked { RemoveEncounter(); apply = false; msgs.push_back(game->txQuest[15]); game->game_gui->journal->NeedUpdate(Journal::Quests, quest_index); game->AddGameMsg3(GMS_JOURNAL_UPDATED); if(Net::IsOnline()) game->Net_UpdateQuest(refid); } break; case Progress::ParcelGivenToBandits: // give parcel to bandits { RemoveEncounter(); game->current_dialog->talker->AddItem(&parcel, 1, true); game->RemoveQuestItem(&parcel, refid); msgs.push_back(game->txQuest[16]); game->game_gui->journal->NeedUpdate(Journal::Quests, quest_index); game->AddGameMsg3(GMS_JOURNAL_UPDATED); if(Net::IsOnline()) game->Net_UpdateQuest(refid); } break; case Progress::NoParcelAttackedBandits: // no parcel, attacked by bandits apply = false; RemoveEncounter(); break; } if(apply) prog = prog2; }