Exemplo n.º 1
0
	public void StartABattle( GameObject _LeftCharacter , UnitDataStruct _LeftUnitDataStruct, 
	                         GameObject _RightCharacter , UnitDataStruct _RightUnitDataStruct )
	{
		if( null == _LeftCharacter ||
		   null == _RightCharacter ||
		   null == _LeftUnitDataStruct ||
		   null == _RightUnitDataStruct )
		{
			Debug.LogWarning( "StartABattle() null" ) ;
			return ;
		}

		UnitData leftUnitData = _LeftCharacter.AddComponent<UnitData>() ;
		leftUnitData.m_UnitDataStruct = _LeftUnitDataStruct ;

		UnitData rightUnitData = _RightCharacter.AddComponent<UnitData>() ;
		rightUnitData.m_UnitDataStruct = _RightUnitDataStruct ;

		m_CharacterLeft = _LeftCharacter ;
		m_CharacterRight = _RightCharacter ;
		m_FightSystemState = FightSystemState.BattleInitialize ;
	}
Exemplo n.º 2
0
	// Update is called once per frame
	void Update () 
	{
		switch( m_FightSystemState )
		{
		case FightSystemState.UnActive :
			m_FightSystemState = FightSystemState.Initialize ;
			break ;
		case FightSystemState.Initialize :
			RetrieveUIObjects() ;
			break ;
		case FightSystemState.Ready :
#if TESTSTARTBATTLE
			m_CharacterLeft = m_DisplayCharacterLeft ;
			m_CharacterRight = m_DisplayCharacterRight ;
			Dictionary<string,UnitDataStruct> table = GlobalSingleton.GetUnitDataStructTable() ;
			if( true == table.ContainsKey( "FightSystemCharacterLeftObject" ) &&
			   true == table.ContainsKey( "FightSystemCharacterRightObject" ) )
			{
				UnitDataStruct leftUnitDataStruct = table[ "FightSystemCharacterLeftObject" ] ;
				UnitDataStruct rightUnitDataStruct = table[ "FightSystemCharacterRightObject" ] ;
				StartABattle( m_CharacterLeft , leftUnitDataStruct ,
				             m_CharacterRight , rightUnitDataStruct ) ;
			}

#endif
			break ;
		case FightSystemState.BattleInitialize :
			InitBattle() ;
			break ;
		case FightSystemState.BattleStartAnimation :
			m_FightSystemState = FightSystemState.RefreshOptions ;
			break ;
		case FightSystemState.RefreshOptions :
			RefreshOptions() ;
			break ;
		case FightSystemState.WaitCharacterLeft :
			WaitCharacter( m_CharacterLeft , m_DisplayCharacterLeft , m_CharacterRight , true ) ;
			break ;
		case FightSystemState.WaitCharacterRight :
			WaitCharacter( m_CharacterRight , m_DisplayCharacterRight , m_CharacterLeft , false ) ;
			break ;
		case FightSystemState.WaitAnimationAndJudgeVictory :
			m_FightSystemState = FightSystemState.RefreshOptions ;
			break ;
		case FightSystemState.BattleEndAnimation :
			break ;
		}
	}
Exemplo n.º 3
0
	public void StartABattle( GameObject _LeftCharacter , GameObject _RightCharacter )
	{
		m_CharacterLeft = _LeftCharacter ;
		m_CharacterRight = _RightCharacter ;
		m_FightSystemState = FightSystemState.BattleInitialize ;
	}
Exemplo n.º 4
0
	private void RetrieveUIObjects() 
	{
		RetrieveGameObject( ref m_DisplayCharacterLeft , "FightSystemCharacterLeftObject" ) ;
		RetrieveGameObject( ref m_DisplayCharacterRight , "FightSystemCharacterRightObject" ) ;
		RetrieveGameObject( ref m_StatusBackground , "FightSystemStatusBackground" ) ;
		RetrieveGameObject( ref m_OperationBackground , "FightSystemOperationBackground" ) ;
		RetrieveOperationStringList( m_OperationBackground ) ;
		RetrieveStatusStringList( m_StatusBackground ) ;
		RetrieveGameObject( ref m_IndicateOperationSymbol , "IndicateOperationSymbol" ) ;
		m_FightSystemState = FightSystemState.Ready ;
	}
Exemplo n.º 5
0
	private void InitBattle()
	{
		// 取得雙方的資料 傳入並建立角色的貼圖。取得角色資料,角色的招式資料。
		// 依照玩家資料更新玩家的選項
		m_FightSystemState = FightSystemState.BattleStartAnimation ;
	}
Exemplo n.º 6
0
	private void RefreshOptions()
	{
		// 取得左玩家的招式資料
		Dictionary<string , SkillSetting> skillSettingTable = GlobalSingleton.GetSkillSettingTable() ;
		UnitData unitData = m_CharacterLeft.GetComponent<UnitData>() ;
		if( null == unitData )
		{
			Debug.LogError( "RefreshOptions() null == unitData " ) ;
			return ;
		}
		else
		{
			// Debug.Log( "RefreshOptions() unitData.m_UnitDataStruct.m_Skills.Count=" + unitData.m_UnitDataStruct.m_Skills.Count ) ;
			Dictionary< string , SkillLabel > skillLabelTable = unitData.m_UnitDataStruct.GetSkillLabelTable() ;
			string [] skillArray = new string[ skillLabelTable.Count ] ;
			skillLabelTable.Keys.CopyTo( skillArray , 0 ) ;
			for( int i = 0 ; i < 6 ; ++i )
			{

				int index = i + m_OperationStringIndex ;
				if( index < skillLabelTable.Count )
				{
					if( i >= m_OperationOptionList.Count )
						m_OperationOptionList.Add( new Operation() ) ; 
					string skillLabelKey = skillArray[ index ] ;
					string displayString = "(displayString)" ;
					if( true == skillSettingTable.ContainsKey( skillLabelKey ) )
					{
						displayString = skillSettingTable[skillLabelKey].DisplayString ;
					}
					m_OperationOptionList[ i ].DisplayString = displayString ;
					m_OperationOptionList[ i ].CommandString = skillLabelKey ;

				}
			}
		}

		for( int i = 0 ; i < m_DispalyOperationList.Count ; ++i )
		{
			GameObject displayOperation = m_DispalyOperationList[ i ] ;
			TextMesh tm = displayOperation.GetComponent<TextMesh>() ;

			if( i < m_OperationOptionList.Count )
			{
				tm.text = m_OperationOptionList[ i ].DisplayString ;
			}
			else
			{
				tm.text = "" ;
			}
		}

		// 依照玩家資料更新玩家的選項
		m_FightSystemState = FightSystemState.WaitCharacterLeft ;
	}
Exemplo n.º 7
0
	private void WaitCharacter( GameObject _CharacterObj , 
	                           GameObject _DisplayObj , 
	                           GameObject _OppnentObj ,
	                           bool _FaceRight ) 
	{
		if( null == _CharacterObj )
		{
			Debug.LogWarning( "null == _CharacterObj" + _CharacterObj.name ) ;
			return ;
		}

		UnitData unitData = _CharacterObj.GetComponent<UnitData>() ;
		if( null == unitData )
		{
			Debug.LogWarning( "null == unitData" + _CharacterObj.name ) ;
			return ;
		}
		if( null == unitData.m_UnitDataStruct )
		{
			Debug.LogWarning( "null == unitData.m_UnitDataStruct" ) ;
			return ;
		}

		
		UnitType unitType = unitData.m_UnitDataStruct.GetUnitType() ;

		if( unitType == UnitType.Player )
		{
			Dictionary< string , StandardParameter > standardParamTable = unitData.m_UnitDataStruct.GetStandardParameterTable() ;

			// 真的等待
			if( true == Input.GetKeyDown(KeyCode.DownArrow) )
			{
				int now = m_SelectedOperationIndex ;
				++now ;
				// @todo 判斷是否到底
				if( now < m_DispalyOperationList.Count &&
				   now < m_OperationOptionList.Count )
				{
					Debug.Log("true == Input.GetKeyDown(KeyCode.DownArrow" ) ;
					m_SelectedOperationIndex = now ;
					RefreshOperationSymbol() ;
				}

			}
			else if( true == Input.GetKeyDown(KeyCode.UpArrow) )
			{
				int now = m_SelectedOperationIndex ;
				--now ;
				// @todo 判斷是否可以再往上
				if( now >= 0 )
				{
					Debug.Log("true == Input.GetKeyDown(KeyCode.UpArrow" ) ;
					m_SelectedOperationIndex = now ;
					RefreshOperationSymbol() ;
				}
			}
			else if( true == Input.GetMouseButtonDown( 0 ) ||
			        true == Input.GetKeyDown(KeyCode.Return) )
			{
				Operation operationNow = RetrieveCurrentSelectOperation() ;
				Debug.Log( "unitType=" + unitType ) ;
				// Debug.Log( "operationNow.DisplayString=" + operationNow.DisplayString ) ;
				Debug.Log( "operationNow.CommandString=" + operationNow.CommandString ) ;
				
				string skillCommand = operationNow.CommandString ;
				float animationSpeed = 0 ;
				string animationPrefabName = "" ;
				SkillSetting skillSetting = null ;
				Dictionary<string,SkillSetting> skillTable = GlobalSingleton.GetSkillSettingTable() ;
				if( true == skillTable.ContainsKey( skillCommand ) )
				{
					skillSetting = skillTable[ skillCommand ] ;
					animationPrefabName = skillSetting.AnimationPrefab ;
					string animationSpeedStr = skillSetting.FyingSpeed ;
					float.TryParse( animationSpeedStr , out animationSpeed ) ;
				}
				Debug.Log( "animationSpeed=" + animationSpeed ) ;

				if( -1 != operationNow.CommandString.IndexOf( "SaveSP" ) )
				{
					if( true == standardParamTable.ContainsKey( "SP" ) )
					{
						float nowSP = standardParamTable[ "SP" ].now ;
						nowSP += 1 ;
						standardParamTable[ "SP" ].now = nowSP ;

						string addStatus = string.Format( "{0} 開始集氣" , _DisplayObj.name ) ;
						AddStatus( addStatus ) ;
						addStatus = string.Format( "{0} 目前SP到達了 {1}" , _DisplayObj.name , standardParamTable[ "SP" ].now ) ;
						AddStatus( addStatus ) ;
					}
					else
					{
						Debug.Log( "false == standardParamTable.ContainsKey( SP" ) ;
					}
				}
				else if( -1 != operationNow.CommandString.IndexOf( "Hadoken" ) ||
				         -1 != operationNow.CommandString.IndexOf( "FireBall" ) )
				{
					if( true == standardParamTable.ContainsKey( "SP" ) )
					{
						float nowSP = standardParamTable[ "SP" ].now ;
						if( nowSP > 0 )
						{
							// 產生一個特效
							GameObject animObj = PrefabInstantiate.Create( animationPrefabName , 
								"animObj" + (m_Iter++) ) ;
							if( null == animObj )
							{
								
							}
							else
							{
								animObj.transform.position = _DisplayObj.transform.position ;
								if( true == _FaceRight )
								{
									Vector2 forceVec = new Vector2( 1 , 0 ) ;
									forceVec *= animationSpeed ;
									animObj.GetComponent<Rigidbody2D>().AddForce( forceVec ) ;
								}
								else
								{
									Vector3 scale = animObj.transform.localScale ;
									animObj.transform.localScale = new Vector3( -1 * scale.x , scale.y , scale.z ) ; 
									
									Vector2 forceVec = new Vector2( -1 , 0 ) ;
									forceVec *= animationSpeed ;
									animObj.GetComponent<Rigidbody2D>().AddForce( forceVec ) ;
								}
								
								SkillAnimation skillAnim = animObj.GetComponent<SkillAnimation>() ;
								if( null == skillAnim )
								{
									skillAnim = animObj.AddComponent<SkillAnimation>() ;
									if( null == skillAnim.m_SkillVariable )
									{
										skillAnim.m_SkillVariable = new SkillVariable() ;
									}
									skillAnim.m_ParentName = _DisplayObj.name ;
									skillAnim.m_SkillVariable.m_SkillSetting = skillSetting ;
									skillAnim.m_SkillVariable.m_SkillPropertyNow.AttackProperty.Import( skillSetting.AttackProperty ) ;
									skillAnim.m_SkillVariable.m_SkillPropertyNow.DefenseProperty.Import( skillSetting.DefenseProperty ) ;
								}
								
								AnimationCollisionOnEnter collisionObj = animObj.GetComponent<AnimationCollisionOnEnter>() ;
								if( null != collisionObj )
								{
									collisionObj.m_ParentName = _DisplayObj.name ;
								}
								
							}
							string addStatus = string.Format( "{0} 發射了一個 {1}!" , _DisplayObj.name , skillSetting.DisplayString ) ;
							AddStatus( addStatus ) ;

							nowSP -= 1 ;
							standardParamTable[ "SP" ].now = nowSP ;
							addStatus = string.Format( "{0} 目前SP到達了 {1}" , _DisplayObj.name , standardParamTable[ "SP" ].now ) ;
							AddStatus( addStatus ) ;
						}
					}
				}
				int k = (int) m_FightSystemState ;
				++k ;
				m_FightSystemState = (FightSystemState) k ;
			}

		}
		else 
		{
			// 電腦 直接下令
		}


	}