This commit is contained in:
aozhiwei 2022-08-25 19:23:44 +08:00
parent 70e89667b0
commit e7f0395e79
8 changed files with 51 additions and 12 deletions

View File

@ -19,7 +19,7 @@ else()
endif()
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DNDEBUG -DNEWGS")
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DDEBUG -fsanitize=address -fno-omit-frame-pointer -DNEWGS -DPVE")
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DDEBUG -DNEWGS -DPVE")
include_directories(
AFTER

View File

@ -324,7 +324,7 @@ int Incubator::GetPveLeftTime()
room->pve_data.wave < 0) {
return 0;
}
xtimer_list* timer = wave_timers_[room->pve_data.wave - 1];
xtimer_list* timer = wave_timers_[room->pve_data.wave];
int remain_time = room->xtimer.GetRemainTime(timer);
return remain_time * FRAME_RATE_MS;
}

View File

@ -143,6 +143,16 @@ void MapInstance::CreateThings()
if (!MetaMgr::Instance()->GetHeroAI(hero_meta->i->ai())) {
A8_ABORT();
}
if (map_id > 1001) {
auto itr = spawn_name_hash_.find(thing_tpl.i->name());
if (itr != spawn_name_hash_.end()) {
abort();
}
a8::Vec2 point;
point.x = thing_tpl.i->x();
point.y = thing_tpl.i->y();
spawn_name_hash_[thing_tpl.i->name()] = point;
}
}
}
break;
@ -491,3 +501,9 @@ MapBlock* MapInstance::InternalCreateMapBlock(int id, float x, float y,
p->permanent_map_service = map_service_;
return p;
}
a8::Vec2* MapInstance::GetSpawnPoint(const std::string& name)
{
auto itr = spawn_name_hash_.find(name);
return itr != spawn_name_hash_.end() ? &itr->second : nullptr;
}

View File

@ -30,6 +30,8 @@ class MapInstance
void AttachRoom(Room* room, RoomInitInfo& init_info);
MetaData::Map* GetMapMeta() { return map_meta_; }
Entity* GetEntityByUniId(int uniid);
a8::Vec2* GetSpawnPoint(const std::string& name);
private:
void CreateThings();
void CreateTerrain();
@ -63,6 +65,7 @@ class MapInstance
std::vector<Building*> buildings_;
std::vector<MetaData::MapTplThing*> level0room_spec_things_;
std::list<metatable::MapBlockJson> terrain_blocks_;
std::map<std::string, a8::Vec2> spawn_name_hash_;
int building_num_ = 0;
int obstacle_num_ = 0;

View File

@ -36,6 +36,7 @@ void MapMgr::Init()
if (mode_hash_.find(kChiJiMode) == mode_hash_.end()) {
A8_ABORT();
}
MetaMgr::Instance()->CheckMapSpawnPoint();
}
void MapMgr::UnInit()

View File

@ -1659,16 +1659,6 @@ namespace MetaData
void PveGeminiContent::Init()
{
{
std::vector<std::string> strings;
a8::Split(pb->spawn_point(), strings, ':');
if (strings.size() != 2) {
abort();
}
spawn_point = a8::Vec2(a8::XValue(strings[0]).GetDouble(),
a8::XValue(strings[1]).GetDouble());
spawn_point.y = 7680 - spawn_point.y;
}
}
void PveGeminiMode::Init()

View File

@ -15,6 +15,8 @@
#include "metamgr.h"
#include "app.h"
#include "jsondatamgr.h"
#include "mapmgr.h"
#include "mapinstance.h"
#define METAMGR_READ(field_name, def_val) MetaMgr::Instance()->field_name = \
a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, #def_val));
@ -1344,3 +1346,28 @@ MetaData::PveGeminiMode* MetaMgr::GetPveGeminiMode(int mode_id)
auto itr = loader_->pve_gemini_mode_hash.find(mode_id);
return itr != loader_->pve_gemini_mode_hash.end() ? &itr->second : nullptr;
}
void MetaMgr::CheckMapSpawnPoint()
{
for (int i = kDestoryMode; i <= kSurvivalMode; ++i) {
MetaData::PveGeminiMode* mode_meta = GetPveGeminiMode(i);
if (!mode_meta) {
abort();
}
auto contents = GetPveGeminiContents(i);
if (!contents) {
abort();
}
MapInstance* map_instance = MapMgr::Instance()->GetMapInstance(mode_meta->pb->map_id());
if (!map_instance) {
abort();
}
for (auto& content : *contents) {
a8::Vec2* p = map_instance->GetSpawnPoint(content.pb->spawn_point());
if (!p) {
abort();
}
content.spawn_point = *p;
}
}
}

View File

@ -73,6 +73,8 @@ class MetaMgr : public a8::Singleton<MetaMgr>
bool HasText(const std::string& textid);
std::vector<std::tuple<int, std::string>>* GetTextElements(const std::string& textid);
void CheckMapSpawnPoint();
int gas_inactive_time = 10;
int newbie_gas_inactive_time = 5;
int midbrid_gas_inactive_time = 15;