public GameObject GetArrow(GameObject shooter, GameObject target, int id = -1)
        {
            var arrowContainerObject = new GameObject();
            arrowContainerObject.ConstructionStamp = "Arrow";
            arrowContainerObject.Team = shooter.Team;
            arrowContainerObject.ID = id == -1 ? MechanicSingleton.Instance.GetNextObjectCountValue() : id;
            arrowContainerObject.CurrentFrame = AssetRepository.Instance.ArrowAnimations(arrowContainerObject.Scale).CurrentAnimatedRectangle.CurrentFrame;

            arrowContainerObject.UsedInPathing = false;
            arrowContainerObject.SetPhysics(new NonCollidingPhysics(arrowContainerObject, gameRef.Level.Bounds));
            //arrow.SetRenderer(new RenderBase(arrow, AssetRepository.Instance.ArrowTexture, AssetRepository.Instance.ArrowAnimations));
            arrowContainerObject.SetBrain(new ArrowBrain(arrowContainerObject, target));
            arrowContainerObject.SetMover(new ProjectileMover(arrowContainerObject));
            arrowContainerObject.SetSkills(new SkillsComponent(arrowContainerObject));

            var arrowWeapon = new AlwaysAttackingWeapon(arrowContainerObject.Skills, arrowContainerObject);

            //DOTHIS figure out arrow sitch
            //arrowWeapon.EquipEffect(new BasicDamageEffect(durationMS: 250, damageRating: 25));
            arrowWeapon.SetRenderer((new RenderBase(arrowWeapon, AssetRepository.Instance.ArrowTexture, AssetRepository.Instance.ArrowAnimations(arrowContainerObject.Scale))));
            arrowContainerObject.EquipWeapon(arrowWeapon);

            arrowContainerObject.CurrentState = Constants.ACTOR_STATE_IDLE;
            arrowContainerObject.Position = shooter.Position;

            gameRef.container.AddObject(arrowContainerObject);

            return arrowContainerObject;
        }