#include "SunClientPrecompiledHeader.h" #include "CharacterCreate.h" #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #include "ObjectManager.h" #include "Player.h" #include "CharacterScene.h" #include "AppearanceResourceCode.h" #include "Camera.h" #include "InterfaceManager.h" #include "CastDialog.h" cCharacterCreate* cCharacterCreate::ms_instance = NULL; // //namespace CHARACTERSCENE //{ // const DWORD GENERATE_KEY = MONSTER_OBJECT_KEY - 100; // const DWORD BERSERKER = GENERATE_KEY; // const DWORD DRAGON = GENERATE_KEY + 2; // const DWORD SHADOW = GENERATE_KEY + 4; // const DWORD VALKYRIE = GENERATE_KEY + 6; // const DWORD ELEMENTALIST = GENERATE_KEY + 8; // const DWORD MYSTIC = GENERATE_KEY + 10; // // const DWORD BERSERKER_W = GENERATE_KEY + 1; // const DWORD DRAGON_W = GENERATE_KEY + 3; // const DWORD SHADOW_W = GENERATE_KEY + 5; // const DWORD VALKYRIE_W = GENERATE_KEY + 7; // const DWORD ELEMENTALIST_W = GENERATE_KEY + 9; // // const DWORD MYSTIC_W = GENERATE_KEY + 11; // const DWORD HELLROID = GENERATE_KEY + 12; //#ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID // const DWORD PLAYER_LIST = GENERATE_KEY + 13; //#endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID // const DWORD THEOTHERS = NPC_OBJECT_KEY - 100; // // const DWORD kBaseCinematicCharacter[(kTempClassTypeMax - 1)*2] = // { // // ´ëÇ¥ Ŭ·¡½º // CHARACTERSCENE::BERSERKER, // CHARACTERSCENE::DRAGON, // CHARACTERSCENE::SHADOW, // CHARACTERSCENE::VALKYRIE_W, // CHARACTERSCENE::ELEMENTALIST_W, // CHARACTERSCENE::MYSTIC_W, // // Ãß°¡µÈ Ŭ·¡½º // CHARACTERSCENE::BERSERKER_W, // CHARACTERSCENE::DRAGON_W, // CHARACTERSCENE::SHADOW_W, // CHARACTERSCENE::VALKYRIE, // CHARACTERSCENE::ELEMENTALIST, // CHARACTERSCENE::MYSTIC, // }; //}; cCharacterCreate::cCharacterCreate() { ms_instance = this; } void cCharacterCreate::Initialize() { m_ZomeRate = 0.0f; SetVector(&m_CameraPosition, -47.31f, -4.914f, 1.2f); SetVector(&m_CharacterPosition, -47.286f, 0.f, 0.42f); SetVector(&m_TargetPosition, -47.31f, 0.f, 1.2f); } WzVector cCharacterCreate::GetStandPosition( eCHAR_TYPE CharacterType ) { WzVector Position; Position.x = GetCharacterX(CharacterType); Position.y = GetCharacterY(CharacterType); #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID Position.z = GetCharacterZ(CharacterType); #else Position.z = m_CharacterPosition.z; #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID return Position; } void cCharacterCreate::GetCameraPosition( eCHAR_TYPE CharacterType, OUT WzVector& CameraPosition, OUT WzVector& CameraTargetPosition ) { // °¢ ij¸¯Åͺ° offset static float ho1 = 0.4f; static float ho2 = 0.4f; static float ho3 = 0.2f; static float ho4 = 0.2f; static float ho5 = 0.2f; static float ho6 = 0.0f; static float ho7 = 0.4f; //_NA_000000_20130812_NEW_CHARACTER_HELLROID static float ho8 = 0.2f; //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE WzVector target_position = m_TargetPosition; switch (CharacterType) { case eCHAR_BERSERKER: target_position.z += ho1 * m_ZomeRate; break; case eCHAR_DRAGON: target_position.z += ho2 * m_ZomeRate; break; case eCHAR_SHADOW: target_position.z += ho3 * m_ZomeRate; break; case eCHAR_VALKYRIE: target_position.z += ho4 * m_ZomeRate; break; case eCHAR_ELEMENTALIST: target_position.z += ho5 * m_ZomeRate; break; case eCHAR_MYSTIC: target_position.z += ho6 * m_ZomeRate; break; case eCHAR_HELLROID: target_position.z += ho7 * m_ZomeRate; break; //_NA_000000_20130812_NEW_CHARACTER_HELLROID case eCHAR_WITCHBLADE: target_position.z += ho8 * m_ZomeRate; break; //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE } CameraPosition = m_CameraPosition; CameraTargetPosition = target_position; WzVector Length = target_position - m_CameraPosition; Length *= 0.5f; Length *= m_ZomeRate; CameraPosition += Length; } void cCharacterCreate::ResetCameraPosition( eCHAR_TYPE CharacterType ) { m_CameraPosition.x = GetCameraX(CharacterType); m_TargetPosition.x = m_CameraPosition.x; m_ZomeRate = 0.0f; } void cCharacterCreate::AddCinematicCharacter(DWORD class_code, DWORD object_key, int bone_index_for_position) { Player* cinematic_character = static_cast(g_ObjectManager.Add(object_key, PLAYER_OBJECT, class_code, FALSE)); cinematic_character->RefreshAppearRender(); SetObjectPosToCinematicMatrix(cinematic_character, bone_index_for_position); } void cCharacterCreate::ZoomCamera( float rate) { m_ZomeRate += rate; if( m_ZomeRate > 1.0f ) m_ZomeRate = 1.0f; if( m_ZomeRate < 0.0f ) m_ZomeRate = 0.0f; } void cCharacterCreate::SetObjectPosToCinematicMatrix(Object *pObject,int iboneindex) { eCHAR_TYPE class_type = eCHAR_NONE; Character* character = static_cast(pObject); if (character) { class_type = character->GetClass();//character->GetClass(); DWORD class_code = eCHAR_NONE; ClassCodeEx class_code_ex; class_code_ex.class_type = class_type; class_code_ex.gender = character->GetGender(); class_code = class_code_ex.class_code; m_CharacterPosition.x = GetCharacterX(GetRace(class_code)); m_CharacterPosition.y = GetCharacterY(GetRace(class_code)); m_CameraPosition.x = GetCameraX(GetRace(class_code)); m_TargetPosition.x = m_CameraPosition.x; m_ZomeRate = 0.0f; } WzVector vPos = m_CharacterPosition; if( pObject ) { pObject->SetPosition( vPos ); pObject->SetDirection(m_CameraPosition, vPos); } } void cCharacterCreate::MakeCinematicCharacter() { const int kBoneIndexForCinematic[kTempClassTypeMax - 1] = {2, 3, 38, 33, 4, 4}; DWORD object_key = CHARACTERSCENE::BERSERKER; eCHAR_TYPE class_Image_code = eCHAR_NONE; Player* cinematic_character = NULL; ClassCodeEx class_code_ex; for ( BYTE i = eCHAR_BERSERKER; i < kTempClassTypeMax; ++i) { eCHAR_TYPE CharacterType = (eCHAR_TYPE)i; // ³²¼º class_code_ex.class_type = CharacterType; class_code_ex.gender = GenderType::kMale; class_Image_code = ResourceCode::GetImageClassType( static_cast(class_code_ex.class_type), static_cast(class_code_ex.gender)); if( Player* cinematic_character = static_cast(g_ObjectManager.Add(object_key++, PLAYER_OBJECT, class_code_ex.class_code, FALSE)) ) { cinematic_character->RefreshAppearRender(); WzVector CameraPosition = m_CameraPosition; WzVector CharacterPosition = m_CharacterPosition; CameraPosition.x = GetCharacterX( GetRace(class_code_ex.class_code) ); CharacterPosition.x = GetCharacterX( GetRace(class_code_ex.class_code) ); #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID if ( i == eCHAR_HELLROID ) { CharacterPosition.z = GetCharacterZ(GetRace(class_code_ex.class_code) ); } #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID cinematic_character->SetPosition( CharacterPosition ); cinematic_character->SetDirection( CameraPosition, CharacterPosition ); cinematic_character->SetAnimation( StrToWzID("N001"), TRUE ); } //¿©¼º class_code_ex.class_type = CharacterType; class_code_ex.gender = GenderType::kFemale; class_Image_code = ResourceCode::GetImageClassType( static_cast(class_code_ex.class_type), static_cast(class_code_ex.gender)); if( Player* cinematic_character = static_cast(g_ObjectManager.Add(object_key++, PLAYER_OBJECT, class_code_ex.class_code, FALSE)) ) { cinematic_character->RefreshAppearRender(); WzVector CameraPosition = m_CameraPosition; WzVector CharacterPosition = m_CharacterPosition; CameraPosition.x = GetCharacterX( GetRace(class_code_ex.class_code) ); CharacterPosition.x = GetCharacterX( GetRace(class_code_ex.class_code) ); #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID if ( i == eCHAR_WITCHBLADE ) { CharacterPosition.z = GetCharacterZ(GetRace(class_code_ex.class_code) ); } #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID cinematic_character->SetPosition( CharacterPosition ); cinematic_character->SetDirection( CameraPosition, CharacterPosition ); cinematic_character->SetAnimation( StrToWzID("N001"), TRUE ); } } } void cCharacterCreate::ProcessCamera(eCHAR_TYPE CharacterType) { // Ä«¸Þ¶ó ÃʱâÈ­ WzVector wzCamera, wzTarget; static float ho1 = 0.4f; static float ho2 = 0.4f; static float ho3 = 0.2f; static float ho4 = 0.2f; static float ho5 = 0.2f; static float ho6 = 0.0f; static float ho7 = 0.4f; //_NA_000000_20130812_NEW_CHARACTER_HELLROID static float ho8 = 0.2f; //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE WzVector target_position = m_TargetPosition; switch (CharacterType) { case eCHAR_BERSERKER: target_position.z += ho1 * m_ZomeRate; break; case eCHAR_DRAGON: target_position.z += ho2 * m_ZomeRate; break; case eCHAR_SHADOW: target_position.z += ho3 * m_ZomeRate; break; case eCHAR_VALKYRIE: target_position.z += ho4 * m_ZomeRate; break; case eCHAR_ELEMENTALIST: target_position.z += ho5 * m_ZomeRate; break; case eCHAR_MYSTIC: target_position.z += ho6 * m_ZomeRate; break; case eCHAR_HELLROID: target_position.z += ho7 * m_ZomeRate; break; //_NA_000000_20130812_NEW_CHARACTER_HELLROID case eCHAR_WITCHBLADE: target_position.z += ho8 * m_ZomeRate; break; //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE } wzCamera = m_CameraPosition; wzTarget = target_position; WzVector Length = target_position - m_CameraPosition; Length *= 0.5f; Length *= m_ZomeRate; wzCamera += Length; //SetVector(&wzCamera, m_camera.x, m_camera.y, m_camera.z);// -47.31f, -3.784f, 1.2f); //SetVector(&wzTarget, m_target.x, m_target.y, m_target.z);//-47.286f, 0.f, 0.42f); g_Camera.SetCameraFromTo(wzCamera,wzTarget); g_Camera.SetForceSpringCamera( FALSE ); g_Camera.UpdateCamera(); } eCHAR_TYPE cCharacterCreate::GetRace(DWORD code) { eCHAR_TYPE class_type = eCHAR_NONE; ClassCodeEx class_code; class_code.class_code = code; switch (class_code.class_type) { case eCHAR_BERSERKER: if (class_code.gender== GenderType::kMale) { class_type = eCHAR_BERSERKER; } else { class_type = eCHAR_VALKYRIE; } break; case eCHAR_DRAGON: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_DRAGON; } else { class_type = eCHAR_VALKYRIE; } break; case eCHAR_SHADOW: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_SHADOW; } else { class_type = eCHAR_ELEMENTALIST; } break; case eCHAR_VALKYRIE: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_DRAGON; } else { class_type = eCHAR_VALKYRIE; } break; case eCHAR_ELEMENTALIST: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_SHADOW; } else { class_type = eCHAR_ELEMENTALIST; } break; case eCHAR_MYSTIC: /*if (class_code.gender == GenderType::kMale) { class_type = eCHAR_MYSTIC; } else*/ { class_type = eCHAR_MYSTIC; } break; case eCHAR_HELLROID: { //_NA_000000_20130812_NEW_CHARACTER_HELLROID class_type = eCHAR_HELLROID; } break; case eCHAR_WITCHBLADE: { //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE class_type = eCHAR_WITCHBLADE; } break; } return class_type; } float cCharacterCreate::GetCameraX(eCHAR_TYPE CharacterType) { float x_position = 0.0f; if (CharacterType == eCHAR_BERSERKER) { x_position = -47.375f; } else { x_position = GetCharacterX(CharacterType); } return x_position; } float cCharacterCreate::GetCharacterX(eCHAR_TYPE CharacterType) { float position = 0.0f; switch (CharacterType) { case eCHAR_BERSERKER: position = -47.325f; break; case eCHAR_DRAGON: position = -28.373f; break; case eCHAR_SHADOW: position = -9.457f; break; case eCHAR_MYSTIC: position = 9.476f; break; case eCHAR_VALKYRIE: position = 28.418f; break; case eCHAR_ELEMENTALIST: position = 47.311f; break;; case eCHAR_HELLROID: //_NA_000000_20130812_NEW_CHARACTER_HELLROID position = 66.206f; break; case eCHAR_WITCHBLADE: //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE position = 85.13f; break; } return position; } float cCharacterCreate::GetCharacterY(eCHAR_TYPE CharacterType) { return 0.0f; //float position = 0.0f; //switch (CharacterType) //{ //case eCHAR_BERSERKER: // position = 0.f; // break; //case eCHAR_DRAGON: // position = 0.f; // break; //case eCHAR_SHADOW: // position = 0.f; // break; //case eCHAR_MYSTIC: // position = 0.0f;//-1.255f; // break; //case eCHAR_VALKYRIE: // position = 0.f; // break; //case eCHAR_ELEMENTALIST: // position = 0.f; // break;; //} //return position; } #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID float cCharacterCreate::GetCharacterZ( eCHAR_TYPE class_type ) { #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE if ( class_type == eCHAR_HELLROID || class_type == eCHAR_WITCHBLADE ) #else if ( class_type == eCHAR_HELLROID ) #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE { return (m_CharacterPosition.z - 0.2f); } else { return m_CharacterPosition.z; } } #endif // _NA_000000_20130812_NEW_CHARACTER_HELLROID #endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT