Exemplo n.º 1
0
        /// <summary>
        /// Gets item a random frame id if item is a multiframe item
        /// Registers an animation runnter for the item, if it is animated
        /// </summary>
        /// <param name="variantBase">The base item of the specific item</param>
        /// <param name="tileX">X Position of the item</param>
        /// <param name="tileY">Y Position of the item</param>
        /// <param name="unitySprite">Sprite which is animated or multiframed</param>
        /// <returns>Current frame id to be used by the sprite</returns>
        private int SetupMultiFrameItem(VariantObjectBase variantBase, int tileX, int tileY, SpriteRenderer unitySprite)
        {
            if (!variantBase.IsAnimated)
            {
                return(variantBase.GetFrameId(MapVariance.GetItemFrameVariance(tileX, tileY, variantBase.FrameCount)));
            }

            if (!animationRunners.TryGetValue(variantBase, out var animationRunner))
            {
                animationRunner = new AnimationRunner(variantBase, variantBase.InitialId);
                animationRunners.Add(variantBase, animationRunner);
            }

            animationRunner.RegisterAnimatedSprite(unitySprite);

            return(variantBase.InitialId);
        }
Exemplo n.º 2
0
 public AnimationRunner(VariantObjectBase animationBase, int animationId)
 {
     registeredSprites = new List <SpriteRenderer>();
     currentId         = animationId;
     animationInfo     = animationBase;
 }
Exemplo n.º 3
0
        /// <summary>
        /// Extracts item game data from the item server data file and transforms them into map objects.
        /// Saves the mapobjects together with their corresponding server id as a file.
        /// </summary>
        /// <param name="itemNameToLocalIds">Dictionary matching item names to local object ids</param>
        /// <param name="localIdToCorrectionOffsets">Dictionary containing local offsets for local object ids</param>
        public void CreateItemBaseFile(Dictionary <string, int> itemNameToLocalIds, Dictionary <int, int[]> localIdToCorrectionOffsets)
        {
            var tableFile = Resources.Load <TextAsset>(Constants.Update.ItemTablePath);

            if (tableFile == null)
            {
                throw new FileNotFoundException($"Failed opening intern tile table at {Constants.Update.ItemTablePath}!");
            }

            Dictionary <int, MapObjectBase> serverIdToItemBase = new Dictionary <int, MapObjectBase>();

            using (var lineReader = new StringReader(tableFile.text))
            {
                string line;
                while ((line = lineReader.ReadLine()) != null)
                {
                    if (line.Equals(""))
                    {
                        break;
                    }
                    if (line.StartsWith("#") || line.StartsWith("/"))
                    {
                        continue;
                    }

                    string[] rowValues = line.Split(new char[] { ',' }, StringSplitOptions.None);

                    int    serverId = int.Parse(rowValues[Constants.Update.ItemIdColumn]);
                    string itemName = FormatName(rowValues[Constants.Update.ItemNameColumn]);

                    int itemMode       = int.Parse(rowValues[Constants.Update.ItemModeColumn]);
                    int itemFrameCount = int.Parse(rowValues[Constants.Update.ItemFrameCountColumn]);

                    float baseOffsetX = int.Parse(rowValues[Constants.Update.ItemOffsetXColumn]);
                    float baseOffsetY = int.Parse(rowValues[Constants.Update.ItemOffsetYColumn]);

                    float scaleVariance = int.Parse(rowValues[Constants.Update.ItemScalingColumn]) / 100f;

                    int emittedLight = int.Parse(rowValues[Constants.Update.ItemLightEmitColumn]);

                    float colorModRed   = int.Parse(rowValues[Constants.Update.ItemColorModRedColumn]) / 255f;
                    float colorModGreen = int.Parse(rowValues[Constants.Update.ItemColorModGreenColumn]) / 255f;
                    float colorModBlue  = int.Parse(rowValues[Constants.Update.ItemColorModBlueColumn]) / 255f;
                    float colorModAlpha = int.Parse(rowValues[Constants.Update.ItemColorModAlphaColumn]) / 255f;

                    float height = int.Parse(rowValues[Constants.Update.ItemSurfaceLevelColumn]) / (float)Constants.Tile.SizeX;

                    int[] localIds = LocalIdsFromName(itemName, itemNameToLocalIds);

                    MapObjectBase mapObject;
                    if (itemMode == (int)Constants.ItemMode.Simple)
                    {
                        mapObject = new SimpleObjectBase(
                            localIds[0], CorrectBaseOffset(baseOffsetX, baseOffsetY, localIdToCorrectionOffsets, localIds[0]),
                            colorModRed, colorModGreen, colorModBlue, colorModAlpha,
                            scaleVariance, emittedLight, height);
                    }
                    else
                    {
                        float[] offsetX = new float[itemFrameCount];
                        float[] offsetY = new float[itemFrameCount];

                        for (int i = 0; i < itemFrameCount; i++)
                        {
                            var itemVarianceName = itemName + "-" + i;
                            var correctedOffsets = CorrectBaseOffset(baseOffsetX, baseOffsetY, localIdToCorrectionOffsets, localIds[0]);
                            offsetX[i] = correctedOffsets[0];
                            offsetY[i] = correctedOffsets[1];
                        }

                        float animationSpeed = int.Parse(rowValues[Constants.Update.ItemAnimationSpeedColumn]) / 100f;

                        mapObject = new VariantObjectBase(
                            localIds, offsetX, offsetY, animationSpeed,
                            colorModRed, colorModGreen, colorModBlue, colorModAlpha,
                            scaleVariance, emittedLight, height);
                    }

                    if (serverIdToItemBase.ContainsKey(serverId))
                    {
                        Debug.Log("Tried to save a single item serverId twice in the mapping file!");
                        continue;
                    }

                    serverIdToItemBase.Add(serverId, mapObject);
                }
            }

            BinaryFormatter binaryFormatter = new BinaryFormatter();
            FileInfo        fileInfo        = new FileInfo(String.Concat(Game.FileSystem.UserDirectory, Constants.Update.ItemBaseFileName));

            using (var file = fileInfo.Create())
            {
                binaryFormatter.Serialize(file, serverIdToItemBase);
                file.Flush();
            }
        }