/// <summary> /// Trigger anything from its name /// </summary> /// <param name="source"></param> /// <param name="name"></param> public void Trigger(BulletMLLib.Bullet source, string name) { GameObject sourceObject = GetGameObjectFromBullet(source); if (OnTrigger != null) { OnTrigger(sourceObject, name); } }
/// <summary> /// Look what kind if bullet it is and how to retrieve the game object from it /// </summary> /// <param name="sourceBullet"></param> /// <returns></returns> public GameObject GetGameObjectFromBullet(BulletMLLib.Bullet sourceBullet) { GameObject requestSource = null; if (sourceBullet is TopBullet) { var parent = ((TopBullet)sourceBullet).Parent; if (parent != null) { requestSource = parent.gameObject; } } else if (sourceBullet is BulletObject) { requestSource = ((BulletObject)sourceBullet).Parent; } return(requestSource); }
/// <summary> /// Clean bullet /// </summary> /// <param name="deadBullet"></param> public void RemoveBullet(BulletMLLib.Bullet deadBullet) { if (OnBulletDestroyed != null) { OnBulletDestroyed(deadBullet); return; } if (deadBullet is BulletObject) { BulletObject b = (BulletObject)deadBullet; if (b != null && b.Parent != null && b.Parent != null) { Destroy(b.Parent); } } }
/// <summary> /// New bullet creation /// </summary> /// <remarks>Not the bullet spawn, just the container creation, we don't know the bullet name here</remarks> /// <returns></returns> public BulletMLLib.Bullet CreateBullet(BulletMLLib.Bullet source, bool top) { // Try to get the parent GameObject gameObject = null; BulletSourceScript emitter = null; if (source is TopBullet) { emitter = ((TopBullet)source).Parent; if (emitter != null) { gameObject = emitter.gameObject; } } else if (source is BulletObject) { gameObject = ((BulletObject)source).Parent; } // Create a top bullet (weird case) if (top) { return(new TopBullet(this, emitter)); } else { // Create a bullet BulletObject bullet = null; if (OnBulletCreated != null) { bullet = OnBulletCreated(gameObject); } else { bullet = new BulletObject(this, gameObject); } bullet.OnBulletSpawned += BulletSpawnedHandler; return(bullet); } }
/// <summary> /// Player current position for the bullet /// </summary> /// <param name="sourceBullet"></param> /// <returns></returns> public Vector2 PlayerPosition(BulletMLLib.Bullet sourceBullet) { if (GetPlayerPosition != null) { // Find the parent GameObject requestSource = GetGameObjectFromBullet(sourceBullet); // Call the handler if (requestSource == null) { Debug.LogError("Unable to get the parent from " + sourceBullet); } return(GetPlayerPosition(requestSource)); } else if (player != null) { return(player.transform.position); } else { return(Vector2.zero); } }