Beispiel #1
0
        public override void Start()
        {
            m_scoreTexts       = new TextComponent[3];
            m_scoreTextFxs     = new TextFx[3];
            m_textFxParameters = new TextFxParameters[3];
            for (int i = 0; i < m_textFxParameters.Length; i++)
            {
                m_textFxParameters[i] = new TextFxParameters();
            }

            m_scoreTextsSpacing = new Vector2[]
            {
                new Vector2(-150, 140),
                new Vector2(0, 140),
                new Vector2(150, 140)
            };

            Engine.World.EventManager.AddListener((int)EventId.Goal, OnGoal);
            Engine.World.EventManager.AddListener((int)EventId.LastSeconds, OnLastSeconds);
            Engine.World.EventManager.AddListener((int)EventId.Victory, OnVictory);
            Engine.World.EventManager.AddListener((int)EventId.MatchBegin, OnMatchBegin);
            Engine.World.EventManager.AddListener((int)EventId.FirstPeriod, OnFirstPeriod);
            Engine.World.EventManager.AddListener((int)EventId.SecondPeriodBegin, OnSecondPeriodBegin);
            Engine.World.EventManager.AddListener((int)EventId.SecondPeriod, OnSecondPeriod);
            Engine.World.EventManager.AddListener((int)EventId.HalfTime, OnHalfTime);
            Engine.World.EventManager.AddListener((int)EventId.MatchEnd, OnMatchEnd);
            Engine.World.EventManager.AddListener((int)EventId.Victory, OnVictory);

            m_timerScoreTextMS         = new Timer(Engine.GameTime.Source, 0);
            m_timerScoreTextEvent      = new TimerEvent(m_timerScoreTextMS_OnTime);
            m_timerScoreTextMS.OnTime += m_timerScoreTextEvent;

            m_timerCupSpriteMS         = new Timer(Engine.GameTime.Source, 0);
            m_timerCupSpriteEvent      = new TimerEvent(m_timerCupSpriteMS_OnTime);
            m_timerCupSpriteMS.OnTime += m_timerCupSpriteEvent;

            m_playerOffScreenMarkerSprites = new ColorMaskedSprite[4];
            for (int i = 0; i < m_playerOffScreenMarkerSprites.Length; i++)
            {
                Sprite sprite = Sprite.CreateFromTexture("Graphics/playerOffScreenMarkerAO.png");
                sprite.Scale = new Vector2(0.5f, 0.5f);
                m_playerOffScreenMarkerSprites[i] = new ColorMaskedSprite(sprite, "ArenaOverlay9");
                var texAsset = Engine.AssetManager.GetAsset <Texture2D>("Graphics/playerOffScreenMarkerAO.png");

                m_playerOffScreenMarkerSprites[i].Mask    = texAsset.Content;
                m_playerOffScreenMarkerSprites[i].Color1  = Game.GameManager.Players[i].PlayerColors[2];
                m_playerOffScreenMarkerSprites[i].Color2  = Game.GameManager.Players[i].PlayerColors[2];
                m_playerOffScreenMarkerSprites[i].Color3  = Game.GameManager.Players[i].PlayerColors[2];
                m_playerOffScreenMarkerSprites[i].Visible = false;

                Owner.Attach(m_playerOffScreenMarkerSprites[i]);

                PlayerOffScreenMarker playerOffScreenMarker = Game.GameManager.Players[i].Owner.FindComponent <PlayerOffScreenMarker>();
                playerOffScreenMarker.Init();
            }
        }
Beispiel #2
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);
        }