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 ; }
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 ) ) ) ; } }
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() ; }
public Weapon(WeaponDataSet data) { _data = data; }
// 更新武器的發射狀態 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 ; } }
// 停止特效 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() ; }
// 啟動(顯示)特效 void ActiveEffect( WeaponDataSet _weaponSet ) { if( null != _weaponSet.Effect3DObject ) { _weaponSet.Effect3DObject.renderer.enabled = true ; _weaponSet.Effect3DObject.collider.enabled = true ; } }
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 ; }
protected virtual void ClearWeaponDataShared() { m_WeaponDataShared = null ; }
public virtual void Setup( WeaponDataSet _WeaponData ) { m_WeaponDataShared = _WeaponData ; }
// 創造武器相關物件集合 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 }