public JabControllerComponent(PhysicsComponent physicsComp, MeleeWeaponComponent meleeWeapon,
            Vector2f forwardPosition, Vector2f backwardPosition,
            double fullForwardTime, double fullBackwardTime, 
            GameObject parent)
            : base(parent)
        {
            ForwardPosition = forwardPosition;
            BackwardPosition = backwardPosition;
            FullForwardTime = fullForwardTime;
            FullBackwardTime = fullBackwardTime;
            Time = 0;
            PhysicsComponent = physicsComp;
            MeleeWeapon = meleeWeapon;

              //  Debug.Assert(FullBackwardTime > fullForwardTime);
        }
        public static GameObject CreateMeleeWeapon(GameObject player)
        {
            GameObject gameObject = new GameObject();
            Vector2f offset = new Vector2f(meleeWeaponConfigFileParser.GetAsFloat("OffsetX"), meleeWeaponConfigFileParser.GetAsFloat("OffsetY"));
            MeleeWeaponComponent meleeWeaponComponent = new MeleeWeaponComponent(player, offset, gameObject);
            gameObject.AddComponent(meleeWeaponComponent);
            GameState.GameObjects.Add(gameObject);

            meleeWeaponComponent.AttackDelay = meleeWeaponConfigFileParser.GetAsFloat("AttackDelay");
            return gameObject;
        }
        /// <summary>
        /// Creates a new jab attack instance
        /// </summary>
        public static GameObject CreateJab(GameObject attacker, MeleeWeaponComponent meleeWeapon, Vector2f position, int xdirection)
        {
            float width = jabConfigFileParser.GetAsFloat("CollisionWidth");
            float height = jabConfigFileParser.GetAsFloat("CollisionHeight");
            float damage = jabConfigFileParser.GetAsFloat("Damage");
            float forwardX = jabConfigFileParser.GetAsFloat("ForwardX");
            float backwardX = jabConfigFileParser.GetAsFloat("BackwardX");
            float forwardTime = jabConfigFileParser.GetAsFloat("ForwardTime");
            float backwardTime = jabConfigFileParser.GetAsFloat("BackwardTime");

            GameObject gameObject = new GameObject();
            GameState.GameObjects.Add(gameObject);
            gameObject.Position = position;

            PhysicsComponent physicsComp = PhysicsMgr.MakeNewComponent(gameObject, width, height,
            PhysicsManager.PlayerCategory, PhysicsManager.EnemyCategory | PhysicsManager.MapCategory, BodyType.Kinematic);
            physicsComp.Body.GravityScale = 0.0f;
            physicsComp.Body.IsSensor = true;

            gameObject.AddComponent(physicsComp);

            AttackComponent attackComp = new AttackComponent(attacker, damage, gameObject);
            gameObject.AddComponent(attackComp);

            SpriteRenderComponent renderComp = RenderMgr.MakeNewSpriteComponent(gameObject, SwordTexture);
            renderComp.WorldPosition = position;
            renderComp.WorldWidth = width;
            renderComp.WorldHeight = height;
            renderComp.ZIndex = 100;
            gameObject.AddComponent(renderComp);

            JabControllerComponent scc = new JabControllerComponent(physicsComp, meleeWeapon,
                new Vector2f(forwardX * xdirection, 0),
                new Vector2f(backwardX * xdirection, 0),
                forwardTime,
                backwardTime,
                gameObject);

            gameObject.AddComponent(scc);

            RectRenderComponent collisionRect = new RectRenderComponent(
                jabConfigFileParser.GetAsFloat("CollisionWidth"),
                jabConfigFileParser.GetAsFloat("CollisionHeight"),
                new Color(255, 0, 0, 100),
                RenderMgr,
                gameObject);
            RenderMgr.Components.Add(collisionRect);
            gameObject.AddComponent(collisionRect);

            return gameObject;
        }
 public WeaponHoldingComponent(MeleeWeaponComponent meleeWeaponComponent, GunWeaponComponent gunWeaponComponent, GameObject parent)
     : base(parent)
 {
     MeleeWeaponComponent = meleeWeaponComponent;
     GunWeaponComponent = gunWeaponComponent;
 }