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; })); }
/// <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; } }