Пример #1
0
 public MapInfo(MySqlDataReader readerMapInfo)
 {
     Index           = Convert.ToInt32(readerMapInfo["IndexID"]);
     FileName        = Convert.ToString(readerMapInfo["FileName"]);
     Title           = Convert.ToString(readerMapInfo["Title"]);
     NoReconnectMap  = Convert.ToString(readerMapInfo["NoReconnectMap"]);
     MiniMap         = Convert.ToUInt16(readerMapInfo["MiniMap"]);
     BigMap          = Convert.ToUInt16(readerMapInfo["BigMap"]);
     Music           = Convert.ToUInt16(readerMapInfo["Music"]);
     Light           = (LightSetting)Convert.ToByte(readerMapInfo["Light"]);
     MapDarkLight    = Convert.ToByte(readerMapInfo["MapDarkLight"]);
     FireDamage      = Convert.ToInt32(readerMapInfo["FireDamage"]);
     LightningDamage = Convert.ToInt32(readerMapInfo["LightningDamage"]);
     MineIndex       = Convert.ToByte(readerMapInfo["MineIndex"]);
     NoTeleport      = Convert.ToBoolean(readerMapInfo["NoTeleport"]);
     NoReconnect     = Convert.ToBoolean(readerMapInfo["NoReconnect"]);
     NoRandom        = Convert.ToBoolean(readerMapInfo["NoRandom"]);
     NoEscape        = Convert.ToBoolean(readerMapInfo["NoEscape"]);
     NoRecall        = Convert.ToBoolean(readerMapInfo["NoRecall"]);
     NoDrug          = Convert.ToBoolean(readerMapInfo["NoDrug"]);
     NoPosition      = Convert.ToBoolean(readerMapInfo["NoPosition"]);
     NoFight         = Convert.ToBoolean(readerMapInfo["NoFight"]);
     NoThrowItem     = Convert.ToBoolean(readerMapInfo["NoThrowItem"]);
     NoDropPlayer    = Convert.ToBoolean(readerMapInfo["NoDropPlayer"]);
     NoDropMonster   = Convert.ToBoolean(readerMapInfo["NoDropMonster"]);
     NoNames         = Convert.ToBoolean(readerMapInfo["NoNames"]);
     NoMount         = Convert.ToBoolean(readerMapInfo["NoMount"]);
     NeedBridle      = Convert.ToBoolean(readerMapInfo["NeedBridle"]);
     Fight           = Convert.ToBoolean(readerMapInfo["Fight"]);
     NeedHole        = Convert.ToBoolean(readerMapInfo["NeedHole"]);
     Fire            = Convert.ToBoolean(readerMapInfo["Fire"]);
     Lightning       = Convert.ToBoolean(readerMapInfo["Lightning"]);
 }
Пример #2
0
        public async Task <IViewComponentResult> InvokeAsync(string hostname)
        {
            var dbLights = _db.GetCollection <LightControllerEntity>().Query();

            var lightSettings = await Task.WhenAll(dbLights
                                                   .ToEnumerable()
                                                   .Select(async _ =>
            {
                var lightSetting = new LightSetting
                {
                    Hostname = _.Hostname,
                };

                try
                {
                    lightSetting.State = await LightingProxy.GetState(_.Hostname);
                }
                catch
                {
                    lightSetting.State = new LightingProxy.LightStateDto();
                }

                return(lightSetting);
            }));

            var model = new SettingsModel
            {
                LightSettings = lightSettings
            };

            return(View("Default", model));
        }
Пример #3
0
        private static void EnvirLoop()
        {
            while (true)
            {
                Main.UpdateTime();

                for (int I = 0; I < MapList.Count; I++)
                {
                    MapList[I].Process();
                }

                int Hours = (Main.Now.Hour * 2) % 24;
                if (Hours == 6 || Hours == 7)
                {
                    CurrentLights = LightSetting.Dawn;
                }
                else if (Hours >= 8 && Hours <= 15)
                {
                    CurrentLights = LightSetting.Day;
                }
                else if (Hours == 16 || Hours == 17)
                {
                    CurrentLights = LightSetting.Evening;
                }
                else
                {
                    CurrentLights = LightSetting.Night;
                }



                Thread.Sleep(1);
            }
        }
        public RepositoryActionResult <LightSetting> PostLightSetting(LightSetting entity, Guid currentUserGuid)
        {
            try
            {
                GrowSetting growSetting = GetGrowSetting(entity.GrowPhaseSetting.GrowSettingId, currentUserGuid);
                if (growSetting == null)
                {
                    return(new RepositoryActionResult <LightSetting>(entity, RepositoryActionStatus.NotFound));
                }
                if (growSetting.UserGuid != currentUserGuid)
                {
                    return(new RepositoryActionResult <LightSetting>(entity, RepositoryActionStatus.NotFound));
                }

                _dbContext.LightSetting.Add(entity);
                int result = _dbContext.SaveChanges();
                if (result > 0)
                {
                    return(new RepositoryActionResult <LightSetting>(entity, RepositoryActionStatus.Created));
                }
                return(new RepositoryActionResult <LightSetting>(entity, RepositoryActionStatus.NothingModified, null));
            }
            catch (Exception ex)
            {
                return(new RepositoryActionResult <LightSetting>(null, RepositoryActionStatus.Error, ex));
            }
        }
Пример #5
0
        public MapInfo(DataRow Row)
        {
            MapIndex = Row["Map Index"] is DBNull ? -1 : (int)Row["Map Index"];
            FileName = Row["File Name"] is DBNull ? string.Empty : Row["File Name"].ToString();
            MapName  = Row["Map Name"] is DBNull ? string.Empty : Row["Map Name"].ToString();
            MiniMap  = Row["Mini Map"] is DBNull ? -1 : (int)Row["Mini Map"];
            BigMap   = Row["Big Map"] is DBNull ? -1 : (int)Row["Big Map"];

            string Flags = Row["Flags"] is DBNull ? string.Empty : Row["Flags"].ToString();

            if (Flags.IndexOf("SAFE", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                FightMode = FightSetting.Safe;
            }
            else if (Flags.IndexOf("FIGHT", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                FightMode = FightSetting.Fight;
            }

            if (Flags.IndexOf("DAY", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                LightMode = LightSetting.Day;
            }
            else if (Flags.IndexOf("NIGHT", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                LightMode = LightSetting.Night;
            }

            if (Flags.IndexOf("MINE", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                CanMine = true;
            }
        }
        public RepositoryActionResult <LightSetting> DeleteLightSetting(int growSettingId, int GrowPhaseSettingId,
                                                                        int lightSettingsId, Guid currentUserGuid)
        {
            try
            {
                LightSetting lightSetting =
                    _dbContext.LightSetting.FirstOrDefault(ls => ls.GrowPhaseSetting.GrowSettingId == growSettingId &&
                                                           ls.GrowPhaseSettingId == GrowPhaseSettingId &&
                                                           ls.LightSettingId == lightSettingsId
                                                           &&
                                                           ls.GrowPhaseSetting.GrowSetting.UserGuid ==
                                                           currentUserGuid);

                if (lightSetting == null)
                {
                    return(new RepositoryActionResult <LightSetting>(null, RepositoryActionStatus.NotFound));
                }

                _dbContext.LightSetting.Remove(lightSetting);

                _dbContext.SaveChanges();
                return(new RepositoryActionResult <LightSetting>(null, RepositoryActionStatus.Deleted));
            }
            catch (Exception ex)
            {
                return(new RepositoryActionResult <LightSetting>(null, RepositoryActionStatus.Error, ex));
            }
        }
        public RepositoryActionResult <LightSetting> PutLightSetting(int growSettingId, int GrowPhaseSettingId,
                                                                     int lightSettingsId,
                                                                     LightSetting modLightSetting, Guid currentUserGuid)
        {
            if (modLightSetting.GrowPhaseSetting.GrowSetting.UserGuid != currentUserGuid)
            {
                return(new RepositoryActionResult <LightSetting>(modLightSetting, RepositoryActionStatus.NotFound));
            }

            //_dbContext.Entry(modLightSetting).State = EntityState.Modified;

            try
            {
                _dbContext.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                if (!LightSettingExists(lightSettingsId))
                {
                    return(new RepositoryActionResult <LightSetting>(null, RepositoryActionStatus.Error, ex));
                }
                throw;
            }
            return(new RepositoryActionResult <LightSetting>(modLightSetting, RepositoryActionStatus.Updated));
        }
Пример #8
0
        public MapInfo(BinaryReader reader)
        {
            Index = reader.ReadInt32();
            FileName = reader.ReadString();
            Title = reader.ReadString();
            MiniMap = reader.ReadUInt16();
            Light = (LightSetting) reader.ReadByte();
            if (Envir.LoadVersion >= 3) BigMap = reader.ReadUInt16();
            if (Envir.LoadVersion >= 10) reader.ReadByte();

            int count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                SafeZones.Add(new SafeZoneInfo(reader) { Info = this });

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                Respawns.Add(new RespawnInfo(reader));

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                NPCs.Add(new NPCInfo(reader));

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                Movements.Add(new MovementInfo(reader));
        }
Пример #9
0
 public LightViewModel(LightSetting settings, Color defaultColor)
 {
     Name = settings.Name;
     this.defaultColor = defaultColor;
     activeColor       = settings.Color;
     DurationSeconds   = settings.DurationSeconds;
 }
Пример #10
0
        private IEnumerator Fade(EDayState state)
        {
            Single rndStartOffset = UnityEngine.Random.value * 1f;

            yield return(new WaitForSeconds(rndStartOffset));

            Single       startIntensity = GetIntensity();
            Single       startRange     = light.range;
            Color        startColor     = light.color;
            LightSetting targetSetting  = GetTargetSetting(state);

            UpdateParticles(targetSetting);
            Single            currTime = Time.time - Time.deltaTime;
            Single            endTime  = Time.time + 3.1f + UnityEngine.Random.value * 1f - rndStartOffset;
            WaitForEndOfFrame wait     = new WaitForEndOfFrame();

            while (currTime < endTime)
            {
                currTime += Time.deltaTime;
                if (currTime > endTime)
                {
                    currTime = endTime;
                }
                Single lerp          = (endTime - currTime) / 3.1f;
                Single nextIntensity = Mathf.Lerp(targetSetting.Intensity, startIntensity, lerp);
                Single nextRange     = Mathf.Lerp(targetSetting.Range, startRange, lerp);
                Color  nextColor     = Color.Lerp(targetSetting.Color, startColor, lerp);
                light.enabled = (nextIntensity > 0f && nextRange > 0f && (nextColor.r > 0f || nextColor.g > 0f || nextColor.b > 0f));
                SetIntensity(nextIntensity);
                light.range = nextRange;
                light.color = nextColor;
                yield return(wait);
            }
            yield break;
        }
Пример #11
0
        public IHttpActionResult PostLightSetting(int growSettingId, int growPhaseSettingId, LightSettingDto lightSetting)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                Guid currentUserGuid = _userHelper.GetUserGuid();

                LightSetting entity = _lightSettingFactory.PostLightSetting(lightSetting);

                RepositoryActionResult <LightSetting> result = _growSettingsRepository.PostLightSetting(entity,
                                                                                                        currentUserGuid);

                if (result.Status == RepositoryActionStatus.Created)
                {
                    // map to dto
                    LightSettingDto newLightSetting = _lightSettingFactory.GetLightSetting(result.Entity);
                    lightSetting.LightSettingId = entity.LightSettingId;
                    //TODO: this is wrong return address, find out correct one and replace
                    return(Created(Request.RequestUri
                                   + "/" + result.Entity.LightSettingId, newLightSetting));
                }

                throw new Exception();
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Пример #12
0
 private void UpdateParticles(LightSetting p_nextSetting)
 {
     UpdateParticles(m_dawn, p_nextSetting);
     UpdateParticles(m_day, p_nextSetting);
     UpdateParticles(m_dusk, p_nextSetting);
     UpdateParticles(m_night, p_nextSetting);
 }
Пример #13
0
 public ClientMapInfo(BinaryReader BReader)
 {
     MapIndex = BReader.ReadInt32();
     FileName = BReader.ReadString();
     MapName  = BReader.ReadString();
     MiniMap  = BReader.ReadInt32();
     Lights   = (LightSetting)BReader.ReadByte();
 }
Пример #14
0
 public LightningManager(LightChannel observedChannel)
 {
     lightChannel   = observedChannel;
     availableModes = new List <LightSetting>();
     BuildLightOptions();
     menuItems       = MenuFactory(availableModes);
     animationSpeed  = AnimationSpeed.Normal;
     selectedSetting = availableModes[0];
 }
Пример #15
0
 public void SwitchLights(LightSetting setting, params Light[] lights)
 {
     LightSetting[] settings = new LightSetting[lights.Length];
     for (int i = 0; i < settings.Length; i++)
     {
         settings[i] = setting;
     }
     Physical.ChangeLightStates(lights, settings);
 }
Пример #16
0
 private void LightingManagerCallback(LightningManager sender, LightSetting setting)
 {
     commander.AddCommand(KrakenDevice.GenerateLightMessage(setting.mode,
                                                            new ControlBlock(false, false, sender.lightChannel),
                                                            new LEDConfiguration(0, 0, AnimationSpeed.Normal),
                                                            new[] {
         0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF,
         0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF
     }));
 }
Пример #17
0
 public LightSettingDto GetLightSetting(LightSetting lightSetting)
 {
     return(new LightSettingDto
     {
         LightSettingId = lightSetting.LightSettingId,
         TurnOnLightTime = lightSetting.TurnOnLightTime,
         TurnOffLightTime = lightSetting.TurnOffLightTime,
         GrowPhaseSettingId = lightSetting.GrowPhaseSettingId
     });
 }
Пример #18
0
        public MapInfo(BinaryReader reader)
        {
            Index = reader.ReadInt32();
            FileName = reader.ReadString();
            Title = reader.ReadString();
            MiniMap = reader.ReadUInt16();
            Light = (LightSetting) reader.ReadByte();

            if (Envir.LoadVersion >= 3) BigMap = reader.ReadUInt16();

            int count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                SafeZones.Add(new SafeZoneInfo(reader) { Info = this });

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                Respawns.Add(new RespawnInfo(reader));

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                NPCs.Add(new NPCInfo(reader));

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                Movements.Add(new MovementInfo(reader));

            if (Envir.LoadVersion < 14) return;

            NoTeleport = reader.ReadBoolean();
            NoReconnect = reader.ReadBoolean();
            NoReconnectMap = reader.ReadString();
            NoRandom = reader.ReadBoolean();
            NoEscape = reader.ReadBoolean();
            NoRecall = reader.ReadBoolean();
            NoDrug = reader.ReadBoolean();
            NoPosition = reader.ReadBoolean();
            NoThrowItem = reader.ReadBoolean();
            NoDropPlayer = reader.ReadBoolean();
            NoDropMonster = reader.ReadBoolean();
            NoNames = reader.ReadBoolean();
            Fight = reader.ReadBoolean();
            if (Envir.LoadVersion == 14) NeedHole = reader.ReadBoolean();
            Fire = reader.ReadBoolean();
            FireDamage = reader.ReadInt32();
            Lightning = reader.ReadBoolean();
            LightningDamage = reader.ReadInt32();
            if (Envir.LoadVersion < 23) return;
            MapDarkLight = reader.ReadByte();
            if (Envir.LoadVersion < 26) return;
            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
                MineZones.Add(new MineZone(reader));
            if (Envir.LoadVersion < 27) return;
            MineIndex = reader.ReadByte();
        }
Пример #19
0
        private void MenuItemOnChecked(object sender, RoutedEventArgs e)
        {
            menuItems.ForEach(x => x.IsChecked = x.Equals(sender));
            var item = sender as MenuItem;

            if (item == null)
            {
                return;
            }
            var setting = availableModes.First(x => x.mode.ToString() == item.Header.ToString());

            selectedSetting = setting;
            OnNewLightSetting.Invoke(this, setting);
        }
Пример #20
0
 public void SwitchToLights(params Light[] lights)
 {
     Light[]        allLights = (Light[])Enum.GetValues(typeof(Light));
     LightSetting[] settings  = new LightSetting[EtsInterface.LightsCount];
     for (int i = 0; i < settings.Length; i++)
     {
         settings[i] = LightSetting.Off;
     }
     for (int i = 0; i < lights.Length; i++)
     {
         settings[(int)lights[i]] = LightSetting.On;
     }
     Physical.ChangeLightStates(allLights, settings);
 }
Пример #21
0
        public IHttpActionResult PutLightSetting(int growSettingId, int growPhaseSettingId, int lightSettingsId,
                                                 LightSettingDto lightSetting)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                Guid currentUserGuid = _userHelper.GetUserGuid();

                LightSetting originalEntity = _growSettingsRepository.GetLightSetting(growSettingId, growPhaseSettingId,
                                                                                      lightSettingsId, currentUserGuid);

                if (originalEntity == null)
                {
                    return(NotFound());
                }

                LightSetting modifiedGrowPhaseSetting = _lightSettingFactory.PutLightSetting(originalEntity, lightSetting);

                RepositoryActionResult <LightSetting> result = _growSettingsRepository.PutLightSetting(growSettingId,
                                                                                                       growPhaseSettingId, lightSettingsId, modifiedGrowPhaseSetting,
                                                                                                       currentUserGuid);

                switch (result.Status)
                {
                case RepositoryActionStatus.Updated:
                    return(Ok(_lightSettingFactory.GetLightSetting(modifiedGrowPhaseSetting)));

                case RepositoryActionStatus.Error:
                    return(InternalServerError());

                case RepositoryActionStatus.NotFound:
                    return(NotFound());

                case RepositoryActionStatus.NothingModified:
                    return(Ok(_lightSettingFactory.GetLightSetting(modifiedGrowPhaseSetting)));

                default:
                    return(BadRequest());
                }
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Пример #22
0
 private static void UpdateParticles(LightSetting p_setting, LightSetting p_nextSetting)
 {
     if (p_setting.ParticleSys != null)
     {
         if (p_nextSetting.ParticleSys == p_setting.ParticleSys)
         {
             if (!p_setting.ParticleSys.isPlaying)
             {
                 p_setting.ParticleSys.Play();
             }
         }
         else if (p_setting.ParticleSys.isPlaying)
         {
             p_setting.ParticleSys.Stop();
         }
     }
 }
Пример #23
0
        public Light GetLight(LightSetting setting)
        {
            this.setting = setting;
            switch (setting.Vendor)
            {
            case LightVendor.Anda:
                Lighting = new AndaLight();
                break;

            case LightVendor.Custom:
                //Lighting = new LightingOPT(setting.prm);
                Lighting = new LightCustom(setting.EasySerialPort);
                break;

            case LightVendor.OPT:
                Lighting = new LightingOPT(setting.EasySerialPort);
                break;
            }
            return(this);
        }
Пример #24
0
        public IHttpActionResult GetLightSetting(int growSettingId, int growPhaseSettingId, int lightSettingsId)
        {
            try
            {
                Guid currentUserGuid = _userHelper.GetUserGuid();

                LightSetting lightSetting = _growSettingsRepository.GetLightSetting(growSettingId, growPhaseSettingId,
                                                                                    lightSettingsId,
                                                                                    currentUserGuid);

                if (lightSetting == null)
                {
                    return(NotFound());
                }

                return(Ok(_lightSettingFactory.GetLightSetting(lightSetting)));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Пример #25
0
        private void DrawLights(LightSetting setting)
        {
            if (DXManager.Lights == null || DXManager.Lights.Count == 0) return;

            if (_lightTexture == null || _lightTexture.Disposed)
            {
                _lightTexture = new Texture(DXManager.Device, Settings.ScreenWidth, Settings.ScreenHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
                _lightTexture.Disposing += FloorTexture_Disposing;
                _lightSurface = _lightTexture.GetSurfaceLevel(0);
            }

            Surface oldSurface = DXManager.CurrentSurface;
            DXManager.SetSurface(_lightSurface);
            Color Darkness = Color.Black;
            switch (MapDarkLight)//todo fill these with more usefull values :p
            {
                case 1:
                    Darkness = Color.FromArgb(255, 20, 20, 20);
                    break;
                case 2:
                    Darkness = Color.LightSlateGray;
                    break;
                case 3:
                    Darkness = Color.SkyBlue;
                    break;
                case 4:
                    Darkness = Color.Goldenrod;
                    break;
                default:
                    Darkness = Color.Black;
                    break;
            }

            DXManager.Device.Clear(ClearFlags.Target, setting == LightSetting.Night ? Darkness : Color.FromArgb(255, 50, 50, 50), 0, 0);

            int light;
            Point p;
            DXManager.SetBlend(true);
            DXManager.Device.RenderState.SourceBlend = Blend.SourceAlpha;

            for (int i = 0; i < Objects.Count; i++)
            {
                MapObject ob = Objects[i];
                if (ob.Light > 0 && (!ob.Dead || ob == MapObject.User || ob.Race == ObjectType.Spell))
                {

                    light = ob.Light;
                    int LightRange = light % 15;
                    if (LightRange >= DXManager.Lights.Count)
                        LightRange = DXManager.Lights.Count - 1;

                    p = ob.DrawLocation;

                    Color lightIntensity;

                    switch (light / 15)
                    {
                        case 0://no light source
                            lightIntensity = Color.FromArgb(255, 60, 60, 60);
                            break;
                        case 1:
                            lightIntensity = Color.FromArgb(255, 120, 120, 120);
                            break;
                        case 2://Candle
                            lightIntensity = Color.FromArgb(255, 180, 180, 180);
                            break;
                        case 3://Torch
                            lightIntensity = Color.FromArgb(255, 240, 240, 240);
                            break;
                        default://Peddler Torch
                            lightIntensity = Color.FromArgb(255, 255, 255, 255);
                            break;
                    }

                    //NPCs use wider light width, but low source
                    if (ob.Race == ObjectType.Merchant)
                        lightIntensity = Color.FromArgb(255, 120, 120, 120);

                    if (DXManager.Lights[LightRange] != null && !DXManager.Lights[LightRange].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[LightRange].X / 2) - (CellWidth / 2) + 10, -(DXManager.LightSizes[LightRange].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[LightRange], PointF.Empty, 0, p, lightIntensity); // ob is MonsterObject && ob.AI != 6 ? Color.PaleVioletRed : 
                    }

                }

                if (!Settings.Effect) continue;
                for (int e = 0; e < ob.Effects.Count; e++)
                {
                    Effect effect = ob.Effects[e];
                    if (!effect.Blend || CMain.Time < effect.Start || (!(effect is Missile) && effect.Light < ob.Light)) continue;

                    light = effect.Light;

                    p = effect.DrawLocation;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2) + 10, -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, effect.LightColour);
                    }

                }
            }


            if (Settings.Effect)
                for (int e = 0; e < Effects.Count; e++)
                {
                    Effect effect = Effects[e];
                    if (!effect.Blend || CMain.Time < effect.Start) continue;

                    light = effect.Light;
                    if (light == 0) continue;

                    p = effect.DrawLocation;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2) + 10, -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, Color.White);
                    }
                }


            for (int y = MapObject.User.Movement.Y - ViewRangeY - 24; y <= MapObject.User.Movement.Y + ViewRangeY + 24; y++)
            {
                if (y < 0) continue;
                if (y >= Height) break;
                for (int x = MapObject.User.Movement.X - ViewRangeX - 24; x < MapObject.User.Movement.X + ViewRangeX + 24; x++)
                {
                    if (x < 0) continue;
                    if (x >= Width) break;
                    int imageIndex = (M2CellInfo[x, y].FrontImage & 0x7FFF) - 1;
                    if (M2CellInfo[x, y].Light <= 0 || M2CellInfo[x, y].Light >= 10) continue;
                    Color lightIntensity = Color.FromArgb(255, 255, 255, 255);  //Color lightIntensity = Color.FromArgb(255, 97, 200, 200); -- this colour matches mir3
                    //this code would look great on shanda mir2 maps (give a blue glow to blue town lights), but it'll also give blue glow to mir3 maps
                    //if (M2CellInfo[x, y].Light == 4) 
                    //    lightIntensity = Color.FromArgb(255, 100,100,200);
                    light = M2CellInfo[x, y].Light * 3;
                    int fileIndex = M2CellInfo[x, y].FrontIndex;

                    p = new Point(
                        (x + OffSetX - MapObject.User.Movement.X) * CellWidth + MapObject.User.OffSetMove.X,
                        (y + OffSetY - MapObject.User.Movement.Y) * CellHeight + MapObject.User.OffSetMove.Y + 32);


                    if (M2CellInfo[x, y].FrontAnimationFrame > 0)
                        p.Offset(Libraries.MapLibs[fileIndex].GetOffSet(imageIndex));

                    if (light >= DXManager.Lights.Count)
                        light = DXManager.Lights.Count - 1;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2) + 10, -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, lightIntensity);
                    }
                }
            }

            DXManager.SetBlend(false);
            DXManager.SetSurface(oldSurface);

            DXManager.Device.RenderState.SourceBlend = Blend.DestinationColor;
            DXManager.Device.RenderState.DestinationBlend = Blend.BothInvSourceAlpha;

            DXManager.Sprite.Draw2D(_lightTexture, PointF.Empty, 0, PointF.Empty, Color.White);
            DXManager.Sprite.End();
            DXManager.Sprite.Begin(SpriteFlags.AlphaBlend);
        }
Пример #26
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                Objects.Clear();

                MapButtons = 0;
                MouseLocation = Point.Empty;
                InputDelay = 0;
                NextAction = 0;

                M2CellInfo = null;
                Width = 0;
                Height = 0;

                FileName = String.Empty;
                Title = String.Empty;
                MiniMap = 0;
                BigMap = 0;
                Lights = 0;
                FloorValid = false;
                LightsValid = false;
                MapDarkLight = 0;
                Music = 0;

                if (_floorSurface != null && !_floorSurface.Disposed)
                    _floorSurface.Dispose();


                if (_lightSurface != null && !_lightSurface.Disposed)
                    _lightSurface.Dispose();

                AnimationCount = 0;
                Effects.Clear();
            }

            base.Dispose(disposing);
        }
Пример #27
0
 private void TimeOfDay(S.TimeOfDay p)
 {
     Lights = p.Lights;
     switch (Lights)
     {
         case LightSetting.Day:
         case LightSetting.Normal:
             MiniMapDialog.LightSetting.Index = 2093;
             break;
         case LightSetting.Dawn:
             MiniMapDialog.LightSetting.Index = 2095;
             break;
         case LightSetting.Evening:
             MiniMapDialog.LightSetting.Index = 2094;
             break;
         case LightSetting.Night:
             MiniMapDialog.LightSetting.Index = 2092;
             break;
     }
 }
Пример #28
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                Scene = null;
                User = null;

                MoveTime = 0;
                AttackTime = 0;
                NextRunTime = 0;
                CanMove = false;
                CanRun = false;

                MapControl = null;
                MainDialog = null;
                ChatDialog = null;
                ChatControl = null;
                InventoryDialog = null;
                CharacterDialog = null;
                StorageDialog = null;
                BeltDialog = null;
                MiniMapDialog = null;
                InspectDialog = null;
                OptionDialog = null;
                MenuDialog = null;
                NPCDialog = null;
                QuestDetailDialog = null;
                QuestListDialog = null;
                QuestLogDialog = null;
                QuestTrackingDialog = null;
                GameShopDialog = null;
                MentorDialog = null;

                RelationshipDialog = null;
                CharacterDuraPanel = null;
                DuraStatusPanel = null;

                HoverItem = null;
                SelectedCell = null;
                PickedUpGold = false;

                UseItemTime = 0;
                PickUpTime = 0;
                InspectTime = 0;

                DisposeItemLabel();

                AMode = 0;
                PMode = 0;
                Lights = 0;

                NPCTime = 0;
                NPCID = 0;
                DefaultNPCID = 0;

                for (int i = 0; i < OutputLines.Length; i++)
                    if (OutputLines[i] != null && OutputLines[i].IsDisposed)
                        OutputLines[i].Dispose();

                OutputMessages.Clear();
                OutputMessages = null;
            }

            base.Dispose(disposing);
        }
Пример #29
0
 public LightSetting PutLightSetting(LightSetting originalEntity, LightSettingDto lightSetting)
 {
     originalEntity.TurnOffLightTime = lightSetting.TurnOffLightTime;
     originalEntity.TurnOnLightTime  = lightSetting.TurnOnLightTime;
     return(originalEntity);
 }
Пример #30
0
        private void AdjustLights()
        {
            LightSetting oldLights = Lights;

            int hours = (Now.Hour * 2) % 24;
            if (hours == 6 || hours == 7)
                Lights = LightSetting.Dawn;
            else if (hours >= 8 && hours <= 15)
                Lights = LightSetting.Day;
            else if (hours == 16 || hours == 17)
                Lights = LightSetting.Evening;
            else
                Lights = LightSetting.Night;

            if (oldLights == Lights) return;

            Broadcast(new S.TimeOfDay { Lights = Lights });
        }
Пример #31
0
 protected override void ReadPacket(BinaryReader reader)
 {
     FileName = reader.ReadString();
     Title = reader.ReadString();
     MiniMap = reader.ReadUInt16();
     BigMap = reader.ReadUInt16();
     Lights = (LightSetting)reader.ReadByte();
     Location = new Point(reader.ReadInt32(), reader.ReadInt32());
     Direction = (MirDirection)reader.ReadByte();
     MapDarkLight = reader.ReadByte();
     Music = reader.ReadUInt16();
 }
Пример #32
0
        private void DrawLights(LightSetting setting)
        {
            if (DXManager.Lights == null || DXManager.Lights.Count == 0) return;

            if (_lightTexture == null || _lightTexture.Disposed)
            {
                _lightTexture = new Texture(DXManager.Device, Settings.ScreenWidth, Settings.ScreenHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
                _lightTexture.Disposing += FloorTexture_Disposing;
                _lightSurface = _lightTexture.GetSurfaceLevel(0);
            }

            Surface oldSurface = DXManager.CurrentSurface;
            DXManager.SetSurface(_lightSurface);

            #region Night Lights
            Color Darkness = Color.Black;
            switch (MapDarkLight)
            {
                case 1:
                    Darkness = Color.FromArgb(255, 20, 20, 20);
                    break;
                case 2:
                    Darkness = Color.LightSlateGray;
                    break;
                case 3:
                    Darkness = Color.SkyBlue;
                    break;
                case 4:
                    Darkness = Color.Goldenrod;
                    break;
                default:
                    Darkness = Color.Black;
                    break;
            }

            DXManager.Device.Clear(ClearFlags.Target, setting == LightSetting.Night ? Darkness : Color.FromArgb(255, 50, 50, 50), 0, 0);

            #endregion

            int light;
            Point p;
            DXManager.SetBlend(true);
            DXManager.Device.RenderState.SourceBlend = Blend.SourceAlpha;

            #region Object Lights (Player/Mob/NPC)
            for (int i = 0; i < Objects.Count; i++)
            {
                MapObject ob = Objects[i];
                if (ob.Light > 0 && (!ob.Dead || ob == MapObject.User || ob.Race == ObjectType.Spell))
                {

                    light = ob.Light;
                    int LightRange = light % 15;
                    if (LightRange >= DXManager.Lights.Count)
                        LightRange = DXManager.Lights.Count - 1;

                    p = ob.DrawLocation;

                    Color lightColour = ob.LightColour;

                    if (ob.Race == ObjectType.Player)
                    {
                        switch (light / 15)
                        {
                            case 0://no light source
                                lightColour = Color.FromArgb(255, 60, 60, 60);
                                break;
                            case 1:
                                lightColour = Color.FromArgb(255, 120, 120, 120);
                                break;
                            case 2://Candle
                                lightColour = Color.FromArgb(255, 180, 180, 180);
                                break;
                            case 3://Torch
                                lightColour = Color.FromArgb(255, 240, 240, 240);
                                break;
                            default://Peddler Torch
                                lightColour = Color.FromArgb(255, 255, 255, 255);
                                break;
                        }
                    }
                    else if (ob.Race == ObjectType.Merchant)
                    {
                        lightColour = Color.FromArgb(255, 120, 120, 120);
                    }

                    if (DXManager.Lights[LightRange] != null && !DXManager.Lights[LightRange].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[LightRange].X / 2) - (CellWidth / 2), -(DXManager.LightSizes[LightRange].Y / 2) - (CellHeight / 2) -5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[LightRange], PointF.Empty, 0, p, lightColour);
                    }

                }
                #region Object Effect Lights
                if (!Settings.Effect) continue;
                for (int e = 0; e < ob.Effects.Count; e++)
                {
                    Effect effect = ob.Effects[e];
                    if (!effect.Blend || CMain.Time < effect.Start || (!(effect is Missile) && effect.Light < ob.Light)) continue;

                    light = effect.Light;

                    p = effect.DrawLocation;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2), -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, effect.LightColour);
                    }

                }
                #endregion
            }
            #endregion

            #region Map Effect Lights
            if (Settings.Effect)
            {
                for (int e = 0; e < Effects.Count; e++)
                {
                    Effect effect = Effects[e];
                    if (!effect.Blend || CMain.Time < effect.Start) continue;

                    light = effect.Light;
                    if (light == 0) continue;

                    p = effect.DrawLocation;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2), -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, Color.White);
                    }
                }
            }
            #endregion

            #region Map Lights
            for (int y = MapObject.User.Movement.Y - ViewRangeY - 24; y <= MapObject.User.Movement.Y + ViewRangeY + 24; y++)
            {
                if (y < 0) continue;
                if (y >= Height) break;
                for (int x = MapObject.User.Movement.X - ViewRangeX - 24; x < MapObject.User.Movement.X + ViewRangeX + 24; x++)
                {
                    if (x < 0) continue;
                    if (x >= Width) break;
                    int imageIndex = (M2CellInfo[x, y].FrontImage & 0x7FFF) - 1;
                    //if (M2CellInfo[x, y].Light <= 0 || M2CellInfo[x, y].Light >= 10) continue;
                    if (M2CellInfo[x, y].Light == 0) continue;

                    Color lightIntensity;

                    light = (M2CellInfo[x, y].Light % 10) * 3;

                    switch (M2CellInfo[x, y].Light / 10)
                    {
                        case 1:
                            lightIntensity = Color.FromArgb(255, 255, 255, 255);
                            break;
                        case 2:
                            lightIntensity = Color.FromArgb(255, 120, 180, 255);
                            break;
                        case 3:
                            lightIntensity = Color.FromArgb(255, 255, 180, 120);
                            break;
                        case 4:
                            lightIntensity = Color.FromArgb(255, 22, 160, 5);
                            break;
                        default:
                            lightIntensity = Color.FromArgb(255, 255, 255, 255);
                            break;
                    }

                    int fileIndex = M2CellInfo[x, y].FrontIndex;

                    p = new Point(
                        (x + OffSetX - MapObject.User.Movement.X) * CellWidth + MapObject.User.OffSetMove.X,
                        (y + OffSetY - MapObject.User.Movement.Y) * CellHeight + MapObject.User.OffSetMove.Y + 32);


                    if (M2CellInfo[x, y].FrontAnimationFrame > 0)
                        p.Offset(Libraries.MapLibs[fileIndex].GetOffSet(imageIndex));

                    if (light >= DXManager.Lights.Count)
                        light = DXManager.Lights.Count - 1;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                    {
                        p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2) + 10, -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5);
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, lightIntensity);
                    }
                }
            }
            #endregion

            DXManager.SetBlend(false);
            DXManager.SetSurface(oldSurface);

            DXManager.Device.RenderState.SourceBlend = Blend.DestinationColor;
            DXManager.Device.RenderState.DestinationBlend = Blend.BothInvSourceAlpha;

            DXManager.Sprite.Draw2D(_lightTexture, PointF.Empty, 0, PointF.Empty, Color.White);
            DXManager.Sprite.End();
            DXManager.Sprite.Begin(SpriteFlags.AlphaBlend);
        }
Пример #33
0
        private void DrawLights(LightSetting setting)
        {
            if (DXManager.Lights == null || DXManager.Lights.Count == 0) return;

            if (_lightTexture == null || _lightTexture.Disposed)
            {
                _lightTexture = new Texture(DXManager.Device, Settings.ScreenWidth, Settings.ScreenHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
                _lightTexture.Disposing += FloorTexture_Disposing;
                _lightSurface = _lightTexture.GetSurfaceLevel(0);
            }

            Surface oldSurface = DXManager.CurrentSurface;
            DXManager.SetSurface(_lightSurface);

            DXManager.Device.Clear(ClearFlags.Target, setting == LightSetting.Night ? Color.Black : Color.FromArgb(255, 50, 50, 50), 0, 0);

            int light;
            Point p;
            DXManager.SetBlend(true);
            DXManager.Device.RenderState.SourceBlend = Blend.SourceAlpha;

            for (int i = 0; i < Objects.Count; i++)
            {
                MapObject ob = Objects[i];
                if (ob.Light > 0 && (!ob.Dead || ob == MapObject.User || ob.Race == ObjectType.Spell))
                {

                    light = ob.Light;

                    if (light >= DXManager.Lights.Count)
                        light = DXManager.Lights.Count - 1;

                    p = ob.DrawLocation;
                    p.Offset(((light + 1)*-65 + CellWidth)/2, ((light + 1)*-50 + CellHeight)/2);

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, ob is MonsterObject && ob.AI != 6 ? Color.PaleVioletRed : Color.White);
                }

                if (!Settings.Effect) continue;
                for (int e = 0; e < ob.Effects.Count; e++)
                {
                    Effect effect = ob.Effects[e];
                    if (!effect.Blend || CMain.Time < effect.Start || (!(effect is Missile) && effect.Light < ob.Light)) continue;

                    light = effect.Light;

                    p = effect.DrawLocation;
                    p.Offset(((light + 1)*-65 + CellWidth)/2, ((light + 1)*-50 + CellHeight)/2);

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, Color.White);

                }
            }

            if (Settings.Effect)
                for (int e = 0; e < Effects.Count; e++)
                {
                    Effect effect = Effects[e];
                    if (!effect.Blend || CMain.Time < effect.Start) continue;

                    light = effect.Light;

                    p = effect.DrawLocation;
                    p.Offset(((light + 1)*-65 + CellWidth)/2, ((light + 1)*-50 + CellHeight)/2);

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, Color.White);
                }

            for (int y = MapObject.User.Movement.Y - ViewRangeY - 10; y <= MapObject.User.Movement.Y + ViewRangeY + 10; y++)
            {
                if (y < 0) continue;
                if (y >= Height) break;
                for (int x = MapObject.User.Movement.X - ViewRangeX - 10; x < MapObject.User.Movement.X + ViewRangeX + 10; x++)
                {
                    if (x < 0) continue;
                    if (x >= Width) break;
                    int imageIndex = (M2CellInfo[x, y].FrontImage & 0x7FFF) - 1;
                    if (M2CellInfo[x, y].Light <= 0 || M2CellInfo[x, y].Light >= 10) continue;
                    light = M2CellInfo[x, y].Light*3;
                    int fileIndex = M2CellInfo[x, y].FileIndex;

                    p = new Point(
                        (x + OffSetX - MapObject.User.Movement.X) * CellWidth + MapObject.User.OffSetMove.X,
                        (y + OffSetY - MapObject.User.Movement.Y) * CellHeight + MapObject.User.OffSetMove.Y + 32);
                    p.Offset(((light + 1)*-65 + CellWidth)/2, ((light + 1)*-50 + CellHeight)/2);

                    if (M2CellInfo[x, y].AnimationFrame > 0)
                        p.Offset(Libraries.Objects[fileIndex].GetOffSet(imageIndex));

                    if (light > DXManager.Lights.Count)
                        light = DXManager.Lights.Count - 1;

                    if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed)
                        DXManager.Sprite.Draw2D(DXManager.Lights[light], PointF.Empty, 0, p, Color.White);
                }
            }
            DXManager.SetBlend(false);
            DXManager.SetSurface(oldSurface);

            DXManager.Device.RenderState.SourceBlend = Blend.DestinationColor;
            DXManager.Device.RenderState.DestinationBlend = Blend.BothInvSourceAlpha;

            DXManager.Sprite.Draw2D(_lightTexture, PointF.Empty, 0, PointF.Empty, Color.White);
            DXManager.Sprite.End();
            DXManager.Sprite.Begin(SpriteFlags.AlphaBlend);
        }
Пример #34
0
 protected override void ReadPacket(BinaryReader reader)
 {
     Lights = (LightSetting)reader.ReadByte();
 }
Пример #35
0
 protected override void ReadPacket(BinaryReader reader)
 {
     FileName = reader.ReadString();
     Title = reader.ReadString();
     MiniMap = reader.ReadUInt16();
     BigMap = reader.ReadUInt16();
     Lights = (LightSetting) reader.ReadByte();
 }
Пример #36
0
 public void SwitchAllLights(LightSetting setting)
 {
     Light[] allLights = (Light[])Enum.GetValues(typeof(Light));
     SwitchLights(setting, allLights);
 }
Пример #37
0
        public MapInfo(BinaryReader reader)
        {
            Index    = reader.ReadInt32();
            FileName = reader.ReadString();
            Title    = reader.ReadString();
            MiniMap  = reader.ReadUInt16();
            Light    = (LightSetting)reader.ReadByte();

            if (Settings.DatabaseVersion >= 3)
            {
                BigMap = reader.ReadUInt16();
            }

            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                SafeZones.Add(new SafeZoneInfo(reader)
                {
                    Info = this
                });
            }

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                Respawns.Add(new RespawnInfo(reader, Settings.DatabaseVersion, Settings.CustomDatabaseVersion));
            }

            if (Settings.DatabaseVersion <= 33)
            {
                count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    NPCs.Add(new NPCInfo(reader));
                }
            }

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                Movements.Add(new MovementInfo(reader));
            }

            if (Settings.DatabaseVersion < 14)
            {
                return;
            }

            NoTeleport     = reader.ReadBoolean();
            NoReconnect    = reader.ReadBoolean();
            NoReconnectMap = reader.ReadString();
            NoRandom       = reader.ReadBoolean();
            NoEscape       = reader.ReadBoolean();
            NoRecall       = reader.ReadBoolean();
            NoDrug         = reader.ReadBoolean();
            NoPosition     = reader.ReadBoolean();
            NoThrowItem    = reader.ReadBoolean();
            NoDropPlayer   = reader.ReadBoolean();
            NoDropMonster  = reader.ReadBoolean();
            NoNames        = reader.ReadBoolean();
            Fight          = reader.ReadBoolean();
            if (Settings.DatabaseVersion == 14)
            {
                NeedHole = reader.ReadBoolean();
            }
            Fire            = reader.ReadBoolean();
            FireDamage      = reader.ReadInt32();
            Lightning       = reader.ReadBoolean();
            LightningDamage = reader.ReadInt32();
            if (Settings.DatabaseVersion < 23)
            {
                return;
            }
            MapDarkLight = reader.ReadByte();
            if (Settings.DatabaseVersion < 26)
            {
                return;
            }
            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                MineZones.Add(new MineZone(reader));
            }
            if (Settings.DatabaseVersion < 27)
            {
                return;
            }
            MineIndex = reader.ReadByte();

            if (Settings.DatabaseVersion < 33)
            {
                return;
            }
            NoMount    = reader.ReadBoolean();
            NeedBridle = reader.ReadBoolean();

            if (Settings.DatabaseVersion < 42)
            {
                return;
            }
            NoFight = reader.ReadBoolean();

            if (Settings.DatabaseVersion < 53)
            {
                return;
            }
            Music = reader.ReadUInt16();

            if (Settings.DatabaseVersion < 103)
            {
                return;
            }
            NoHero = reader.ReadBoolean();

            if (Settings.DatabaseVersion < 110)
            {
                return;
            }
            GT = reader.ReadBoolean();

            if (Settings.DatabaseVersion < 117)
            {
                return;
            }
            SafeZone = reader.ReadBoolean();
            if (Settings.DatabaseVersion > 135)
            {
                count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    PublicEvents.Add(new PublicEventInfo(reader));
                }
            }
        }
Пример #38
0
        /// <summary>
        /// Find the light transforms and lights to dim with the animation
        /// </summary>
        /// <param name="state">The startstate of the partmodule</param>
        public override void OnStart(StartState state)
        {
            base.OnStart(state);

            modelBaseField         = Fields["numModel"];
            modelBaseField.guiName = Localizer.GetStringByTag("#LOC_KERBETROTTER.light.type");
            modelUIChooser         = (UI_ChooseOption)modelBaseField.uiControlEditor;

            //find all the lights
            lightSettings = new List <LightSetting>();

            //Search in the named transforms for the lights
            if (transforms != string.Empty)
            {
                string[] transformNames = transforms.Split(',');

                //find all the transforms
                List <Transform> transformsList = new List <Transform>();

                for (int i = 0; i < transformNames.Length; i++)
                {
                    LightSetting lightSetting = new LightSetting();
                    //get all the transforms
                    lightSetting.transforms.AddRange(part.FindModelTransforms(transformNames[i].Trim()));

                    //get all the lights in the transforms
                    for (int j = 0; j < lightSetting.transforms.Count; j++)
                    {
                        lightSetting.lights.AddRange(lightSetting.transforms[j].gameObject.GetComponentsInChildren <Light>());
                    }

                    //get all the intensities of the lights
                    for (int j = 0; j < lightSetting.lights.Count; j++)
                    {
                        lightSetting.intensities.Add(lightSetting.lights[j].intensity);
                    }

                    lightSettings.Add(lightSetting);
                }

                string[] visible = visibleNames.Split(',');
                for (int i = 0; i < visible.Length; i++)
                {
                    visible[i] = visible[i].Trim();
                }

                if (visible.Length == transformNames.Length)
                {
                    modelUIChooser.options = visible;
                }
                else
                {
                    //set the changes for the modelchooser
                    modelUIChooser.options = transformNames;
                }

                //when there is only one model, we do not need to show the controls
                if (transformNames.Length < 2)
                {
                    modelBaseField.guiActive       = false;
                    modelBaseField.guiActiveEditor = false;
                }
            }
            else
            {
                Debug.LogError("ModuleKerbetrotterMultiLight: No light transform defined!)");
            }
            //update the initial state of the lights
            updateLights(currentRateState);
        }
Пример #39
0
 protected override void ReadPacket(BinaryReader reader)
 {
     FileName = reader.ReadString();
     Title = reader.ReadString();
     MiniMap = reader.ReadUInt16();
     BigMap = reader.ReadUInt16();
     Lights = (LightSetting)reader.ReadByte();
     byte bools = reader.ReadByte();
     if ((bools & 0x01) == 0x01) Lightning = true;
     if ((bools & 0x02) == 0x02) Fire = true;
     MapDarkLight = reader.ReadByte();
     Music = reader.ReadUInt16();
 }
Пример #40
0
        public MapInfo(BinaryReader reader, Manager manager)
        {
            Manager Envir = manager;

            this.manager = manager;
            MapIndex     = reader.ReadInt32();
            FileName     = reader.ReadString();
            Title        = reader.ReadString();
            MiniMap      = reader.ReadUInt16();
            Light        = (LightSetting)reader.ReadByte();

            if (Envir.LoadVersion >= 3)
            {
                BigMap = reader.ReadUInt16();
            }

            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                SafeZones.Add(new SafeZoneInfo(reader)
                {
                    Info = this
                });
            }

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                Respawns.Add(new RespawnInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion, Envir));
            }

            if (Envir.LoadVersion <= 33)
            {
                count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    NPCs.Add(new NPCInfo(reader, Envir));
                }
            }

            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                Movements.Add(new MovementInfo(reader, Envir));
            }

            if (Envir.LoadVersion < 14)
            {
                return;
            }

            NoTeleport     = reader.ReadBoolean();
            NoReconnect    = reader.ReadBoolean();
            NoReconnectMap = reader.ReadString();

            NoRandom      = reader.ReadBoolean();
            NoEscape      = reader.ReadBoolean();
            NoRecall      = reader.ReadBoolean();
            NoDrug        = reader.ReadBoolean();
            NoPosition    = reader.ReadBoolean();
            NoThrowItem   = reader.ReadBoolean();
            NoDropPlayer  = reader.ReadBoolean();
            NoDropMonster = reader.ReadBoolean();
            NoNames       = reader.ReadBoolean();
            Fight         = reader.ReadBoolean();
            if (Envir.LoadVersion == 14)
            {
                NeedHole = reader.ReadBoolean();
            }
            Fire            = reader.ReadBoolean();
            FireDamage      = reader.ReadInt32();
            Lightning       = reader.ReadBoolean();
            LightningDamage = reader.ReadInt32();
            if (Envir.LoadVersion < 23)
            {
                return;
            }
            MapDarkLight = reader.ReadByte();
            if (Envir.LoadVersion < 26)
            {
                return;
            }
            count = reader.ReadInt32();
            for (int i = 0; i < count; i++)
            {
                MineZones.Add(new MineZone(reader));
            }
            if (Envir.LoadVersion < 27)
            {
                return;
            }
            MineIndex = reader.ReadByte();

            if (Envir.LoadVersion < 33)
            {
                return;
            }
            NoMount    = reader.ReadBoolean();
            NeedBridle = reader.ReadBoolean();

            if (Envir.LoadVersion < 42)
            {
                return;
            }
            NoFight = reader.ReadBoolean();

            if (Envir.LoadVersion < 53)
            {
                return;
            }
            Music = reader.ReadUInt16();
            if (Envir.LoadVersion < 78)
            {
                return;
            }
            NoTownTeleport = reader.ReadBoolean();
            if (Envir.LoadVersion < 79)
            {
                return;
            }
            NoReincarnation = reader.ReadBoolean();
        }
        public IHttpActionResult SwitchStatus(string light)
        {
            LightSetting lightSetting = null;
            var          settings     = GetSettings();

            foreach (var setting in settings)
            {
                if (setting.AlexaName.Equals(light, StringComparison.InvariantCultureIgnoreCase))
                {
                    lightSetting = setting;
                    break;
                }
            }

            if (lightSetting == null)
            {
                return(NotFound());
            }

            foreach (var key in _lightStatusCache.Keys)
            {
                if (key.StartsWith("LightStatus_" + lightSetting.StatusAddress, StringComparison.InvariantCulture))
                {
                    string value;
                    _lightStatusCache.TryRemove(key, out value);
                }
            }

            lock (knxLock)
            {
                var localAddress  = ConfigurationManager.AppSettings["localAddress"];
                var localPort     = GetNextRandom();
                var remoteAddress = ConfigurationManager.AppSettings["remoteAddress"];
                var remotePort    = int.Parse(ConfigurationManager.AppSettings["remotePort"]);

                var connection = new KnxConnectionTunneling(remoteAddress, remotePort, localAddress, localPort);
                try
                {
                    connection.KnxStatusDelegate = (string address, string state) =>
                    {
                        Debug.WriteLine("ReceiveKnxStatus: " + address);
                        if (state != null && (int)state[0] > 0)
                        {
                            _lightStatusCache["LightStatus_" + address] = "on";
                        }
                        else
                        {
                            _lightStatusCache["LightStatus_" + address] = "off";
                        }
                    };

                    connection.Connect();
                    Thread.Sleep(500);

                    connection.RequestStatus(lightSetting.StatusAddress);

                    //Wait so statuses can update
                    for (int i = 0; i < 100; i++)
                    {
                        var statusCache = _lightStatusCache.Keys.FirstOrDefault(item => item.StartsWith("LightStatus_" + lightSetting.StatusAddress, StringComparison.CurrentCulture));

                        if (statusCache != null)
                        {
                            break;
                        }
                        else
                        {
                            Thread.Sleep(100);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("ERROR: " + ex.ToString());
                }
                finally
                {
                    if (connection != null)
                    {
                        connection.Disconnect();
                    }
                }
            }

            string lightingStatus;

            _lightStatusCache.TryGetValue("LightStatus_" + lightSetting.StatusAddress, out lightingStatus);

            if (lightingStatus != null && lightingStatus.Equals("on", StringComparison.InvariantCultureIgnoreCase))
            {
                return(Ok(1));
            }
            else
            {
                return(Ok(0));
            }
        }