//初期化 void CapsuleObject::OnCreate(){ auto PtrTransform = AddComponent<Transform>(); PtrTransform->SetPosition(m_StartPos); PtrTransform->SetScale(2.0f, 2.0f, 2.0f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); //操舵系のコンポーネントをつける場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); //Capsuleの衝突判定をつける auto CollPtr = AddComponent<CollisionCapsule>(); CollPtr->SetFixed(true); //コリジョンのワイアフレーム表示 AddComponent<PNTCollisionDraw>(); //オブジェクトのグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"CapsuleGroup"); //グループに自分自身を追加 Group->IntoGroup(GetThis<CapsuleObject>()); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CAPSULE"); auto PtrDraw = AddComponent<PNTStaticDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CAPSULE"); PtrDraw->SetTextureResource(L"SKY_TX"); }
//初期化 void FixedBox::OnCreate() { auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetScale(m_Scale); PtrTransform->SetRotation(m_Rotation); PtrTransform->SetPosition(m_Position); //OBB衝突j判定を付ける auto PtrColl = AddComponent<CollisionObb>(); PtrColl->SetFixed(true); //タグをつける AddTag(L"FixedBox"); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<BcPNTStaticDraw>(); PtrDraw->SetFogEnabled(true); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetOwnShadowActive(true); PtrDraw->SetTextureResource(L"SKY_TX"); }
//初期化 void AttackBall::OnCreate() { auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetScale(0.1f, 0.1f, 0.1f); PtrTransform->SetRotation(0, 0, 0); PtrTransform->SetPosition(0, 0, 0); //Rigidbodyをつける auto PtrRedid = AddComponent<Rigidbody>(); //衝突判定をつける auto PtrCol = AddComponent<CollisionSphere>(); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); auto PtrDraw = AddComponent<BcPNTStaticDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); auto Group = GetStage()->GetSharedObjectGroup(L"AttackBall"); Group->IntoGroup(GetThis<AttackBall>()); //最初は無効にしておく SetDrawActive(false); SetUpdateActive(false); }
//初期化 void ShellBall::Create(){ //Transformだけは追加しなくても取得できる auto Ptr = GetComponent<Transform>(); Ptr->SetScale(m_NowScale); Ptr->SetRotation(0, 0, 0.0f); Ptr->SetPosition(m_StartPos); //重力をつける auto PtrGravity = AddComponent<Gravity>(); //最下地点 PtrGravity->SetBaseY(0.125f); //ジャンプスタート PtrGravity->StartJump(m_JumpVec); //影の作成 auto ShadowPtr = AddComponent<Shadowmap>(); //影の形状 ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネント auto PtrDraw = AddComponent<BasicPNTDraw>(); //メッシュの登録 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); PtrDraw->SetDiffuse(Color4(1.0f, 1.0f, 0, 1.0f)); //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<ShellBall> >(GetThis<ShellBall>()); //最初のステートをFiringStateに設定 m_StateMachine->SetCurrentState(FiringState::Instance()); //FiringStateの初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<ShellBall>()); }
//初期化 void MoveBox::Create(){ auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetScale(m_Scale); PtrTransform->SetRotation(m_Rotation); PtrTransform->SetPosition(m_Position); //操舵系のコンポーネントをつける場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); auto PtrObb = AddComponent<CollisionObb>(); PtrObb->SetFixed(true); PtrObb->SetDrawActive(true); //アクションの登録 auto PtrAction = AddComponent<Action>(); PtrAction->AddMoveBy(5.0f, Vector3(5.0f, 5.0f, 0)); PtrAction->AddMoveBy(5.0f, Vector3(-5.0f, -5.0f, 0)); //ループする PtrAction->SetLooped(true); //アクション開始 PtrAction->Run(); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<BasicPNTDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"SKY_TX"); PtrDraw->SetOwnShadowActive(true); }
//初期化 void Enemy3::OnCreate() { auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetPosition(m_StartPos); PtrTransform->SetScale(0.25f, 0.25f, 0.25f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); //操舵系の行動をつける場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); //オブジェクトのグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"EnemyGroup"); //グループに自分自身を追加 Group->IntoGroup(GetThis<GameObject>()); //分離行動をつける auto PtrSep = GetBehavior<SeparationSteering>(); PtrSep->SetGameObjectGroup(Group); auto PtrColl = AddComponent<CollisionSphere>(); //横部分のみ反発 PtrColl->SetIsHitAction(IsHitAction::Auto); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネントの設定 auto PtrDraw = AddComponent<BcPNTStaticDraw>(); //描画するメッシュを設定 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); //描画するテクスチャを設定 PtrDraw->SetTextureResource(L"WALL_TX"); //ステートマシンの構築 m_StateMachine.reset(new StateMachine<Enemy3>(GetThis<Enemy3>())); //最初のステートをEnemy3DefaultStateに設定 m_StateMachine->ChangeState(Enemy3DefaultState::Instance()); }
//初期化 void SeekObject::OnCreate(){ auto PtrTransform = AddComponent<Transform>(); PtrTransform->SetPosition(m_StartPos); PtrTransform->SetScale(0.125f, 0.25f, 0.25f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); //操舵系のコンポーネントをつける場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); //Seek操舵 auto PtrSeek = AddComponent<SeekSteering>(); //Arrive操舵 auto PtrArrive = AddComponent<ArriveSteering>(); //Arriveは無効にしておく PtrArrive->SetUpdateActive(false); //ObstacleAvoidance操舵 auto PtrObstacleAvoidance = AddComponent<ObstacleAvoidanceSteering>(); //Capsuleオブジェクトのグループを得る auto CapsuleGroup = GetStage()->GetSharedObjectGroup(L"CapsuleGroup"); vector<SPHERE> SphereVec; for (size_t i = 0; i < CapsuleGroup->size(); i++){ auto Obj = CapsuleGroup->at(i); auto PtrTrans = Obj->GetComponent<Transform>(); SPHERE Sp; Sp.m_Center = PtrTrans->GetPosition(); Sp.m_Center.y = 0.0f; Sp.m_Radius = 2.0f; SphereVec.push_back(Sp); } PtrObstacleAvoidance->SetObstacleSphereVec(SphereVec); //オブジェクトのグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"ObjectGroup"); //グループに自分自身を追加 Group->IntoGroup(GetThis<SeekObject>()); //分離行動をつける AddComponent<SeparationSteering>(Group); //Obbの衝突判定をつける auto PtrColl = AddComponent<CollisionObb>(); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<PNTStaticDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理をする SetAlphaActive(true); //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<SeekObject> >(GetThis<SeekObject>()); //最初のステートをSeekFarStateに設定 m_StateMachine->SetCurrentState(FarState::Instance()); //初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<SeekObject>()); }
//初期化 void Player::OnCreate() { //初期位置などの設定 auto Ptr = GetComponent<Transform>(); Ptr->SetScale(Vec3(m_Scale)); //直径25センチの球体 Ptr->SetRotation(0.0f, 0.0f, 0.0f); Ptr->SetPosition(m_StartPos); //衝突判定をつける auto PtrCol = AddComponent<CollisionSphere>(); //判定するだけなのでアクションはNone PtrCol->SetIsHitAction(IsHitAction::None); PsSphereParam param; //basecrossのスケーリングは直径基準なので、半径基準にする param.m_Radius = m_Scale * 0.5f; param.m_Mass = 1.0f; //慣性テンソルの計算 param.m_Inertia = BasePhysics::CalcInertiaSphere(param.m_Radius, param.m_Mass); //プレイヤーなのでスリープしない param.m_UseSleep = false; param.m_MotionType = PsMotionType::MotionTypeActive; param.m_Quat.identity(); param.m_Pos = m_StartPos; param.m_LinearVelocity = Vec3(0); auto PsPtr = AddComponent<PsSphereBody>(param); PsPtr->SetAutoTransform(false); PsPtr->SetDrawActive(true); //文字列をつける auto PtrString = AddComponent<StringSprite>(); PtrString->SetText(L""); PtrString->SetTextRect(Rect2D<float>(16.0f, 16.0f, 640.0f, 480.0f)); //影をつける(シャドウマップを描画する) auto ShadowPtr = AddComponent<Shadowmap>(); //影の形(メッシュ)を設定 ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネントの設定 auto PtrDraw = AddComponent<BcPNTStaticDraw>(); //描画するメッシュを設定 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); //描画するテクスチャを設定 PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理 SetAlphaActive(true); //カメラを得る auto PtrCamera = dynamic_pointer_cast<LookAtCamera>(OnGetDrawCamera()); if (PtrCamera) { //LookAtCameraである //LookAtCameraに注目するオブジェクト(プレイヤー)の設定 PtrCamera->SetTargetObject(GetThis<GameObject>()); PtrCamera->SetTargetToAt(Vec3(0, 0.25f, 0)); } }
//初期化 void SeekObject::OnCreate(){ auto PtrTransform = AddComponent<Transform>(); PtrTransform->SetPosition(m_StartPos); PtrTransform->SetScale(0.125f, 0.25f, 0.25f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); //操舵系のコンポーネントをつける場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); //壁を作成(時計回りの3点で定義する面) vector<Plane> PlaneVec; PlaneVec.push_back(Plane(Vector3(0, 0, 20.0f), Vector3(0, 10.0f, 20.0f), Vector3(10.0f, 0, 20.0f))); PlaneVec.push_back(Plane(Vector3(-20.0f, 0, 0), Vector3(-20.0f, 10.0f, 0), Vector3(-20.0f, 0, 10.0f))); PlaneVec.push_back(Plane(Vector3(20.0f, 0, 0), Vector3(20.0f, 10.0f, 0), Vector3(20.0f, 0, -10.0f))); PlaneVec.push_back(Plane(Vector3(0, 0, -20.0f), Vector3(0, 10.0f, -20.0f), Vector3(-10.0f, 0, -20.0f))); //壁回避をつける auto WallAvoidancePtr = AddComponent<WallAvoidanceSteering>(); WallAvoidancePtr->SetPlaneVec(PlaneVec); //Seek操舵 auto PtrSeek = AddComponent<SeekSteering>(); //Arrive操舵 auto PtrArrive = AddComponent<ArriveSteering>(); //Arriveは無効にしておく PtrArrive->SetUpdateActive(false); //オブジェクトのグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"ObjectGroup"); //グループに自分自身を追加 Group->IntoGroup(GetThis<SeekObject>()); //分離行動をつける AddComponent<SeparationSteering>(Group); //Obbの衝突判定をつける auto PtrColl = AddComponent<CollisionObb>(); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<PNTStaticDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理をする SetAlphaActive(true); //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<SeekObject> >(GetThis<SeekObject>()); //最初のステートをSeekFarStateに設定 m_StateMachine->SetCurrentState(FarState::Instance()); //初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<SeekObject>()); }
//初期化 void Player::Create(){ //初期位置などの設定 auto Ptr = GetComponent<Transform>(); Ptr->SetScale(0.25f, 0.25f, 0.25f); //直径25センチの球体 Ptr->SetRotation(0.0f, 0.0f, 0.0f); Ptr->SetPosition(0, 5.0f, 0); //Rigidbodyをつける auto PtrRedit = AddComponent<Rigidbody>(); //重力をつける auto PtrGravity = AddComponent<Gravity>(); //最下地点 PtrGravity->SetBaseY(0.125f); //衝突判定をつける auto PtrCol = AddComponent<CollisionSphere>(); //文字列をつける auto PtrString = AddComponent<StringSprite>(); PtrString->SetText(L""); PtrString->SetTextRect(Rect2D<float>(16.0f, 16.0f, 640.0f, 480.0f)); //影をつける(シャドウマップを描画する) auto ShadowPtr = AddComponent<Shadowmap>(); //影の形(メッシュ)を設定 ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネントの設定 auto PtrDraw = AddComponent<BasicPNTDraw>(); //描画するメッシュを設定 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); //描画するテクスチャを設定 PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理 SetAlphaActive(true); //0番目のビューのカメラを得る //LookAtCameraである auto PtrCamera = dynamic_pointer_cast<LookAtCamera>(GetStage()->GetCamera(0)); if (PtrCamera){ //LookAtCameraに注目するオブジェクト(プレイヤー)の設定 PtrCamera->SetTargetObject(GetThis<GameObject>()); } //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<Player> >(GetThis<Player>()); //最初のステートをDefaultStateに設定 m_StateMachine->SetCurrentState(DefaultState::Instance()); //DefaultStateの初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<Player>()); }
//初期化 void Box::Create(){ auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetScale(1.0f, 1.0f, 1.0f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); PtrTransform->SetPosition(m_StartPos); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<BasicPNTDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理 SetAlphaActive(true); }
//初期化 void ShellBall::Create(){ //Transformだけは追加しなくても取得できる auto Ptr = GetComponent<Transform>(); Ptr->SetScale(m_NowScale); Ptr->SetRotation(0, 0, 0.0f); Ptr->SetPosition(m_StartPos); //衝突判定をつける auto PtrCollision = AddComponent<CollisionSphere>(); //衝突は無効にしておく PtrCollision->SetUpdateActive(false); //砲弾のグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"ShellBallGroup"); //砲弾同士は衝突しないようにしておく PtrCollision->SetExcludeCollisionGroup(Group); //重力をつける auto PtrGravity = AddComponent<Gravity>(); //最下地点 PtrGravity->SetBaseY(0.125f); //ジャンプスタート PtrGravity->StartJump(m_JumpVec); //影の作成 auto ShadowPtr = AddComponent<Shadowmap>(); //影の形状 ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネント auto PtrDraw = AddComponent<BasicPNTDraw>(); //メッシュの登録 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); if (m_IsEnemyBall){ PtrDraw->SetDiffuse(Color4(1.0f, 1.0f, 0, 1.0f)); } else{ PtrDraw->SetDiffuse(Color4(0.0f, 1.0f, 0, 1.0f)); } //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<ShellBall> >(GetThis<ShellBall>()); //最初のステートをFiringStateに設定 m_StateMachine->SetCurrentState(FiringState::Instance()); //FiringStateの初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<ShellBall>()); }
//初期化 void Player::OnCreate() { //初期位置などの設定 auto Ptr = AddComponent<Transform>(); Ptr->SetScale(0.25f, 0.25f, 0.25f); //直径25センチの球体 Ptr->SetRotation(0.0f, 0.0f, 0.0f); Ptr->SetPosition(0, 0.125f, 0); //Rigidbodyをつける auto PtrRedid = AddComponent<Rigidbody>(); //衝突判定をつける auto PtrCol = AddComponent<CollisionSphere>(); PtrCol->SetIsHitAction(IsHitAction::Auto); //文字列をつける auto PtrString = AddComponent<StringSprite>(); PtrString->SetText(L""); PtrString->SetTextRect(Rect2D<float>(16.0f, 16.0f, 640.0f, 480.0f)); //影をつける(シャドウマップを描画する) auto ShadowPtr = AddComponent<Shadowmap>(); //影の形(メッシュ)を設定 ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネントの設定 auto PtrDraw = AddComponent<BcPNTStaticDraw>(); //描画するメッシュを設定 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); //描画するテクスチャを設定 PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理 SetAlphaActive(true); //カメラを得る auto PtrCamera = dynamic_pointer_cast<LookAtCamera>(OnGetDrawCamera()); if (PtrCamera) { //LookAtCameraである //LookAtCameraに注目するオブジェクト(プレイヤー)の設定 PtrCamera->SetTargetObject(GetThis<GameObject>()); PtrCamera->SetTargetToAt(Vec3(0, 0.25f, 0)); } //最初はAボタンはジャンプ m_PlayerAction = PlayerAction::Jump; //ステートマシンの構築 m_StateMachine.reset(new LayeredStateMachine<Player>(GetThis<Player>())); //最初のステートをPlayerDefaultにリセット m_StateMachine->Reset(PlayerDefaultState::Instance()); }
//プレートの作成 void GameStage::CreatePlate(){ //ステージへのゲームオブジェクトの追加 auto Ptr = AddGameObject<GameObject>(); auto PtrTransMatrix = Ptr->GetComponent<TransformMatrix>(); Quaternion Qt; Qt.RotationRollPitchYawFromVector(Vector3(XM_PIDIV2, 0, 0)); Matrix4X4 WorldMat; WorldMat.DefTransformation( Vector3(200.0f, 200.0f, 1.0f), Qt, Vector3(0.0f, 0.0f, 0.0f) ); PtrTransMatrix->SetWorldMatrix(WorldMat); //描画コンポーネントの追加 auto DrawComp = Ptr->AddComponent<PNTStaticDraw>(); //描画コンポーネントに形状(メッシュ)を設定 DrawComp->SetMeshResource(L"DEFAULT_SQUARE"); //描画コンポーネントテクスチャの設定 DrawComp->SetTextureResource(L"SKY_TX"); //自分に影が映りこむようにする DrawComp->SetOwnShadowActive(true); }
//プレートの作成 void GameStage::CreatePlate() { //メッシュ作成 CreatePlateMesh(); //ステージへのゲームオブジェクトの追加 auto Ptr = AddGameObject<GameObject>(); auto PtrTrans = Ptr->GetComponent<Transform>(); Quat Qt; Qt.rotationRollPitchYawFromVector(Vec3(XM_PIDIV2, 0, 0)); PtrTrans->SetScale(50.0f, 50.0f, 1.0f); PtrTrans->SetQuaternion(Qt); PtrTrans->SetPosition(0.0f, 0.0f, 0.0f); auto ColPtr = Ptr->AddComponent<CollisionRect>(); //描画コンポーネント auto DrawComp = Ptr->AddComponent<BcPNTnTStaticDraw>(); DrawComp->SetMeshResource(L"MY_PNTnT_SQUARE"); DrawComp->SetTextureResource(L"GRAY_TX"); DrawComp->SetNormalMapTextureResource(L"NORMAL3_TX"); //ラップモード DrawComp->SetSamplerState(SamplerState::LinearWrap); //スペキュラーなし DrawComp->DisableSpecular(); //フォグはきつめに DrawComp->SetFogEnabled(true); DrawComp->SetFogColor(Col4(0.3f, 0.3f,0.3f, 1.0f)); DrawComp->SetFogStart(-10.0f); DrawComp->SetFogEnd(-30.0f); //自分に影が映りこむようにする DrawComp->SetOwnShadowActive(true); }
//初期化 void Box::OnCreate(){ auto PtrTransform = AddComponent<Transform>(); PtrTransform->SetScale(1.0f, 1.0f, 1.0f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); PtrTransform->SetPosition(m_StartPos); //OBBの衝突判定をつける auto PtrObb = AddComponent<CollisionObb>(); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<PNTStaticDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"TRACE_TX"); //透明有効 SetAlphaActive(true); }
//初期化 void RollingTorus::Create(){ //Transformだけは追加しなくても取得できる auto Ptr = GetComponent<Transform>(); Ptr->SetScale(0.5f, 0.5f, 0.5f); Ptr->SetRotation(XM_PIDIV2, m_YRot, 0.0f); Ptr->SetPosition(m_StartPos); //衝突判定をつける auto PtrCollision = AddComponent<CollisionSphere>(); //トーラスのグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"RollingTorusGroup"); //トーラス同士は衝突しないようにしておく PtrCollision->SetExcludeCollisionGroup(Group); //重力をつける auto PtrGravity = AddComponent<Gravity>(); //最下地点 PtrGravity->SetBaseY(0.25f); //ジャンプスタート PtrGravity->StartJump(Vector3(0,4.0f,0)); //影の作成 auto ShadowPtr = AddComponent<Shadowmap>(); //影の形状 ShadowPtr->SetMeshResource(L"DEFAULT_TORUS"); //描画コンポーネント auto PtrDraw = AddComponent<BasicPNTDraw>(); //メッシュの登録 PtrDraw->SetMeshResource(L"DEFAULT_TORUS"); PtrDraw->SetDiffuse(Color4(1.0f, 1.0f, 0, 1.0f)); //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<RollingTorus> >(GetThis<RollingTorus>()); //最初のステートをDefaultStateに設定 m_StateMachine->SetCurrentState(TorusDefaultState::Instance()); //DefaultStateの初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<RollingTorus>()); }
void MineActor::OnEnteredWorld() { SetupFloaterComponent(); SetMeshResource("Boat:Mine_LG.ive"); // Retrieve the shader from the shader manager and assign it to this stateset dtCore::ShaderManager& shaderManager = dtCore::ShaderManager::GetInstance(); const dtCore::ShaderProgram* prototypeProgram = shaderManager.FindShaderPrototype("BumpedPhong"); dtCore::ShaderProgram* program = shaderManager.AssignShaderFromPrototype(*prototypeProgram, *GetOSGNode()); assert(program); }
//初期化 void SeekObject::Create(){ auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetPosition(m_StartPos); PtrTransform->SetScale(0.125f, 0.25f, 0.25f); PtrTransform->SetRotation(0.0f, 0.0f, 0.0f); //操舵系のコンポーネントをつける場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); //Seek操舵 auto PtrSeek = AddComponent<SeekSteering>(); //Arrive操舵 auto PtrArrive = AddComponent<ArriveSteering>(); //Arriveは無効にしておく PtrArrive->SetUpdateActive(false); //オブジェクトのグループを得る auto Group = GetStage()->GetSharedObjectGroup(L"ObjectGroup"); //グループに自分自身を追加 Group->IntoGroup(GetThis<SeekObject>()); //分離行動をつける AddComponent<SeparationSteering>(Group); //Obbの衝突判定をつける auto PtrColl = AddComponent<CollisionObb>(); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<BasicPNTDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"TRACE_TX"); //透明処理をする SetAlphaActive(true); //ステートマシンの構築 m_StateMachine = make_shared< StateMachine<SeekObject> >(GetThis<SeekObject>()); //最初のステートをSeekFarStateに設定 m_StateMachine->SetCurrentState(FarState::Instance()); //初期化実行を行う m_StateMachine->GetCurrentState()->Enter(GetThis<SeekObject>()); }
//プレートの作成 void GameStage::CreatePlate(){ auto Ptr = AddGameObject<GameObject>(); auto TrancePtr = Ptr->GetComponent<Transform>(); TrancePtr->SetScale(200.0f, 200.0f, 1.0f); Quaternion Qt; Qt.RotationRollPitchYawFromVector(Vector3(XM_PIDIV2, 0, 0)); TrancePtr->SetQuaternion(Qt); TrancePtr->SetPosition(0, 0, 0); auto DrawComp = Ptr->AddComponent<SimplePNTDraw>(); DrawComp->SetMeshResource(L"DEFAULT_SQUARE"); DrawComp->SetTextureResource(L"SKY_TX"); DrawComp->SetOwnShadowActive(true); }
//初期化 void Ball::OnCreate() { //初期位置などの設定 auto Ptr = GetComponent<Transform>(); Ptr->SetScale(0.25f, 0.25f, 0.25f); //直径25センチの球体 Ptr->SetRotation(0.0f, 0.0f, 0.0f); Ptr->SetPosition(m_StartPos); //Rigidbodyをつける auto PtrRedid = AddComponent<Rigidbody>(); PtrRedid->SetReflection(1.0f); //衝突判定をつける auto PtrCol = AddComponent<CollisionSphere>(); //デバッグ用文字列をつける auto PtrString = AddComponent<StringSprite>(); PtrString->SetText(L""); if (isOne) { PtrString->SetTextRect(Rect2D<float>(640.0f, 16.0f, 1280.0f, 320.0f)); } else { PtrString->SetTextRect(Rect2D<float>(640.0f, 320.0f, 1280.0f, 640.0f)); } //影をつける(シャドウマップを描画する) auto ShadowPtr = AddComponent<Shadowmap>(); //影の形(メッシュ)を設定 ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); //描画コンポーネントの設定 auto PtrDraw = AddComponent<BcPNTStaticDraw>(); //描画するメッシュを設定 PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); //描画するテクスチャを設定 PtrDraw->SetTextureResource(L"SKY_TX"); }
//初期化 void FixedBox::Create(){ auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetScale(m_Scale); PtrTransform->SetRotation(m_Rotation); PtrTransform->SetPosition(m_Position); //反発を実装する場合はRigidbodyをつける auto PtrRegid = AddComponent<Rigidbody>(); //衝突判定 auto PtrObb = AddComponent<CollisionObb>(); PtrObb->SetFixed(true); PtrObb->SetDrawActive(true); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); auto PtrDraw = AddComponent<BasicPNTDraw>(); PtrDraw->SetMeshResource(L"DEFAULT_CUBE"); PtrDraw->SetTextureResource(L"SKY_TX"); PtrDraw->SetOwnShadowActive(true); }
//プレートの作成 void GameStage::CreatePlate(){ //ステージへのゲームオブジェクトの追加 auto Ptr = AddGameObject<GameObject>(); //変化コンポーネント(Transform)の取得 auto TrancePtr = Ptr->GetComponent<Transform>(); //スケーリングの設定 TrancePtr->SetScale(200.0f, 200.0f, 1.0f); //回転の設定 Quaternion Qt; Qt.RotationRollPitchYawFromVector(Vector3(XM_PIDIV2, 0, 0)); TrancePtr->SetQuaternion(Qt); //位置の設定 TrancePtr->SetPosition(0, 0, 0); //描画コンポーネントの追加 auto DrawComp = Ptr->AddComponent<SimplePNTDraw>(); //描画コンポーネントに形状(メッシュ)を設定 DrawComp->SetMeshResource(L"DEFAULT_SQUARE"); //描画コンポーネントテクスチャの設定 DrawComp->SetTextureResource(L"SKY_TX"); //自分に影が映りこむようにする DrawComp->SetOwnShadowActive(true); //徘徊範囲がわかるようにもう一つプレートを付ける Ptr = AddGameObject<GameObject>(); TrancePtr = Ptr->GetComponent<Transform>(); TrancePtr->SetScale(40.0f, 40.0f, 1.0f); Qt.RotationRollPitchYawFromVector(Vector3(XM_PIDIV2, 0, 0)); TrancePtr->SetQuaternion(Qt); //下のプレートと混じってしまうので少し上にあげる TrancePtr->SetPosition(0, 0.01f, 0); DrawComp = Ptr->AddComponent<SimplePNTDraw>(); DrawComp->SetMeshResource(L"DEFAULT_SQUARE"); DrawComp->SetTextureResource(L"WALL_TX"); DrawComp->SetOwnShadowActive(true); }
//初期化 void Enemy::OnCreate() { auto PtrTransform = GetComponent<Transform>(); PtrTransform->SetPosition(m_StartPosition); PtrTransform->SetScale(m_Scale); PtrTransform->SetRotation(m_StartRotation); //Rigidbodyをつける auto PtrRigid = AddComponent<Rigidbody>(); //パス検索 auto MapPtr = m_CelMap.lock(); if (!MapPtr) { throw BaseException( L"セルマップが不定です", L"if (!MapPtr) ", L" Enemy::OnCreate()" ); } auto PathPtr = AddComponent<PathSearch>(MapPtr); //SPの衝突判定をつける auto PtrColl = AddComponent<CollisionSphere>(); PtrColl->SetIsHitAction(IsHitAction::Auto); //影をつける auto ShadowPtr = AddComponent<Shadowmap>(); ShadowPtr->SetMeshResource(L"DEFAULT_SPHERE"); auto PtrDraw = AddComponent<BcPNTStaticDraw>(); PtrDraw->SetFogEnabled(true); PtrDraw->SetMeshResource(L"DEFAULT_SPHERE"); PtrDraw->SetTextureResource(L"TRACE2_TX"); //透明処理をする SetAlphaActive(true); m_StateMachine = make_shared<StateMachine<Enemy>>(GetThis<Enemy>()); m_StateMachine->ChangeState(EnemyDefault::Instance()); }
//プレートの作成 void GameStage::CreatePlate() { //ステージへのゲームオブジェクトの追加 auto Ptr = AddGameObject<GameObject>(); auto PtrTrans = Ptr->GetComponent<Transform>(); Quat Qt; Qt.rotationRollPitchYawFromVector(Vec3(XM_PIDIV2, 0, 0)); PtrTrans->SetScale(200.0f, 200.0f, 1.0f); PtrTrans->SetQuaternion(Qt); PtrTrans->SetPosition(0.0f, 0.0f, 0.0f); //描画コンポーネントの追加 auto DrawComp = Ptr->AddComponent<PNTStaticDraw>(); //描画コンポーネントに形状(メッシュ)を設定 DrawComp->SetMeshResource(L"DEFAULT_SQUARE"); //自分に影が映りこむようにする DrawComp->SetOwnShadowActive(true); //描画コンポーネントテクスチャの設定 DrawComp->SetTextureResource(L"SKY_TX"); }
//初期化 void CustomDrawBox::Create(){ //Transformだけは追加しなくても取得できる auto Ptr = GetComponent<Transform>(); Ptr->SetScale(m_StartScale); Ptr->SetPosition(m_StartPos); Ptr->SetRotation(m_StartRotation); //シェーダの作成 //コンスタントバッファ m_ConstantBuffer = make_shared<CBuffer<ConstantBuffer>>(); //頂点シェーダ m_VirtexShader = make_shared<VShader<VertexPositionNormalTexture>>(App::GetApp()->m_wstrRelativeShadersPath + L"VSSimpleBase.cso"); //ピクセルシェーダー m_PixelShader = make_shared<PShader>(App::GetApp()->m_wstrRelativeShadersPath + L"PSSimpleBase.cso"); //影をつける(シャドウマップを描画する) auto ShadowPtr = AddComponent<Shadowmap>(); //影の形(メッシュ)を設定 ShadowPtr->SetMeshResource(L"DEFAULT_CUBE"); //透明処理(描画順制御のため) SetAlphaActive(true); }
void SquareSprite::OnCreateWithParam(const Vector3 & Pos) { //位置の設定 auto transform = GetComponent<Transform>(); transform->SetPosition(Pos); transform->SetScale(Vector3(128.0f, 128.0f, 0.5f)); transform->SetRotation(0.0, 0.0f, 0.0); float HelfSize = 0.5f; //頂点配列 vector<VertexPositionColor> vertices = { { VertexPositionColor(Vector3(-HelfSize, HelfSize, 0), Color4(1.0f, 1.0f, 1.0f, 1.0f)) }, { VertexPositionColor(Vector3(HelfSize, HelfSize, 0), Color4(1.0f, 1.0f, 0.0f, 1.0f)) }, { VertexPositionColor(Vector3(-HelfSize, -HelfSize, 0), Color4(0.0f, 1.0f, 1.0f, 1.0f)) }, { VertexPositionColor(Vector3(HelfSize, -HelfSize, 0), Color4(1.0f, 1.0f, 1.0f, 1.0f)) }, }; //インデックス配列 vector<uint16_t> indices = { 0, 1, 2, 1, 3, 2 }; //メッシュの設定 インデックスと頂点の情報を相手に教える auto DrawComponent = AddComponent<SpriteDraw>(); DrawComponent->SetMeshResource(vertices, indices); }