GameObject* GameObjectManager::CreatePlane(const Ogre::Vector3& position, void* data, const Ogre::String& id){ GameObject* go = new GameObject(GAME_OBJECT_PLANE); NodeComponent* node_comp = new NodeComponent; go->AddComponent(node_comp); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); RigidbodyComponent* rc = new RigidbodyComponent; go->AddComponent(rc); node_comp->Init(position, m_scene_manager); PlaneDef& plane_def = *static_cast<PlaneDef*>(data); mrc->Init(plane_def.plane_name, m_scene_manager); mrc->GetEntity()->setMaterialName(plane_def.material_name); mrc->GetEntity()->setCastShadows(false); RigidBodyDef def; def.body_type = STATIC_BODY; def.collider_type = COLLIDER_TRIANGLE_MESH_SHAPE; def.friction = plane_def.friction; def.restitution = plane_def.restitution; def.mass = 0.0f; def.collision_filter.filter = COL_WORLD_STATIC; def.collision_filter.mask = COL_PLAYER | COL_BUBBLE | COL_TOTT; rc->Init(position, mrc->GetEntity(), m_physics_engine, def); rc->GetCollisionDef().flag = COLLISION_FLAG_STATIC; return go; }
GameObject* GameObjectManager::CreateQuestItem(const Ogre::Vector3& position, void* data, const Ogre::String& id){ GameObject* tott = *static_cast<GameObject**>(data); //Ogre::SceneNode* node = static_cast<NodeComponent*>(tott->GetComponent(COMPONENT_NODE))->GetSceneNode(); //TottDef tott_def = static_cast<TottController*>(tott->GetComponent(COMPONENT_CHARACTER_CONTROLLER))->m_def; QuestItemDef& quest_item_def = *static_cast<QuestItemDef*>(data); GameObject* go = new GameObject(GAME_OBJECT_QUEST_ITEM); DestroyCallbackComponent* dcc = new DestroyCallbackComponent; go->AddComponent(dcc); NodeComponent* node_comp = new NodeComponent; go->AddComponent(node_comp); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); RigidbodyComponent* rc = new RigidbodyComponent; go->AddComponent(rc); RotationComponent* rot_comp = new RotationComponent; go->AddComponent(rot_comp); go->AddUpdateable(rot_comp); StringComponent* string_comp = new StringComponent; go->AddComponent(string_comp); string_comp->Init(quest_item_def.id); std::function<void()> func = [&] { IEvent evt; evt.m_type = EVT_QUEST_ITEM_REMOVE; m_message_system->Notify(&evt); }; dcc->Init(func); std::ostringstream stream; stream << "Quest_Item_" << m_quest_item_iterations; m_quest_item_iterations++; Ogre::String quest_item_id = stream.str(); node_comp->Init(position, m_scene_manager); node_comp->SetId(quest_item_id); mrc->Init(quest_item_def.mesh_name, m_scene_manager); RigidBodyDef body_def; body_def.body_type = DYNAMIC_BODY; body_def.collider_type = COLLIDER_SPHERE; body_def.friction = 1.0; body_def.mass = 1.0f; body_def.collision_filter.filter = COL_QUESTITEM; body_def.collision_filter.mask = COL_PLAYER | COL_TOTT | COL_WORLD_STATIC | COL_BUBBLE; body_def.sync_orientation = false; rc->Init(position, mrc->GetEntity(), m_physics_engine, body_def); rc->GetRigidbody()->setGravity(btVector3(0.0f, -0.3f, 0.0f)); rc->GetRigidbody()->setContactProcessingThreshold(btScalar(0)); rc->GetRigidbody()->setActivationState(DISABLE_DEACTIVATION); rc->GetRigidbody()->setDamping(0.5, 0.5); rc->SetId(quest_item_id); rot_comp->Init(node_comp->GetSceneNode(), VariableManager::GetSingletonPtr()->GetAsFloat("QuestItemRotationSpeed")); return go; };
GameObject* GameObjectManager::CreateSpeechBubble(const Ogre::Vector3& position, void* data, const Ogre::String& id){ //Ogre::SceneNode* node = *static_cast<Ogre::SceneNode**>(data); std::ostringstream stream; stream << "Speech_Bubble_" << m_speech_bubble_iterations; m_speech_bubble_iterations++; Ogre::String spbubble_id = stream.str(); GameObject* tott = *static_cast<GameObject**>(data); Ogre::SceneNode* node = static_cast<NodeComponent*>(tott->GetComponent(COMPONENT_NODE))->GetSceneNode(); TottDef tott_def = static_cast<TottController*>(tott->GetComponent(COMPONENT_CHARACTER_CONTROLLER))->m_def; static_cast<TottController*>(tott->GetComponent(COMPONENT_CHARACTER_CONTROLLER))->SetSpeechBubble(spbubble_id); GameObject* go = new GameObject(GAME_OBJECT_SPEECH_BUBBLE, spbubble_id); NodeComponent* node_comp = new NodeComponent; go->AddComponent(node_comp); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); SyncedTriggerComponent* trc = new SyncedTriggerComponent; go->AddComponent(trc); go->AddUpdateable(trc); SpeechBubbleComponent* sbcomp = new SpeechBubbleComponent; go->AddComponent(sbcomp); go->AddUpdateable(sbcomp); node_comp->Init(node, m_scene_manager); node_comp->SetId(spbubble_id); mrc->Init("PratBubblaCherry.mesh", m_scene_manager, node_comp->GetSceneNode()->getName());//, node->getName()); sbcomp->Init(node, m_scene_manager, tott); /* node_comp->Init(position, m_scene_manager); mrc->Init("PratBubbla.mesh", m_scene_manager);//, m_temp_node->getName());//, node->getName()); sbcomp->Init(m_temp_node, m_scene_manager); */ TriggerDef trdef; trdef.body_type = DYNAMIC_BODY; trdef.collider_type = COLLIDER_SPHERE; trdef.mass = 0.0f; trdef.radius = 2.5f; trdef.collision_filter.filter = COL_WORLD_TRIGGER; trdef.collision_filter.mask = COL_PLAYER; trc->Init(position, m_physics_engine, &trdef); return go; };
GameObject* GameObjectManager::CreatePlane(const Ogre::Vector3& position, void* data){ GameObject* go = new GameObject(GAME_OBJECT_PLANE); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); RigidbodyComponent* rc = new RigidbodyComponent; go->AddComponent(rc); PlaneDef& plane_def = *static_cast<PlaneDef*>(data); mrc->Init(plane_def.plane_name, m_scene_manager); mrc->GetEntity()->setMaterialName(plane_def.material_name); rc->Init(position, mrc->GetEntity(), m_physics_engine, 0.0f, COLLIDER_TRIANGLE_MESH_SHAPE, STATIC_BODY); rc->GetRigidbody()->setRestitution(0.5); rc->GetRigidbody()->setFriction(0.5f); return go; }
GameObject* GameObjectManager::CreatePinkBubble(const Ogre::Vector3& position, void* data){ GameObject* go = new GameObject(GAME_OBJECT_BLUE_BUBBLE); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); RigidbodyComponent* rc = new RigidbodyComponent; go->AddComponent(rc); mrc->Init("sphere.mesh", m_scene_manager); Ogre::Vector3 scale(0.002,0.002,0.002); mrc->GetSceneNode()->setScale(scale); //mrc->GetEntity()->setMaterialName(); rc->Init(position, mrc->GetEntity(), m_physics_engine, 1.0f, COLLIDER_SPHERE, DYNAMIC_BODY); rc->GetRigidbody()->setGravity(btVector3(0.0f, 0.0f, 0.0f)); rc->GetRigidbody()->setLinearFactor(btVector3(1,0,1)); return go; }
GameObject* GameObjectManager::CreatePinkBubble(const Ogre::Vector3& position, void* data, const Ogre::String& id){ BubbleDef& def = *static_cast<BubbleDef*>(data); GameObject* go = new GameObject(GAME_OBJECT_PINK_BUBBLE); BubbleController* bc = new BubbleController; go->AddComponent(bc); go->AddUpdateable(bc); NodeComponent* node_comp = new NodeComponent; go->AddComponent(node_comp); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); Point2PointConstraintComponent* cons = new Point2PointConstraintComponent; go->AddComponent(cons); RigidbodyComponent* rc = new RigidbodyComponent; go->AddComponent(rc); node_comp->Init(position, m_scene_manager); mrc->Init("PinkBubble.mesh", m_scene_manager); mrc->GetEntity()->setRenderQueueGroup(60); Ogre::Vector3 scale(def.start_scale); node_comp->GetSceneNode()->setScale(scale); //bc->SetCustomVariables(VariableManager::GetSingletonPtr()->GetAsFloat("Pink_Bubble_Life_Time")); //mrc->GetEntity()->setMaterialName("PinkBubble"); RigidBodyDef body_def; body_def.body_type = DYNAMIC_BODY; body_def.collider_type = COLLIDER_SPHERE; body_def.friction = def.friction; body_def.mass = 1.0f; body_def.collision_filter.filter = COL_BUBBLE; body_def.collision_filter.mask = COL_PLAYER | COL_TOTT | COL_BUBBLE | COL_WORLD_STATIC | COL_QUESTITEM; rc->Init(position, mrc->GetEntity(), m_physics_engine, body_def); rc->GetRigidbody()->setGravity(btVector3(0.0f, 0.0f, 0.0f)); //rc->GetRigidbody()->setLinearFactor(btVector3(1,0,1)); rc->GetRigidbody()->setContactProcessingThreshold(btScalar(0)); rc->GetRigidbody()->setActivationState(DISABLE_DEACTIVATION); //rc->GetRigidbody()->setDamping(0.5, 0.5); rc->SetId("body"); cons->Init(m_physics_engine,rc->GetRigidbody(), def.connection_body, btVector3(0,0,0), btVector3(0,0,0)); bc->Init(m_physics_engine, m_message_system, VariableManager::GetSingletonPtr()->GetAsFloat("OnBubbleImpulse"), VariableManager::GetSingletonPtr()->GetAsFloat("OnBubbleMaxVelocity"), def.start_scale); this->CheckBubbleSize(); m_bubbles.push_back(go); return go; }
GameObject* GameObjectManager::CreateLeaf(const Ogre::Vector3& position, void* data, const Ogre::String& id){ ParticleDef& particleDef = *static_cast<ParticleDef*>(data); GameObject* go = new GameObject(GAME_OBJECT_LEAF); ParticleComponent* particle = new ParticleComponent; go->AddComponent(particle); NodeComponent* node_comp = new NodeComponent; go->AddComponent(node_comp); MeshRenderComponent* mrc = new MeshRenderComponent; go->AddComponent(mrc); BobbingComponent* bc = new BobbingComponent; go->AddComponent(bc); go->AddUpdateable(bc); TriggerComponent* stc = new TriggerComponent; go->AddComponent(stc); Ogre::Vector3 scale = Ogre::Vector3(0.6f); node_comp->Init(position, m_scene_manager); node_comp->GetSceneNode()->setPosition(Ogre::Vector3(position)); node_comp->GetSceneNode()->setScale(scale); mrc->Init("Collectable_Leaf.mesh", m_scene_manager); mrc->GetEntity()->setMaterialName("CollectibleLeaf"); bc->Init(node_comp->GetSceneNode()); std::ostringstream stream; stream << "Leaf_" << m_leaf_iterations; m_leaf_iterations++; Ogre::String leaf_id = stream.str(); particle->Init(m_scene_manager, leaf_id, particleDef.particle_name, node_comp->GetSceneNode()->getPosition(), node_comp->GetSceneNode()); //particle->CreateParticle(node_comp->GetSceneNode(), node_comp->GetSceneNode()->getPosition(), Ogre::Vector3(0,-1.8f,0)); TriggerDef trdef; trdef.body_type = STATIC_BODY; trdef.collider_type = COLLIDER_SPHERE; trdef.mass = 0.0f; trdef.radius = 0.4f; trdef.collision_filter.filter = COL_WORLD_TRIGGER; trdef.collision_filter.mask = COL_PLAYER; stc->Init(position, m_physics_engine, trdef); return go; }
GameObject* GameObjectManager::CreateQuestTott(const Ogre::Vector3& position, void* data, const Ogre::String& id){ static int quest_tott_counter = 0; Ogre::String tott_id = "Tott" + NumberToString(quest_tott_counter); TottDef& def = *static_cast<TottDef*>(data); GameObject* go = new GameObject(GAME_OBJECT_QUEST_TOTT, tott_id); NodeComponent* node_comp = new NodeComponent; go->AddComponent(node_comp); TottAIComponent* ai_comp = new TottAIComponent; go->AddComponent(ai_comp); go->AddUpdateable(ai_comp); AnimationComponent* acomp = new AnimationComponent; go->AddComponent(acomp); go->AddUpdateable(acomp); CharacterController* contr = new CharacterController; go->AddComponent(contr); go->AddUpdateable(contr); ChildSceneNodeComponent* child_node = new ChildSceneNodeComponent; go->AddComponent(child_node); MeshRenderComponent* spbubble = new MeshRenderComponent; go->AddComponent(spbubble); SyncedTriggerComponent* trcomp = new SyncedTriggerComponent; go->AddComponent(trcomp); go->AddUpdateable(trcomp); TottController* tott_contr = new TottController; go->AddComponent(tott_contr); go->AddUpdateable(tott_contr); node_comp->Init(position, m_scene_manager); node_comp->SetId(tott_id); def.node_name = node_comp->GetSceneNode()->getName(); acomp->Init(def.mesh_name, m_scene_manager); child_node->Init(Ogre::Vector3(0,def.speech_bubble_y,0), "speech_bubble", node_comp->GetSceneNode()); child_node->SetId("speech_bubble"); spbubble->Init(def.quest_item_mesh_name, m_scene_manager, "speech_bubble"); child_node->GetNode()->attachObject(spbubble->GetEntity()); spbubble->GetEntity()->setCastShadows(false); child_node->GetNode()->setScale(0,0,0); if (def.type_name == "Hidehog"){ acomp->AddAnimationState("Run", true); } else if (def.type_name == "Kittyshroom"){ acomp->AddAnimationState("walk", true); } else if (def.type_name == "Nightcap"){ acomp->AddAnimationState("walk", true); } else if (def.type_name == "Shroomfox"){ acomp->AddAnimationState("idle", true); } else{ acomp->AddAnimationState("Run", true); } ai_comp->Init(def.ai_states); m_sound_manager->GetTottNode(node_comp->GetSceneNode()->getName()); contr->Init(position, m_physics_engine, def.character_controller); contr->GetRigidbody()->setContactProcessingThreshold(btScalar(0)); contr->GetRigidbody()->setActivationState(DISABLE_DEACTIVATION); tott_contr->Init(m_physics_engine, m_scene_manager, def.idle_anim, def.excited_anim, def.quest_item); TriggerDef trdef; trdef.body_type = STATIC_BODY; trdef.collider_type = COLLIDER_SPHERE; trdef.collision_filter.filter = COL_WORLD_TRIGGER; trdef.collision_filter.mask = COL_PLAYER; trdef.mass = 1.0f; trdef.radius = 4.0f; trcomp->Init(position, m_physics_engine, &trdef); acomp->GetEntity()->setRenderingDistance(100.0f); quest_tott_counter++; return go; };