Exemple #1
0
        public BaseVisionProvider(
            Color darkColour,
            Color lightColour,
            IFOVHandler algorithm,
            int minimumLightLevel   = 0,
            int minimumComfortLevel = 0,
            int maximumLightLevel   = GlobalConstants.MAX_LIGHT,
            int maximumComfortLevel = GlobalConstants.MAX_LIGHT,
            string name             = null)
        {
            if (name.IsNullOrEmpty() == false)
            {
                this.Name = name;
            }

            this.DarkColour          = darkColour;
            this.LightColour         = lightColour;
            this.Algorithm           = algorithm;
            this.m_Vision            = new HashSet <Vector2Int>();
            this.MinimumLightLevel   = minimumLightLevel;
            this.MaximumLightLevel   = maximumLightLevel;
            this.MinimumComfortLevel = minimumComfortLevel;
            this.MaximumComfortLevel = maximumComfortLevel;
            this.m_Vision            = new HashSet <Vector2Int>();
        }
Exemple #2
0
 private void SetFOVHandler()
 {
     m_FOVHandler = new FOVShadowCasting();
     //m_FOVHandler = new FOVPermissive();
     //m_FOVHandler = new FOVRecursiveShadowcasting();
     //m_FOVHandler = new FOVDirty();
 }
        public bool AddVision(
            string name,
            Color darkColour,
            Color lightColour,
            IFOVHandler algorithm,
            int minimumLightLevel   = 0,
            int minimumComfortLevel = 0,
            int maximumLightLevel   = GlobalConstants.MAX_LIGHT,
            int maximumComfortLevel = GlobalConstants.MAX_LIGHT)
        {
            if (this.VisionTypes.ContainsKey(name))
            {
                return(false);
            }

            this.VisionTypes.Add(
                name,
                new BaseVisionProvider(
                    darkColour,
                    lightColour,
                    algorithm,
                    minimumLightLevel,
                    minimumComfortLevel,
                    maximumLightLevel,
                    maximumComfortLevel,
                    name));

            return(true);
        }
        public IEnumerable <IVision> Load()
        {
            List <IVision> visionTypes = new List <IVision>();

            string[] files = Directory.GetFiles(
                Directory.GetCurrentDirectory() +
                GlobalConstants.ASSETS_FOLDER +
                GlobalConstants.DATA_FOLDER +
                "Vision Types",
                "*.json",
                SearchOption.AllDirectories);

            foreach (string file in files)
            {
                JSONParseResult result = JSON.Parse(File.ReadAllText(file));

                if (result.Error != Error.Ok)
                {
                    this.ValueExtractor.PrintFileParsingError(result, file);
                    continue;
                }

                if (!(result.Result is Dictionary visionDict))
                {
                    GlobalConstants.ActionLog.Log("Could not parse JSON to Dictionary from " + file, LogLevel.Warning);
                    continue;
                }

                ICollection <Dictionary> visions = this.ValueExtractor.GetCollectionFromArray <Dictionary>(
                    this.ValueExtractor.GetValueFromDictionary <Array>(
                        visionDict,
                        "VisionTypes"));

                foreach (Dictionary innerDict in visions)
                {
                    string name        = this.ValueExtractor.GetValueFromDictionary <string>(innerDict, "Name");
                    Color  lightColour =
                        new Color(this.ValueExtractor.GetValueFromDictionary <string>(innerDict, "LightColour"));
                    Color darkColour =
                        new Color(this.ValueExtractor.GetValueFromDictionary <string>(innerDict, "DarkColour"));
                    int minimumLight = innerDict.Contains("MinimumLight")
                    ? this.ValueExtractor.GetValueFromDictionary <int>(innerDict, "MinimumLight")
                    : 0;
                    int minimumComfort = innerDict.Contains("MinimumComfort")
                    ? this.ValueExtractor.GetValueFromDictionary <int>(innerDict, "MinimumComfort")
                    : minimumLight;
                    int maximumLight = innerDict.Contains("MaximumLight")
                    ? this.ValueExtractor.GetValueFromDictionary <int>(innerDict, "MaximumLight")
                    : GlobalConstants.MAX_LIGHT;
                    int maximumComfort = innerDict.Contains("MaximumComfort")
                    ? this.ValueExtractor.GetValueFromDictionary <int>(innerDict, "MaximumComfort")
                    : maximumLight;

                    string visionProvider = innerDict.Contains("Algorithm")
                        ? this.ValueExtractor.GetValueFromDictionary <string>(innerDict, "Algorithm")
                        : nameof(FOVShadowCasting);

                    IFOVHandler handler = (IFOVHandler)GlobalConstants.ScriptingEngine.FetchAndInitialise(visionProvider);

                    visionTypes.Add(
                        new BaseVisionProvider(
                            darkColour,
                            lightColour,
                            handler,
                            minimumLight,
                            minimumComfort,
                            maximumLight,
                            maximumComfort,
                            name));
                }
            }

            return(visionTypes);
        }