Exemple #1
0
            public Task <PPosition> PreparePositionsAsync(PScan scanns)
            {
                var result = new PPosition()
                {
                    Positions = new PreparedPosition[this.parent.MaxShips * scanns.Scanns.Length]
                };

                return(Task.Run(() =>
                {
                    Parallel.For(0, result.Positions.Length, index =>
                    {
                        var i = index / scanns.Scanns.Length;
                        var j = index % scanns.Scanns.Length;
                        BigInteger value;
                        if (i < this.position.Length)
                        {
                            var cryptoNode = this.parent.prototypeLookup[this.position[i]].TrueNode;
                            value = cryptoNode.Scan.Position(scanns.Scanns[j].Value);
                        }
                        else
                        {
                            value = Generate.Random(this.parent.Prime);
                        }

                        //for (int j = 0; j < scanns.Scanns.Length; j++)
                        result.Positions[i * scanns.Scanns.Length + j] = new PreparedPosition()
                        {
                            Value = value, Index = j
                        };
                    });
                    return result;
                }));
            }
Exemple #2
0
            /// <summary>
            /// Returns the nodes where your openent needs to tell you his units.
            /// </summary>
            /// <param name="positions"></param>
            /// <returns></returns>
            public async Task <ICollection <Mapping.Node <TNode, TEdged> > > ExecuteProbeAsync(PPosition positions)
            {
                var searching = await Task.WhenAll(positions.Positions.GroupBy(x => x.Index, x => x.Value).Select(async p =>
                {
                    if (p.Key >= this.toProbe.Length)
                    {
                        return(null);
                    }
                    var node   = this.toProbe[p.Key];
                    var crypto = this.parent.prototypeLookup[node];
                    var found  = await crypto.TrueNode.Scan.ScanAsync(p);
                    if (found)
                    {
                        return(node);
                    }
                    return(null);
                }));

                return(searching.Where(x => x != null).ToArray());
            }
        /// <summary>
        /// Helper function for creating players
        /// </summary>
        private void CreateCharacters(IO.Models.GameState state)
        {
            foreach (var entry in state.PlayerNames)
            {
                PPlayer    pplayer   = entry.Value;
                PCharacter character = entry.Value.Character;
                PPosition  position  = character.Position;

                if (position.BoardId != _sceneConfiguration.BoardName)
                {
                    continue;
                }

                GameObject player = this._charactersManager.CreatePlayer(
                    new Vector3Int(position.X, position.Y, 0),
                    character.Name);

                var hub = player.GetComponent <Hub>();

                hub.Level      = character.Level;
                hub.Health     = character.CurrentHealth;
                hub.Experience = character.Experience;

                var inventory = player.GetComponent <Inventory>();

                if (inventory != null)
                {
                    Sprite head = _tileDatabase.GetWearable(pplayer.Hat?.Sprite);
                    if (head != null)
                    {
                        inventory.Head = head;
                    }

                    Sprite top = _tileDatabase.GetWearable(pplayer.Clothes?.Sprite);
                    if (top != null)
                    {
                        inventory.Top = top;
                    }

                    Sprite bottom = _tileDatabase.GetWearable(pplayer.Shoes?.Sprite);
                    if (bottom != null)
                    {
                        inventory.Bottom = bottom;
                    }

                    Sprite accessory = _tileDatabase.GetWearable(pplayer.Accessory?.Sprite);
                    if (accessory != null)
                    {
                        inventory.Accessory = accessory;
                    }

                    Sprite weapon = _tileDatabase.GetWearable(character.Weapon?.Sprite);
                    if (weapon != null)
                    {
                        inventory.Weapon = weapon;
                    }
                }
            }

            foreach (var entry in state.MonsterNames)
            {
                PCharacter character = entry.Value.Character;
                PPosition  position  = character.Position;

                if (position.BoardId != _sceneConfiguration.BoardName)
                {
                    continue;
                }

                Sprite monsterSprite = _tileDatabase.GetSprite(character.Sprite);

                GameObject monster = this._charactersManager.CreateMonster(
                    new Vector3Int(position.X, position.Y, 0),
                    character.Name,
                    monsterSprite);

                var hub = monster.GetComponent <Hub>();

                hub.Health     = character.CurrentHealth;
                hub.Experience = character.Experience;
                hub.Level      = character.Level;
            }
        }