Component* GameObject::CreateSyncedTriggerComponent(const Ogre::Vector3& pos, void* data){ TriggerDef& def = *static_cast<TriggerDef*>(data); SyncedTriggerComponent* stc = new SyncedTriggerComponent; AddComponent(stc); AddUpdateable(stc); stc->Init(pos, GetGameObjectManager()->GetPhysicsEngine(), &def); return stc; }
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::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; };