Пример #1
0
        public void StartChargingShot()
        {
            ShakeComponent playerShake = Owner.FindComponent <ShakeComponent>();

            playerShake.StartShake();

            Color color = Ball.LastPlayer.Team.ColorScheme.Color1;
            PlayerChargedShotFx playerChargedShotCmp = new PlayerChargedShotFx();

            Owner.Attach(playerChargedShotCmp);
            playerChargedShotCmp.Color = color;

            m_chargedShotTimer.Reset();
            m_chargedShotTimer.Start();
            m_chargingShot = true;

            m_audioCmpCharge.Play();
        }
Пример #2
0
        public void StopChargingShot()
        {
            ShakeComponent playerShake = Owner.FindComponent <ShakeComponent>();

            if (playerShake != null)
            {
                playerShake.StopShake();
            }

            PlayerChargedShotFx playerChargedShotCmp = Owner.FindComponent <PlayerChargedShotFx>();

            if (playerChargedShotCmp != null)
            {
                playerChargedShotCmp.Stop();
            }

            m_chargedShotTimer.Stop();
            m_chargingShot = false;

            m_audioCmpCharge.Stop();
        }
Пример #3
0
        public void Init()
        {
            m_effects = new List <PlayerEffect>();

            var allPlayerSpriteInfos = Engine.AssetManager.Get <PlayerSpriteInfo[]>("Game/PlayerSprites.lua::PlayerSprites");
            var playerSpriteInfo     = allPlayerSpriteInfos[(int)m_playerIndex];

            Sprite playerSprite = Sprite.CreateFromTexture(playerSpriteInfo.Material);

            playerSprite.Scale = new Vector2(0.48f, 0.48f);
            m_spritePlayerCmp  = new ColorMaskedSprite(playerSprite, "ArenaOverlay9");
            var texAsset = playerSpriteInfo.Mask;

            m_spritePlayerCmp.Mask = texAsset;
            ResetColors();
            Owner.Attach(m_spritePlayerCmp);

            m_shadowCmp = new SpriteComponent(
                Sprite.CreateFromTexture("Graphics/playerShadow.png"),
                "ArenaOverlay8");
            m_shadowCmp.Sprite.Scale = playerSprite.Scale;
            Owner.Attach(m_shadowCmp);

            Sprite sparksSprite = Sprite.Create("Graphics/playerSprite.lua::Sprite");

            sparksSprite.SetAnimation("Sparks");
            sparksSprite.Playing = true;
            m_sparksCmp          = new SpriteComponent(sparksSprite, "ArenaOverlay10");
            m_sparksCmp.Visible  = false;
            Owner.Attach(m_sparksCmp);

            Sprite goldFxSprite = Sprite.Create("Graphics/playerSprite.lua::Sprite");

            goldFxSprite.SetAnimation("GoldFx");
            goldFxSprite.Playing      = false;
            m_goldFxSpriteCmp         = new SpriteComponent(goldFxSprite, "ArenaOverlay10");
            m_goldFxSpriteCmp.Visible = false;
            Owner.Attach(m_goldFxSpriteCmp);

            Sprite shieldUpFxSprite = Sprite.Create("Graphics/playerSprite.lua::Sprite");

            shieldUpFxSprite.SetAnimation("ShieldUp");
            shieldUpFxSprite.Playing      = false;
            m_shieldUpFxSpriteCmp         = new SpriteComponent(shieldUpFxSprite, "ArenaOverlay10");
            m_shieldUpFxSpriteCmp.Visible = false;
            Owner.Attach(m_shieldUpFxSpriteCmp);

            // Physic
            m_bodyCmp = new RigidBodyComponent();
            CircleShape bodyShape = new CircleShape(ConvertUnits.ToSimUnits(Parameters.Radius), 1.0f);
            Fixture     fix       = new Fixture(m_bodyCmp.Body, bodyShape);

            Owner.Attach(m_bodyCmp);

            m_bodyCmp.Body.FixedRotation = true;

            m_bodyCmp.Body.LinearDamping       = Parameters.Physic.LinearDamping;
            m_bodyCmp.Body.AngularDamping      = Parameters.Physic.AngularDamping;
            m_bodyCmp.Body.Restitution         = Parameters.Physic.Restitution;
            m_bodyCmp.Body.Mass                = Parameters.Physic.Mass;
            m_bodyCmp.Body.CollisionCategories = (Category)CollisionType.Player;
            m_bodyCmp.Body.SleepingAllowed     = false;
            m_bodyCmp.Body.IsBullet            = true;

            // Blink
            m_blink = new PlayerBlink(this);
            Owner.Attach(m_blink);

            if (m_playerIndex == PlayerIndex.One)
            {
                m_bodyCmp.Body.CollisionCategories = (Category)CollisionType.Gameplay | (Category)CollisionType.Player | (Category)CollisionType.TeamA;
            }
            if (m_playerIndex == PlayerIndex.Two)
            {
                m_bodyCmp.Body.CollisionCategories = (Category)CollisionType.Gameplay | (Category)CollisionType.Player | (Category)CollisionType.TeamA;
            }
            if (m_playerIndex == PlayerIndex.Three)
            {
                m_bodyCmp.Body.CollisionCategories = (Category)CollisionType.Gameplay | (Category)CollisionType.Player | (Category)CollisionType.TeamB;
            }
            if (m_playerIndex == PlayerIndex.Four)
            {
                m_bodyCmp.Body.CollisionCategories = (Category)CollisionType.Gameplay | (Category)CollisionType.Player | (Category)CollisionType.TeamB;
            }

            // Audio
            m_audioCmpBallShot = new AudioComponent("Audio/Sounds.lua::BallShot");
            Owner.Attach(m_audioCmpBallShot);
            m_audioCmpStun = new AudioComponent("Audio/Sounds.lua::Stun");
            Owner.Attach(m_audioCmpStun);
            m_audioCmpCharge = new AudioComponent("Audio/Sounds.lua::Charge");
            Owner.Attach(m_audioCmpCharge);

            //
            m_ballTrigger = new TriggerComponent();
            var triggerFixture = FixtureFactory.AttachCircle(
                ConvertUnits.ToSimUnits(Parameters.Radius + Parameters.BallSnapRadius),
                0,
                m_ballTrigger.Body);

            triggerFixture.IsSensor         = true;
            m_ballTrigger.Body.CollidesWith = (Category)CollisionType.Ball;
            Owner.Attach(m_ballTrigger);

            m_magnetSensor = new TriggerComponent();
            triggerFixture = FixtureFactory.AttachCircle(
                ConvertUnits.ToSimUnits(Parameters.MagnetRadiusMax),
                0,
                m_magnetSensor.Body);
            triggerFixture.IsSensor          = true;
            m_magnetSensor.Body.CollidesWith = (Category)CollisionType.Ball;
            Owner.Attach(m_magnetSensor);

            Engine.World.EventManager.AddListener((int)EventId.MatchBegin, OnMatchBegin);
            Engine.World.EventManager.AddListener((int)EventId.FirstPeriod, OnFirstPeriod);
            Engine.World.EventManager.AddListener((int)EventId.HalfTime, OnHalfTime);
            Engine.World.EventManager.AddListener((int)EventId.HalfTimeTransition, OnHalfTimeTransition);
            Engine.World.EventManager.AddListener((int)EventId.SecondPeriod, OnSecondPeriod);
            Engine.World.EventManager.AddListener((int)EventId.MatchEnd, OnMatchEnd);
            Engine.World.EventManager.AddListener((int)EventId.Victory, OnMatchVictory);
            Engine.World.EventManager.AddListener((int)EventId.KickOff, OnKickOff);

            m_ballAngle = 0;

            //Initialise ChargetShots Timer
            float chargeTimeMS = Parameters.ChargedShot.ChargeTimeMS;

            chargeTimeMS      *= ComputeSkillCoef("ChargedShotTime", Parameters.Skills.ChargedShotTimeBase, Parameters.Skills.ChargedShotTimeCoef);
            m_chargedShotTimer = new Timer(Engine.GameTime.Source, chargeTimeMS, TimerBehaviour.Stop);

            float delay = Engine.Debug.EditSingle("ChargedShotDelay", 250);

            m_chargedShotDelayTimer = new Timer(Engine.GameTime.Source, delay);

            ShakeComponent shakeCmp = new ShakeComponent(m_spritePlayerCmp);

            shakeCmp.ShakeAmount = 4.0f;
            Owner.Attach(shakeCmp);

            PlayerOffScreenMarker offScreenMarker = new PlayerOffScreenMarker();

            Owner.Attach(offScreenMarker);

            if (m_playerInfo.InputType == InputType.AI && m_teamMate.PlayerInfo.InputType == InputType.AI)
            {
                offScreenMarker.Hide = true;
            }

            m_moveDirection = Vector2.Zero;

            m_bodyCmp.OnCollision += new CollisionEvent(OnCollision);

            m_bodyCmp.UserData.Add("Tag", "Player");

            //Antenna
            var playerAntenna = new PlayerAntenna();

            Owner.Attach(playerAntenna);
        }