// コンストラクタ CSceneStageSelect::CSceneStageSelect() : IScene("img_stageSelect", "bgm_stageSelect") { std::string settingFile = gm()->fm().GetFile("#StageSelectFile"); std::ifstream f(settingFile); back_ = charabase::CharPtr(new charabase::CharBase()); back_->resname = BACK_RESNAME; back_->pos.z = 1.f; if (f.fail()) { debug::BToM("CSceneStageSelect::CSceneStageSelect path:%s", settingFile.c_str()); fieldRect_.top = fieldRect_.left = 0; fieldRect_.right = system::WINW; fieldRect_.bottom = system::WINH; } else { LoadInfo(f); } descHeight_ = 0.f; gm()->init(); InsertObject(ObjPtr(new CStageMng())); InsertObject(ObjPtr(new CScoreMng())); }
ObjPtr ObjPtr::cast_to(QualifiedTypePtr i_dest_type) const { if (m_object != nullptr) { auto source_primary_type = m_type.primary_type(); auto dest_primary_type = i_dest_type.primary_type(); auto result = source_primary_type->try_dynamic_cast(m_object, *dest_primary_type); if (result != nullptr) { return ObjPtr(result, i_dest_type); } } return ObjPtr(); }
ObjPtr Boolean::sendMsg(MsgPtr message) { switch(message->id) { case 5859493UL: // == return equal(message->args.front()); break; case 5858873UL: // != return notEqual(message->args.front()); break; case 1756282918UL: // to-str return toStr(); break; case 177539UL: // & return andOp(message->args.front()); break; case 177625UL: // | return orOp(message->args.front()); break; case 177540UL: // ! return notOp(); break; case 2123293021UL: // to-bool return make(_value); break; default: std::cerr << "Boolean does not support method(" << message << ")" << std::endl; throw 100; break; } return ObjPtr(); }
ObjPtr Boolean::make(bool boolean) { Boolean* boolObj = new Boolean(); boolObj->_value = boolean; return ObjPtr(boolObj); }
void CNWayShot::CreateAttack(const mymath::Vec3f& pos, int n, float angle, float interval, float speed, float acc, bool centerFlag) { for (int i = 0; i < n; ++i) { charabase::CharBase shot(shot_.obj()); // 座標、角度、画像、初速度 // 座標 shot.pos = pos; // 発射角 shot.angle = angle + (interval * ((centerFlag) ? static_cast<float>(i - n / 2) : static_cast<float>(i))); if (shot.angle >= 360.f) shot.angle -= 360.f; else if (shot.angle < 0.f) shot.angle += 360.f; // 発射角に合わせて初速度や加速度の向きを変える const float rad = math::Calc_DegreeToRad(shot.angle); const float c = std::cosf(rad); const float s = std::sinf(rad); shot.add.x = speed * c; shot.add.y = speed * -s; shot.add.z = 0.f; mymath::Vec3f a(acc * c, acc * -s); // 加速度 CShot shot_info(shot, a); // 追加用 shot_info.start(); // 当たり判定領域のコピー shot_info.SetCollisionAreas(shot_); // 登録 gm()->AddObject(ObjPtr(new CShot(shot_info))); } }
void CGameManager::start() { __super::start(); fileMng_.Load(); if (!GetObj(typeid(CStageMng))) { auto sm = std::shared_ptr<CStageMng>(new CStageMng()); AddObject2(sm); TempCharacter t(sm); sm->load(); #ifdef DEF_GM_PTR //SetStageMngPtr(sm); #endif } if (!GetObj(typeid(CScoreMng))) { auto sm = std::shared_ptr<CScoreMng>(new CScoreMng()); AddObject2(sm); #ifdef DEF_GM_PTR SetScoreMngPtr(sm); #endif } if (!GetObj(typeid(CCollision))) AddObject2(ObjPtr(new CCollision())); }
// コンストラクタ CSceneMain::CSceneMain(): IScene("","bgm_main") { InsertObject(ObjPtr(new CCollision())); }