Ejemplo n.º 1
0
        public PlayerColorRemap(int[] Ramp, HSLColor c, float rampFraction)
        {
            // Increase luminosity if required to represent the full ramp
            var rampRange = (byte)((1 - rampFraction)*c.L);
            var c1 = new HSLColor(c.H, c.S, (byte)Math.Max(rampRange, c.L)).RGB;
            var c2 = new HSLColor(c.H, c.S, (byte)Math.Max(0, c.L - rampRange)).RGB;
            var baseIndex = Ramp[0];
            var RemapRamp = Ramp.Select(r => r - Ramp[0]).ToArray();

            if (Ramp[0] > Ramp[15]) // reversed remapping
            {
                baseIndex = Ramp[15];
                for (var i = 15; i > 0; i--)
                    RemapRamp = Ramp.Select(r => r - Ramp[15]).ToArray();
            }

            remapColors = RemapRamp.Select((x, i) => Pair.New(baseIndex + i, Exts.ColorLerp(x / 16f, c1, c2)))
                .ToDictionary(u => u.First, u => u.Second);
        }
Ejemplo n.º 2
0
        public Player(World world, Session.Client client, Session.Slot slot, PlayerReference pr)
        {
            World = world;
            InternalName = pr.Name;
            PlayerReference = pr;
            string botType = null;

            // Real player or host-created bot
            if (client != null)
            {
                ClientIndex = client.Index;
                Color = client.Color;
                PlayerName = client.Name;
                botType = client.Bot;
                Country = ChooseCountry(world, client.Country);
            }
            else
            {
                // Map player
                ClientIndex = 0; // Owned by the host (TODO: fix this)
                Color = pr.Color;
                PlayerName = pr.Name;
                NonCombatant = pr.NonCombatant;
                botType = pr.Bot;
                Country = ChooseCountry(world, pr.Race);
            }
            PlayerActor = world.CreateActor("Player", new TypeDictionary { new OwnerInit(this) });
            Shroud = PlayerActor.Trait<Shroud>();

            // Enable the bot logic on the host
            IsBot = botType != null;
            if (IsBot && Game.IsHost)
            {
                var logic = PlayerActor.TraitsImplementing<IBot>()
                            .FirstOrDefault(b => b.Info.Name == botType);
                if (logic == null)
                    Log.Write("debug", "Invalid bot type: {0}", botType);
                else
                    logic.Activate(this);
            }
        }