Ejemplo n.º 1
0
        /// <summary>
        /// Dessine le slot du héros donné à la position donnée.
        /// </summary>
        /// <param name="rect"></param>
        /// <param name="hero"></param>
        void DrawHero(SpriteBatch batch, Rectangle rect, Server.Entities.EntityHero hero)
        {
            float     layerDepth = 0.5f;
            const int iconSize   = 16;
            const int spellSize  = 32;
            var       ctrl       = m_sceneRenderer.GameServer.GetSrvScene().PickControler;
            var       scene      = m_sceneRenderer.GameServer.GetSrvScene();
            var       texture    = ctrl.IsMyTurn(hero.ID) ? Ressources.MenuItemHover : Ressources.MenuItem;

            EnhancedGui.Drawing.DrawRectBox(batch, texture, rect, Color.White, layerDepth + 0.1f);

            int x = rect.X + 20;
            int y = rect.Y + 20;

            // Dessine l'icone du rôle du héros
            batch.Draw(GetIcon((Views.EntityHeroRole)hero.Role), new Rectangle(x, y, iconSize, iconSize), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, layerDepth);
            x += iconSize + 10;

            // Dessine le nom du héros.
            batch.DrawString(Ressources.CourrierFont, scene.GetControlerByHeroId(hero.ID).HeroName, new Vector2(x, y), Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, layerDepth);

            y += 25;
            x  = rect.X + 20;
            // Dessine les sorts du héros.
            for (int i = 0; i < hero.Spells.Count; i++)
            {
                Rectangle iconRect = new Rectangle(x, y, spellSize, spellSize);
                batch.Draw(
                    Ressources.GetSpellTexture(hero.Spells[i].Name),
                    iconRect,
                    null,
                    Color.White,
                    0.0f,
                    Vector2.Zero,
                    SpriteEffects.None,
                    layerDepth);

                x += spellSize + 4;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Dessine le lobby.
        /// </summary>
        /// <param name="batch"></param>
        /// <param name="time"></param>
        public void Draw(SpriteBatch batch, GameTime time, RenderTarget2D output)
        {
            int       sw       = (int)Ressources.ScreenSize.X;
            int       sh       = (int)Ressources.ScreenSize.Y;
            const int iconSize = 16;

            // Dessine l'avant plan.
            batch.GraphicsDevice.SetRenderTarget(output);
            batch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
            batch.GraphicsDevice.Clear(Color.LightGray);
            int[] playerCount = new int[2];

            // Dessine les héros connectés.
            switch (m_sceneRenderer.Mode)
            {
            case DataMode.Direct:
                var scene = m_sceneRenderer.GameServer.GetSrvScene();
                lock (scene.ControlerLock)
                {
                    foreach (var kvp in scene.Controlers)
                    {
                        Server.Entities.EntityHero hero = kvp.Value.Hero;
                        int team = ((int)(hero.Type & Server.Entities.EntityType.Teams) >> 1) - 1;     // 0 ou 1

                        Rectangle rect = GetDrawRect(playerCount[team], team);
                        if (hero.ID == scene.LobbyControler.SelectedHeroId)
                        {
                            EnhancedGui.Drawing.DrawRectBox(batch, Ressources.MenuItemHover, rect, Color.White, 0.2f);
                        }
                        else
                        {
                            EnhancedGui.Drawing.DrawRectBox(batch, Ressources.MenuItem, rect, Color.White, 0.2f);
                        }


                        string  s      = kvp.Value.HeroName + " (" + kvp.Value.GetType().Name.Replace("Controler", "") + ")";
                        Vector2 size   = Ressources.CourrierFont.MeasureString(s);
                        Vector2 offset = (new Vector2(size.X, rect.Height) - size) / 2;

                        batch.Draw(GetIcon((Views.EntityHeroRole)hero.Role), new Rectangle(rect.X + 2, rect.Y + 4, iconSize, iconSize), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, 0.0f);
                        batch.DrawString(Ressources.CourrierFont, s, new Vector2(rect.X + (iconSize + 6), rect.Y) + offset, Color.White, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
                        playerCount[team]++;
                    }
                }

                break;

            case DataMode.Remote:


                throw new NotImplementedException();
            }


            // VS
            int     oy      = (1 * sh / 3);
            int     scale   = 6;
            string  str     = "VS";
            Vector2 strsize = Ressources.CourrierFont.MeasureString(str) * scale;

            batch.DrawString(Ressources.CourrierFont, str, new Vector2((sw - (int)strsize.X) / 2, (-oy / 2 + sh - (int)strsize.Y) / 2), Color.Black, 0.0f, Vector2.Zero, scale, SpriteEffects.None, 0.0f);


            // Instructions
            str     = "Appuyez sur Entrée pour lancer le jeu.";
            strsize = Ressources.CourrierFont.MeasureString(str);
            batch.DrawString(Ressources.CourrierFont, str, new Vector2((sw - (int)strsize.X) / 2, sh - 25), Color.Black);
            batch.End();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Dessine l'entité donnée en utilisant les primitives fournies
        /// par le batch donné.
        /// </summary>
        public virtual void Draw(SpriteBatch batch, GameTime time, Server.Entities.EntityBase entity)
        {
            // Extrait des informations utiles de l'entité.
            Vector2 entityPosition = entity.Position;

            Views.EntityType           type         = (Views.EntityType)entity.Type;
            Server.Entities.EntityHero entityAsHero = entity as Server.Entities.EntityHero;
            Views.EntityHeroRole       role         = entityAsHero != null ? (Views.EntityHeroRole)entityAsHero.Role : 0;
            Point scroll  = m_mapRenderer.Scrolling;
            Point drawPos = new Point((int)(entityPosition.X * m_mapRenderer.UnitSize) - scroll.X, (int)(entityPosition.Y * m_mapRenderer.UnitSize) - scroll.Y);

            // Si l'entité est hors du champ de vision : on la clip.
            if (drawPos.X > m_mapRenderer.Viewport.Right || drawPos.Y > m_mapRenderer.Viewport.Bottom ||
                drawPos.X < m_mapRenderer.Viewport.Left - m_mapRenderer.UnitSize || drawPos.Y < m_mapRenderer.Viewport.Top - m_mapRenderer.UnitSize)
            {
                return;
            }


            Color     col  = Color.White;
            Texture2D tex  = Ressources.DummyTexture;
            float     sx   = 1;
            float     sy   = 1; // scale X, Y
            bool      blue = type.HasFlag(Views.EntityType.Team1);

            switch (type & (Views.EntityType.Teams ^ (Views.EntityType.All)))
            {
            // Virus
            case Views.EntityType.Virus:
                sx  = 1;
                sy  = 1;
                tex = blue ? Ressources.BlueVirus : Ressources.RedVirus;
                break;

            // Player
            case Views.EntityType.Player:
                sx = 1;
                sy = 1;
                switch (role)
                {
                case Views.EntityHeroRole.Fighter:
                    tex = blue ? Ressources.BlueFighter : Ressources.RedFighter;
                    break;

                case Views.EntityHeroRole.Mage:
                    tex = blue ? Ressources.BlueMage : Ressources.RedMage;
                    break;

                case Views.EntityHeroRole.Tank:
                    tex = blue ? Ressources.BlueTank : Ressources.RedTank;
                    break;
                }
                break;

            // Tower
            case Views.EntityType.Tower:
                sx  = 1;
                sy  = 2;
                tex = blue ? Ressources.BlueTower : Ressources.RedTower;
                break;

            // Checkpoint
            case Views.EntityType.Checkpoint:
                sx = 0.25f; sy = 0.25f; col = blue ? Color.Blue : Color.Red;
                return;

            case Views.EntityType.Datacenter:
                sx  = 2.5f;
                sy  = 2.5f;
                tex = blue ? Ressources.BlueDatacenter : Ressources.RedDatacenter;
                break;

            case Views.EntityType.Spawner:
                sx  = 2;
                sy  = 2;
                tex = blue ? Ressources.BlueSpawner : Ressources.RedSpawner;
                break;

            case Views.EntityType.Monster:
                tex = Ressources.CampMonster;
                break;

            case Views.EntityType.Router:
                sx  = 2;
                sy  = 2;
                tex = Ressources.Router;
                break;

            case Views.EntityType.Ward:
                sx  = 1;
                sy  = 1;
                tex = blue ? Ressources.BlueWard : Ressources.RedWard;
                break;

            case Views.EntityType.WardPlacement:
                return;
            }


            // Rectangle de dessin de l'entité
            Rectangle drawRect = new Rectangle(drawPos.X, drawPos.Y, (int)(m_mapRenderer.UnitSize * sx), (int)(m_mapRenderer.UnitSize * sy));


            // 0 back, 1 front
            float entityZ = 0.25f + ((drawPos.Y - tex.Height) / m_mapRenderer.SceneRenderer.MainRenderTarget.Height) / 2;


            // Dessin de la jauge
            int     totalLength   = (int)(drawRect.Width) * 3 / 4;
            int     totalH        = 6;
            Vector2 gaugeOrigin   = new Vector2(0, 0);
            float   max           = (entity.GetMaxHP() + entity.ShieldPoints);
            float   percent       = entity.HP / max;
            float   shieldPercent = entity.ShieldPoints / max;

            int offsetY = -drawRect.Height;
            int offsetX = -drawRect.Width / 2;

            Rectangle gaugeRect = new Rectangle(drawPos.X + offsetX + (drawRect.Width - totalLength) / 2,
                                                drawPos.Y + offsetY - 10,
                                                totalLength,
                                                totalH);

            if (!entity.IsDamageImmune)
            {
                float gaugeZ     = 0.25f + ((gaugeRect.Y - tex.Height) / m_mapRenderer.SceneRenderer.MainRenderTarget.Height) / 2;
                Color gaugeColor = type.HasFlag(Views.EntityType.Team1) ? Color.Blue : (type.HasFlag(Views.EntityType.Team2) ? Color.Red : Color.White);
                // Jauge vide
                batch.Draw(Ressources.LifebarEmpty,
                           gaugeRect,
                           null,
                           gaugeColor,
                           0, gaugeOrigin, SpriteEffects.None, gaugeZ);

                // Vie
                gaugeRect.Width = (int)(totalLength * percent);
                batch.Draw(Ressources.LifebarFull,
                           gaugeRect,
                           null,
                           gaugeColor,
                           0, gaugeOrigin, SpriteEffects.None, gaugeZ + 0.00001f);

                if (entity.ShieldPoints > 0)
                {
                    // Shield
                    gaugeRect.X    += (int)(totalLength * percent);
                    gaugeRect.Width = (int)(gaugeRect.Width * shieldPercent);
                    batch.Draw(Ressources.LifebarFull,
                               gaugeRect,
                               null,
                               Color.White,
                               0, gaugeOrigin, SpriteEffects.None, gaugeZ + 0.00002f);
                }
            }
            // Entité
            col.A = (byte)((m_mapRenderer.HasVision((type & Views.EntityType.Teams) ^ Views.EntityType.Teams, entityPosition)) ? 255 : 220);
            if (entity.IsStealthed)
            {
                col.A = 120;
            }



            // Dessin de l'entité
            batch.Draw(tex,
                       drawRect,
                       null,
                       col,
                       __angle,
                       new Vector2(tex.Width / 2, tex.Height),
                       SpriteEffects.None,
                       entityZ);

            // Roots
            if (entity.IsSilenced)
            {
                int       us    = m_mapRenderer.UnitSize;
                Rectangle drect = new Rectangle(gaugeRect.X + us, gaugeRect.Y, us / 2, us / 2);
                batch.Draw(Ressources.SilenceIcon,
                           drect,
                           null,
                           Color.White, 0.0f, new Vector2(0, 0), SpriteEffects.None, entityZ);
            }
            if (entity.IsBlind)
            {
                int       us    = m_mapRenderer.UnitSize;
                Rectangle drect = new Rectangle(gaugeRect.X - us, gaugeRect.Y, us / 2, us / 2);
                batch.Draw(Ressources.BlindIcon,
                           drect,
                           null,
                           Color.White, 0.0f, new Vector2(0, 0), SpriteEffects.None, entityZ);
            }
        }