private void OnTriggerEnter(Collider pCollider) { Transform pTrans = pCollider.transform; int iHashCode = pCollider.GetHashCode(); float fDistance = (pTrans.position - _pTransformCached.position).sqrMagnitude; if (_mapMagneticPool.ContainsKey(iHashCode) == false) { IMagneticListener IMagneticListener = pTrans.GetComponent <IMagneticListener>(); SInfoMagnetic sInfoMagnetic = new SInfoMagnetic(); sInfoMagnetic.pTransCached = pTrans; sInfoMagnetic.IMagneticListener = IMagneticListener; sInfoMagnetic.eStateMagnetic = EStateMagnetic.None; sInfoMagnetic.fLastDistance = fDistance; _mapMagneticPool.Add(iHashCode, sInfoMagnetic); } else { SInfoMagnetic sInfoMagnetic = _mapMagneticPool[iHashCode]; sInfoMagnetic.eStateMagnetic = EStateMagnetic.None; sInfoMagnetic.fLastDistance = fDistance; } }
public SMagneticInfo(Transform pTransCached, IMagneticListener iMagneticListener, float fRandomSpeed) { this.pTransCached = pTransCached; this.iMagneticListener = iMagneticListener; this.fMagneticStartTime = Time.time; this.fRandomSpeed = fRandomSpeed; this._pRigidbody = pTransCached.GetComponent <Rigidbody>(); this._pRigidbody2D = pTransCached.GetComponent <Rigidbody2D>(); bool bIsStartMagnetic = true; iMagneticListener.IMagneticListener_OnStartMagnetic(ref bIsStartMagnetic); this.bIsStartMagnetic = bIsStartMagnetic; }
// ========================================================================== // #region Private /* private - [Proc] Function * 로직을 처리(Process Local logic) */ private void OnEnter(int iHashCode, Transform pTrans) { IMagneticListener iMagneticListener = pTrans.GetComponent <IMagneticListener>(); if (iMagneticListener == null) { return; } if (_mapMagneticPool.ContainsKey(iHashCode) == false) { _mapMagneticPool.Add(iHashCode, new SMagneticInfo(pTrans, iMagneticListener, Random.Range(p_fMagnetPower_Random_Min, p_fMagnetPower_Random_Max))); } else { _mapMagneticPool[iHashCode] = _mapMagneticPool[iHashCode].ResetStartTime(); } }
private void OnTriggerStay(Collider pCollider) { int iHashCode = pCollider.GetHashCode(); SInfoMagnetic sInfoMagnetic = _mapMagneticPool[iHashCode]; if (sInfoMagnetic.eStateMagnetic == EStateMagnetic.Attracted) { return; } Transform pTrans = sInfoMagnetic.pTransCached; float fDistanceSqrt = (pTrans.position - _pTransformCached.position).sqrMagnitude; float fDistAtrractSqrt = (p_fMagnetReactRadius * p_fMagnetReactRadius); if (sInfoMagnetic.eStateMagnetic == EStateMagnetic.Reaction || fDistanceSqrt < fDistAtrractSqrt) { if (sInfoMagnetic.eStateMagnetic == EStateMagnetic.None) { sInfoMagnetic.eStateMagnetic = EStateMagnetic.Reaction; } Vector3 v3Direction = (pTrans.position - _pTransformCached.position); float fLastDistance = sInfoMagnetic.fLastDistance; float fRealDistance = v3Direction.sqrMagnitude; float fCurrentDistance = PrimitiveHelper.GetCalcReverseFloat(sInfoMagnetic.fLastDistance, fRealDistance) * p_fMagnetReactMultiplier; fCurrentDistance = Mathf.Clamp(fCurrentDistance, 0f, 50f); pTrans.position += fCurrentDistance * (v3Direction * _iMagneticTypeDir) * Time.deltaTime; if (fRealDistance < float.Epsilon && sInfoMagnetic.eStateMagnetic != EStateMagnetic.Attracted) { sInfoMagnetic.eStateMagnetic = EStateMagnetic.Attracted; IMagneticListener IMagneticListener = sInfoMagnetic.IMagneticListener; if (IMagneticListener != null) { IMagneticListener.IOnAttracted(); } } } }