コード例 #1
0
    public float m_MaxMaintainDistanceSquare = 0.0f ; // 最大維持距離平方

    #endregion Fields

    #region Methods

    // 創造時產生 PullForce 拉力 放在目標物件上
    public override void Setup( WeaponDataSet _WeaponData )
    {
        if( null == _WeaponData )
            return ;
        m_WeaponDataShared = _WeaponData ;

        if( null != m_WeaponDataShared.TargetUnitObject )
        {
            GameObject targetUnit = m_WeaponDataShared.TargetUnitObject ;
            if( null == targetUnit.GetComponent<PullForce>() )
            {
                targetUnit.AddComponent<PullForce>() ;
                Vector3 Distance = m_WeaponDataShared.Component3DObject.transform.position - targetUnit.transform.position ;
                float Mass = 1.0f ;
                Rigidbody rbody = targetUnit.GetComponentInChildren<Rigidbody>() ;
                if( null != rbody )
                {
                    Mass = rbody.mass ;
                }
                float MaxSpeed = m_WeaponDataShared.m_CauseDamage / Mass ;
                PullForce force = targetUnit.GetComponent<PullForce>() ;
                if( null != force )
                {
                    force.Setup( m_WeaponDataShared.Component3DObject ,
                                 Distance.magnitude , // init distance
                                 m_WeaponDataShared.m_CauseDamage ,  // max distance
                                 MaxSpeed ) ;
                }
            }
        }
        // Debug.Log( "m_WeaponDataShared.m_CauseDamage" + m_WeaponDataShared.m_CauseDamage ) ;
        m_MaxMaintainDistanceSquare = m_WeaponDataShared.m_CauseDamage * m_WeaponDataShared.m_CauseDamage ;
    }
コード例 #2
0
    public override void Setup( WeaponDataSet _WeaponData )
    {
        m_WeaponDataShared = _WeaponData ;
        if( null == m_FireEffect )
        {
            m_FireEffect = PrefabInstantiate.CreateByInit(
                m_FireEffectPrefabName ,
                this.gameObject.name + ":" + m_FireEffectPrefabName + ConstName.GenerateIterateString() ,
                m_WeaponDataShared.Component3DObject.transform.position + new Vector3( 0 , 2 , 0 ) ,
                Quaternion.LookRotation( m_WeaponDataShared.m_TargetDirection ,
                                                                 new Vector3( 0 , 1 , 0 ) )
                ) ;

        }
    }
コード例 #3
0
 public override void Setup( WeaponDataSet _WeaponData )
 {
     base.Setup( _WeaponData ) ;
     if( null != m_WeaponDataShared )
     {
         float triggertime =
             Mathf.Floor( m_WeaponDataShared.m_FireTotalTime / m_DamageCauseTimer.m_CountDownTime )
                 + 1 ;
         // Debug.Log( triggertime ) ;
         m_TriggerDamage = m_WeaponDataShared.m_CauseDamage / triggertime ;
         // Debug.Log( m_TriggerDamage ) ;
     }
     // first time
     CauseDamage() ;
     m_DamageCauseTimer.Rewind() ;
 }
コード例 #4
0
 public Weapon(WeaponDataSet data)
 {
     _data = data;
 }
コード例 #5
0
	// 更新武器的發射狀態
	void UpdateWeaponFire( WeaponDataSet weaponset )
	{
		switch( weaponset.m_FireState )
		{
		case WeaponFireState.UnActive :
			weaponset.m_FireState = WeaponFireState.Ready ;
			break ;
		case WeaponFireState.Ready :
			// nothing and wait for fire
			break ;
		case WeaponFireState.FireAnimating :
			if( null != weaponset.m_FireAudio &&
				null != weaponset.Component3DObject &&
				null != weaponset.TargetUnitObject &&
				true == MathmaticFunc.IsInScreen( this.gameObject ) )
			{
			
				if( weaponset.m_WeaponType == WeaponType.TrakorBeam )
				{
					// Debug.Log( "weaponset.Component3DObject.audio.Play" ) ;
					weaponset.Component3DObject.audio.clip = weaponset.m_FireAudio ;
					weaponset.Component3DObject.audio.Play() ;
				}
				else
					weaponset.Component3DObject.audio.PlayOneShot( weaponset.m_FireAudio ) ;
			}
			
			weaponset.m_FireState = WeaponFireState.Firing ;
			break ;
		case WeaponFireState.Firing :
		
	 		if( null != weaponset.Effect3DObject )
			{
				if( false == weaponset.Effect3DObject.renderer.enabled )
				{
					// 特效物件自己關閉了
					// Debug.Log( "false == weaponset.Effect3DObject.renderer.enabled" ) ;
					StopEffect( weaponset , weaponset.TargetUnitObject ) ;
					weaponset.m_FireState = WeaponFireState.FireCompleting ;
				}


			}

			// check time is up
			if( Time.time - weaponset.m_FireStartTime > weaponset.m_FireTotalTime )
			{
				StopEffect( weaponset , weaponset.TargetUnitObject ) ;
				weaponset.m_FireState = WeaponFireState.FireCompleting ;
			}
			break ;
		case WeaponFireState.FireCompleting :
			if( null != weaponset.m_FireAudio &&
				null != weaponset.Component3DObject )
			{
				// Debug.Log( "weaponset.Component3DObject.audio.Stop" ) ;
				weaponset.Component3DObject.audio.Stop() ;
			}			
			weaponset.m_FireState = WeaponFireState.Recharging ;
			break ;	
		case WeaponFireState.Recharging :
			weaponset.m_FireState = WeaponFireState.Ready ;
			break ;
		}
	}
コード例 #6
0
	// 停止特效
	void StopEffect( WeaponDataSet _weaponset , GameObject _targetUnit )
	{

		
		// Debug.Log( "StopEffect() " + _weaponset.ComponentName ) ;
		// close weapon effect
		if( null != _weaponset.Effect3DObject )
		{
			_weaponset.Effect3DObject.renderer.enabled = false ;
			_weaponset.Effect3DObject.collider.enabled = false ;
		}
		
		// close relative damage effect ( if they exist )
		List<RelativeDamageEffect>.Enumerator e = _weaponset.m_RelativeDamageEffectNames.GetEnumerator() ;
		while( e.MoveNext() )
		{
			if( null != e.Current.m_TargetUnit )
			{
				UnitDamageSystem dmgSys = null ;
				dmgSys = e.Current.m_TargetUnit.GetComponent<UnitDamageSystem>() ;
				if( null != dmgSys )
				{
					dmgSys.StopEffectObject( e.Current.m_DamageEffectName ) ;
				}
			}
		}
		_weaponset.m_RelativeDamageEffectNames.Clear() ;
		
	}
コード例 #7
0
	// 啟動(顯示)特效 
	void ActiveEffect( WeaponDataSet _weaponSet )
	{
		if( null != _weaponSet.Effect3DObject )
		{
			_weaponSet.Effect3DObject.renderer.enabled = true ;
			_weaponSet.Effect3DObject.collider.enabled = true ;
		}
	}
コード例 #8
0
    public WeaponDataSet( WeaponDataSet _Src )
        : base(_Src)
    {
        m_WeaponType = _Src.m_WeaponType ;
        m_FireState = _Src.m_FireState ;

        m_TargetComponentObject.Setup( _Src.m_TargetComponentObject ) ;
        m_TargetDirection = _Src.m_TargetDirection ;
        m_Displacement = _Src.m_Displacement ;
        m_FireStartTime = _Src.m_FireStartTime ;
        m_FireTotalTime = _Src.m_FireTotalTime ;

        m_FireAudio = _Src.m_FireAudio ;
        m_CauseDamage = _Src.m_CauseDamage ;

        m_RelativeDamageEffectNames = _Src.m_RelativeDamageEffectNames	 ;
    }
コード例 #9
0
 protected virtual void ClearWeaponDataShared()
 {
     m_WeaponDataShared = null ;
 }
コード例 #10
0
 public virtual void Setup( WeaponDataSet _WeaponData )
 {
     m_WeaponDataShared = _WeaponData ;
 }
コード例 #11
0
    // 創造武器相關物件集合
    public void CreateWeapons( ref Dictionary< string , WeaponDataSet > _WeaponDataMap )
    {
        _WeaponDataMap.Clear() ;

        // find all weapon component
        List<string> weaponList = this.GetAllWeaponComponentNameVec() ;
        foreach( string eWeapon in weaponList )
        {
            // Debug.Log( "CreateWeapons() eWeapon=" + eWeapon ) ;
            WeaponDataSet newWeapon = new WeaponDataSet( this.gameObject , eWeapon ) ;
            UnitComponentData componentData = this.componentMap[ eWeapon ] ;

            // type
            if( -1 != eWeapon.IndexOf( "Phaser" ) )
                newWeapon.m_WeaponType = WeaponType.Phaser ;
            else if( -1 != eWeapon.IndexOf( "DisruptorArray" ) )
                newWeapon.m_WeaponType = WeaponType.Phaser ;
            else if( -1 != eWeapon.IndexOf( "Torpedo" ) )
                newWeapon.m_WeaponType = WeaponType.Torpedo ;
            else if( -1 != eWeapon.IndexOf( "DisruptorCannon" ) )
                newWeapon.m_WeaponType = WeaponType.Cannon ;
            else if( -1 != eWeapon.IndexOf( "CylonCannon" ) )
                newWeapon.m_WeaponType = WeaponType.Cannon ;
            else if( -1 != eWeapon.IndexOf( "BattleStarCannon" ) )
                newWeapon.m_WeaponType = WeaponType.Cannon ;
            else if( -1 != eWeapon.IndexOf( "TrackorBeam" ) )
                newWeapon.m_WeaponType = WeaponType.TrakorBeam ;

            // create weapon 3d object
            {
                string TemplateName = ConstName.CreateComponent3DObjectTemplateName( eWeapon ) ;
                // Debug.Log( "CreateWeapons() TemplateName=" + TemplateName ) ;
                // Debug.Log( "CreateWeapons() newWeapon.UnitObjectName=" + newWeapon.UnitObjectName ) ;
                // Debug.Log( "CreateWeapons() newWeapon.Component3DObjectName=" + newWeapon.Component3DObjectName ) ;
                GameObject weapon3DObj = PrefabInstantiate.Create( TemplateName ,
                                                                   newWeapon.Component3DObjectName ) ;

                if( null != weapon3DObj )
                {
                    // Debug.Log( "weapon3DObj.name:" + weapon3DObj.name ) ;
                    // add a short cut to unit data component
                    componentData.m_ComponentParam.m_Component3DObject.Setup( weapon3DObj ) ;

                    Vector3 localposition = weapon3DObj.transform.position ;
                    Quaternion localrotation = weapon3DObj.transform.rotation ;

                    newWeapon.Component3DObject = weapon3DObj ;

                    weapon3DObj.transform.parent = this.transform ;
                    weapon3DObj.transform.localPosition = localposition ;
                    weapon3DObj.transform.localRotation = localrotation ;
                }
            }

            // create effect of this object
            {
                string effect3DObjectTemplateName = "" ;
                effect3DObjectTemplateName = componentData.m_ComponentParam.m_Effect3DObjectTemplateName ;

                GameObject effect3DObj = PrefabInstantiate.Create( effect3DObjectTemplateName ,
                                                                   newWeapon.Effect3DObjectName ) ;

                if( null != effect3DObj )
                {
                    // Debug.Log( "effect3DObj.name:" + effect3DObj.name ) ;
                    newWeapon.Effect3DObject = effect3DObj ;

                    effect3DObj.transform.rotation = this.transform.rotation ;
                    effect3DObj.renderer.enabled = false ;
                    effect3DObj.collider.enabled = false ;
                }
            }

            string FireAudioName = componentData.m_WeaponParam.m_FireAudioName ;
            if( 0 != FireAudioName.Length )
            {
                newWeapon.m_FireAudio = ResourceLoad.LoadAudio( FireAudioName ) ;
            }

            // Debug.Log( "m_WeaponDataMap.Add:" + eWeapon ) ;
            _WeaponDataMap.Add( eWeapon , newWeapon ) ;
        }// end of foreach
    }