示例#1
0
        public void MakestartingPositions()
        {
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    var key = map[y][x];
                    if (locations.Contains(key.ToString()))
                    {
                        float x1 = x / ((float)width),
                              y1 = 1.0f - y / (float)height;
                        var acc  = 1;
                        while (map[y][x + acc] == key)
                        {
                            acc++;
                        }

                        StartingPositions.Add(
                            new Vec2F((2 * x + acc) / (float)width / 2.0f, y1));

                        // jump to the index after the platform.
                        x += acc + 1;
                    }
                }
            }
        }
示例#2
0
        public void Reset(int width, int height)
        {
            if (width > 0 && height > 0)
            {
                Image = new WriteableBitmap(width, height, 96, 96, PixelFormats.Gray8, BitmapPalettes.Gray256);
            }

            StartingPositions.Clear();
            Resources.Clear();
        }
示例#3
0
 private void MakeQuadStartingPositions()
 {
     // Go from this:
     // ...
     // .@.
     // ...
     // to this:
     // @#@
     // ###
     // @#@
     for (int i = StartingPositions.Count - 1; i >= 0; i--)
     {
         var startingPosition = StartingPositions[i];
         // Check if this starting position's surroundings look like the above
         var topLeft      = startingPosition.MoveLeft(1).MoveUp(1);
         var topCenter    = startingPosition.MoveUp(1);
         var topRight     = startingPosition.MoveRight(1).MoveUp(1);
         var left         = startingPosition.MoveLeft(1);
         var right        = startingPosition.MoveRight(1);
         var bottomLeft   = startingPosition.MoveLeft(1).MoveDown(1);
         var bottomCenter = startingPosition.MoveDown(1);
         var bottomRight  = startingPosition.MoveRight(1).MoveDown(1);
         var candidates   = new List <GridPoint>()
         {
             topLeft, topCenter, topRight,
             left, right,
             bottomLeft, bottomCenter, bottomRight
         };
         bool startingPositionMeetsCriteria = candidates.All(c =>
                                                             MazeCellType.Empty.Equals(MazeCells[c].Type) &&
                                                             !StartingPositions.Contains(c));
         if (startingPositionMeetsCriteria)
         {
             MazeCells[topCenter].SetType(MazeCellType.Wall);
             MazeCells[left].SetType(MazeCellType.Wall);
             MazeCells[startingPosition].SetType(MazeCellType.Wall);
             MazeCells[right].SetType(MazeCellType.Wall);
             MazeCells[bottomCenter].SetType(MazeCellType.Wall);
             StartingPositions.RemoveAt(i);
             StartingPositions.Add(topLeft);
             StartingPositions.Add(topRight);
             StartingPositions.Add(bottomLeft);
             StartingPositions.Add(bottomRight);
         }
     }
 }
示例#4
0
 /// <summary>
 ///     Parses out both starting positions and movement instructions.
 ///     Items must be weaved so that each starting position is followed by movement instructions.
 ///     For example: 1 2 1 2 1 2 1 2, with 1 being starting position and 2 being movement instruction.
 /// </summary>
 /// <param name="args">Ordered sets of positions and movement instructions.</param>
 public void ParseInstructions(string pathToFile)
 {
     try
     {
         using (StreamReader sReader = new StreamReader(pathToFile))
         {
             string gridSize = sReader.ReadLine(); // Unused currently.
             while (sReader.Peek() >= 0)
             {
                 StartingPositions.Add(sReader.ReadLine());
                 MovementInstructions.Add(sReader.ReadLine());
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Could not read the input file {pathToFile}.");
         Console.WriteLine(ex.Message);
     }
 }
示例#5
0
        private void ReadStartPositions(EndianReader reader)
        {
            var section     = Sections[Section.StartPositions];
            var position    = OffsetById(section.Node, FieldId.Position);
            var orientation = OffsetById(section.Node, FieldId.Orientation);

            for (int i = 0; i < section.TagBlock.Count; i++)
            {
                var startPos    = new StartPosition(this);
                var baseAddress = section.TagBlock.Pointer.Address + section.BlockSize * i;

                reader.Seek(baseAddress + position, SeekOrigin.Begin);
                startPos.Position = reader.ReadObject <RealVector3D>();

                reader.Seek(baseAddress + orientation, SeekOrigin.Begin);
                startPos.Orientation = reader.ReadObject <RealVector2D>();

                StartingPositions.Add(startPos);
            }
        }
示例#6
0
    public void FindAndUpdateWithDatabase()
    {
        GameObject        database          = GameObject.Find(itemDatabaseName);
        StartingPositions startingPositions = GameObject.Find("StartingPositions").GetComponent <StartingPositions>();
        int i = 0;

        foreach (CharacterStats stats in characterStats)
        {
            stats.Database = database.GetComponent <InventoryDatabase>();
            stats.gameObject.transform.position = startingPositions.startingPositions[i];
            i += 1;

            stats.gameObject.GetComponent <PlayerMove>().enabled = false;
            stats.gameObject.GetComponent <Idle>().enabled       = false;
            stats.gameObject.GetComponent <Attacking>().enabled  = false;
            stats.gameObject.GetComponent <Attack>().enabled     = false;
            stats.gameObject.GetComponent <Defend>().enabled     = false;
            stats.gameObject.GetComponent <Standby>().enabled    = true;
        }
        gameObject.transform.position = startingPositions.startingPositions[i];
        GameObject.Find("Map").GetComponent <Turns>().NewTurnOrder();
    }
示例#7
0
        public void UpdatePreview(Map map, byte[] imageData)
        {
            int    width  = map.HeightMap.MapWidth;
            int    height = map.HeightMap.MapHeight;
            double scale  = System.Math.Max(width, height) / 300.0;

            Reset(width, height);
            Image.WritePixels(new Int32Rect(0, 0, width, height), imageData, width, 0);

            // copy to array so that the generation can go on in the background
            var startingPositions = map.Objects.ToArray().Where(o => o.IsWaypoint && Regex.IsMatch(o.GetPropertyValue <string>("waypointName"), "Player_[1-8]_Start"));
            var resources         = map.Objects.ToArray().Where(o => o.IsResource());

            foreach (var startingPosition in startingPositions)
            {
                StartingPositions.Add(new OverlayViewModel(startingPosition.X / Map.TileWidth, height - startingPosition.Y / Map.TileWidth, scale));
            }

            foreach (var resource in resources)
            {
                Resources.Add(new OverlayViewModel(resource.X / Map.TileWidth, height - resource.Y / Map.TileWidth, scale));
            }
        }
示例#8
0
 public void Reset(Random random, Size boardSize)
 {
     // Generate random starting position
     var values = Enum.GetValues(typeof(StartingPositions));
     int positionIndex = random.Next(values.Length);
     int counter = 0;
     foreach (var value in values)
     {
         if (counter++ == positionIndex)
         {
             _startPosition = (StartingPositions)value;
             break;
         }
     }
     // Based on starting position, generate actual random x or y
     switch (_startPosition)
     {
         case StartingPositions.Top:
             _location = new Point(random.Next(boardSize.Width - _dimensions.Width), 0);
             break;
         case StartingPositions.Bottom:
             _location = new Point(random.Next(boardSize.Width - _dimensions.Width), boardSize.Height);
             break;
         case StartingPositions.Left:
             _location = new Point(0, random.Next(boardSize.Height - _dimensions.Height));
             break;
         case StartingPositions.Right:
             _location = new Point(boardSize.Width - _dimensions.Width, random.Next(boardSize.Height - _dimensions.Height));
             break;
     }
 }
示例#9
0
    void OnLevelWasLoaded(int level)
    {
        Scene          scene             = SceneManager.GetActiveScene();
        List <Vector2> selectedPositions = new List <Vector2>()
        {
            Vector2.zero, Vector2.zero, Vector2.zero, Vector2.zero
        };

        if (scene.name != "characterSelect" && scene.name != "title")
        {
            startingPositions = Object.FindObjectOfType <StartingPositions>();

            if (players == null)
            {
                int ninjaCount = 0;
                foreach (Color color in playerColors)
                {
                    if (color != Color.clear)
                    {
                        GameObject       newNinjaGO = Instantiate(ninjaPrefab);
                        PlayerController newNinja   = newNinjaGO.GetComponent <PlayerController>();
                        newNinja.playerId    = ninjaCount;
                        newNinja.playerColor = color;
                        newNinja.initialize();

                        Vector2 ninjaPosition = startingPositions.possibleNinjaPositions[Random.Range(0, startingPositions.possibleNinjaPositions.Length)];
                        while (selectedPositions.Contains(ninjaPosition))
                        {
                            ninjaPosition = startingPositions.possibleNinjaPositions[Random.Range(0, startingPositions.possibleNinjaPositions.Length)];
                        }
                        newNinja.transform.position = ninjaPosition;
                    }
                    ninjaCount++;
                }



                ////TEMP CODE FOR ADDING AN EXTRA NINJA
                //GameObject tempNinjaGO = Instantiate(ninjaPrefab);
                //PlayerController tempNewNinja = tempNinjaGO.GetComponent<PlayerController>();
                //tempNewNinja.playerId = 1;
                //tempNewNinja.playerColor = Color.yellow;
                //tempNewNinja.initialize();

                //Vector2 tempNninjaPosition = startingPositions.possibleNinjaPositions[Random.Range(0, startingPositions.possibleNinjaPositions.Length)];
                //while (selectedPositions.Contains(tempNninjaPosition))
                //{
                //    tempNninjaPosition = startingPositions.possibleNinjaPositions[Random.Range(0, startingPositions.possibleNinjaPositions.Length)];
                //}
                //tempNewNinja.transform.position = tempNninjaPosition;
                ////END TEMP CODE



                players = Object.FindObjectsOfType <PlayerController>();
            }
            else
            {
                int ninjaCount = 0;
                foreach (PlayerController player in players)
                {
                    Vector2 ninjaPosition = startingPositions.possibleNinjaPositions[Random.Range(0, startingPositions.possibleNinjaPositions.Length)];
                    while (selectedPositions.Contains(ninjaPosition))
                    {
                        ninjaPosition = startingPositions.possibleNinjaPositions[Random.Range(0, startingPositions.possibleNinjaPositions.Length)];
                    }
                    player.transform.position = ninjaPosition;

                    player.initialize();
                    ninjaCount++;
                }
            }

            warningLights = Object.FindObjectsOfType <WarningLight>();
            windows       = Object.FindObjectsOfType <Window>();
            chests        = Object.FindObjectsOfType <Chest>();
            foreach (Chest chest in chests)
            {
                chest.gameObject.SetActive(false);
            }
            chestTimer = Random.Range(chestTimerMin, chestTimerMax);
            inGame     = true;
        }
    }