|
|
- using System.Collections;
- using UnityEngine;
-
- [CreateAssetMenu(menuName = "Major Project/Pick Ups/Shoot Block")]
- [System.Serializable]
- public class Shoot : LogicBlock
- {
- [SerializeField]
- [Header("Direction to shoot in")]
- private Direction Direction;
-
- [SerializeField]
- [Header("Projectile to Shoot")]
- private Projectile Projectile;
-
- private string prefabName;
-
- public override Block GetEndBlock(Block startBlock, Transform transform, LayerMask layerMask)
- {
- return startBlock;
- }
-
- protected override IEnumerator BlockLogic(Character player, float animationTime, bool useBlockDirection = false)
- {
- Projectile newProjectile = Instantiate(Projectile, player.transform.position, player.transform.rotation);
- Vector3 direction = Direction.ToVector(player.transform);
-
- yield return newProjectile.StartCoroutine(newProjectile.ProjectileLogic(player, animationTime, direction));
-
- Destroy(newProjectile.gameObject);
- }
-
- public override void CopyToken(BlockToken token)
- {
- base.CopyToken(token);
-
- prefabName = ((ShotToken)token).prefabName;
- Projectile = Resources.Load<GameObject>(((ShotToken)token).prefabName)?.GetComponent<Projectile>();
-
- Direction = ((ShotToken)token).direction;
- }
-
- public override BlockToken ToToken(BlockToken token = null)
- {
- if (token == null)
- token = new ShotToken(this);
-
- Debug.Log(base.ToToken(token).GetType().Name);
- ShotToken retVal = (ShotToken)base.ToToken(token);
- retVal.direction = Direction;
- if (Projectile != null)
- retVal.prefabName = Projectile.gameObject.name;
- else
- retVal.prefabName = prefabName;
-
- return retVal;
- }
- }
-
- [System.Serializable]
- public class ShotToken : BlockToken
- {
- public Direction direction;
- public string prefabName;
-
- public ShotToken(LogicBlock block) : base(block) { }
- }
|