private void Update() { if (enemyCount > 0 || playerCount > 0) { if (enemyCount > 0 && playerCount == 0 && _spotState != SpotState.Enemy) { _spotState = SpotState.Enemy; team = Team.Enemy; } else if (playerCount > 0 && enemyCount == 0 && _spotState != SpotState.Player) { _spotState = SpotState.Player; team = Team.Player; } else if (enemyCount > 0 && playerCount > 0 && _spotState != SpotState.Contested) { _spotState = SpotState.Contested; } } else { if (_spotState != SpotState.Neutral) { _spotState = SpotState.Neutral; } } if (_spotState != SpotState.Neutral && _spotState != SpotState.Contested) { GameEventManager.TriggerEvent(new Score_GameEvent(ScoreEventType.AddScore, team, 10 * playerCount * Time.deltaTime)); } }
// [EnableCors(origins: "*", headers: "*", methods: "*")] public async Task <IHttpActionResult> GetSpotState(string id)// { SpotState spotState = await db.SpotStates.Where(x => x.TS == db.SpotStates.Max(p => p.TS)).FirstAsync(); if (spotState == null) { return(NotFound()); } return(Ok(spotState)); //return CreatedAtRoute("DefaultApi", new { id = spotState }, spotState); }
/// <summary> /// Get winner of game /// </summary> /// <param name="tempstate"></param> public void GetWinner(SpotState spotstate) { if (GameState != false) { GetWin(spotstate); if (foundWinPattern) { if (spotstate == SpotState.X) { winner = IdentifyWinner.player; } else if (spotstate == SpotState.O) { winner = IdentifyWinner.computer; } } CheckGameState(); } }
protected override void OnDraw(Renderer spriterenderer, double elapsedGameTime, float opacity) { base.OnDraw(spriterenderer, elapsedGameTime, opacity); this.hitAreaCache.Clear(); var curMap = this.DataContext as WorldMapInfo; if (curMap == null) { return; } TextureItem baseImg = curMap.BaseImg; SpotState[] spotState = new SpotState[curMap.MapList.Count]; if (curMap.QuestLimit != null && this.SelectedQuestIndex > -1 && this.SelectedQuestIndex < curMap.QuestLimit.Count) { for (int i = 0; i <= this.SelectedQuestIndex; i++) { var quest = curMap.QuestLimit[i]; //重写底图 if (quest.BaseImg != null) { baseImg = quest.BaseImg; } else if (quest.IsDefault) { baseImg = curMap.BaseImg; } //重写spot属性 if (quest.IsDefault) { for (int j = 0; j < spotState.Length; j++) { spotState[j].IsOverride = true; spotState[j].IsVisible = false; } } foreach (var spotIndex in quest.CloseMaps) { spotState[spotIndex].IsOverride = true; spotState[spotIndex].IsVisible = true; spotState[spotIndex].IsOpen = false; spotState[spotIndex].ImgType = quest.CloseMapImageType ?? -1; } foreach (var spotIndex in quest.OpenMaps) { spotState[spotIndex].IsOverride = true; spotState[spotIndex].IsVisible = true; spotState[spotIndex].IsOpen = true; spotState[spotIndex].ImgType = -1; } } } var baseOrigin = new PointF((int)this.Width / 2, (int)this.Height / 2); var drawOrder = new List <DrawItem>(); var addItem = new Action <TextureItem, object>((texture, obj) => { drawOrder.Add(new DrawItem() { Target = obj, TextureItem = texture }); }); //获取鼠标位置 var mousePos = InputManager.Current.MouseDevice.GetPosition(this); MapSpot curSpot = null; //绘制底图 if (baseImg != null) { addItem(baseImg, null); } //绘制link foreach (var link in curMap.MapLinks) { if (link.LinkImg != null) { var pos = new PointF(mousePos.X - (baseOrigin.X - link.LinkImg.Origin.X), mousePos.Y - (baseOrigin.Y - link.LinkImg.Origin.Y)); if (link.LinkImg.HitMap?[(int)pos.X, (int)pos.Y] ?? false) { addItem(link.LinkImg, link); } } } //绘制地图点 for (int i = 0, i0 = curMap.MapList.Count; i < i0; i++) { var spot = curMap.MapList[i]; int spotType = spot.Type; if (spotState[i].IsOverride) //重写判定 { if (!spotState[i].IsVisible) { continue; } if (!spotState[i].IsOpen) //close { if (spotState[i].ImgType > -1) { spotType = spotState[i].ImgType; } } } var texture = this.FindResource("mapImage/" + spotType) as TextureItem; if (texture != null) { var item = new TextureItem() { Texture = texture.Texture, Origin = new PointF(-spot.Spot.X + texture.Origin.X, -spot.Spot.Y + texture.Origin.Y), Z = 128 + texture.Z }; if (spot.IsPreBB && curMap.BaseImg != null) //pre-bb地图点调整 { item.Origin.X += curMap.BaseImg.Origin.X; item.Origin.Y += curMap.BaseImg.Origin.Y; } addItem(item, spot); //判断鼠标位置绘制path if (spot.Path != null) { var rect = new Rect(baseOrigin.X - item.Origin.X, baseOrigin.Y - item.Origin.Y, texture.Texture.Width, texture.Texture.Height); if (rect.Contains(mousePos)) { addItem(spot.Path, null); } } } if (this.CurrentMapID != null && spot.MapNo.Contains(this.CurrentMapID.Value)) { curSpot = spot; } } //绘制当前地图标记 if (curSpot != null) { var posTexture = this.FindResource("curPos") as TextureItem; if (posTexture != null) { var item = new TextureItem() { Texture = posTexture.Texture, Origin = new PointF(-curSpot.Spot.X + posTexture.Origin.X, -curSpot.Spot.Y + posTexture.Origin.Y), Z = 255, }; addItem(item, null); } } //开始绘制 foreach (var item in drawOrder.OrderBy(_item => _item.TextureItem.Z)) { var tex = item.TextureItem; if (tex != null) { var pos = new PointF(baseOrigin.X - tex.Origin.X, baseOrigin.Y - tex.Origin.Y); var size = new Size(tex.Texture.Width, tex.Texture.Height); spriterenderer.Draw(tex.Texture, new PointF(this.RenderPosition.X + pos.X, this.RenderPosition.Y + pos.Y), size, new ColorW(1f, 1f, 1f, opacity), false); item.Position = pos; this.hitAreaCache.Add(item); } } }
static SpotState ParseSpotState(JToken data, Currency currency) { // { // "averagePrice": "439.42", // "completedTradeAmount": "0.01", // "createdDate": 1456152164000, // "id": 199990737, // "orderId": 199990737, // "sigTradeAmount": "0.01", // May be missing. Means zero. // "sigTradePrice": "439.42", // May be missing. Means zero. // "status": 2, // "symbol": "btc_usd", // "tradeAmount": "0.01", // "tradePrice": "4.39", // "tradeType": "buy", // "tradeUnitPrice": "439.51", // "unTrade": "0" // } var res = new SpotState() { Timestamp = Util.Time.FromUnixMillis((long)data["createdDate"]), OrderId = (long)data["orderId"], OrderStatus = Serialization.ParseOrderStatus((int)data["status"]), Product = new Spot() { Currency = currency }, Amount = new Amount() { Price = data["tradeUnitPrice"].AsDecimal(), Quantity = data["tradeAmount"].AsDecimal(), }, CumFillQuantity = data["completedTradeAmount"].AsDecimal(), AvgFillPrice = data["averagePrice"].AsDecimal(), }; // Infer CoinType from "symbol". E.g., "btc_usd" => CoinType.Btc. string symbol = (string)data["symbol"]; Condition.Requires(symbol, "symbol").IsNotNullOrEmpty(); if (symbol.StartsWith("btc")) { res.Product.CoinType = CoinType.Btc; } else if (symbol.StartsWith("ltc")) { res.Product.CoinType = CoinType.Ltc; } else { throw new ArgumentException("Unknown value of `symbol`: " + symbol); } string type = (string)data["tradeType"]; Condition.Requires(type, "type").IsNotNullOrEmpty(); if (type == "buy" || type == "market_buy") { res.Amount.Side = Side.Buy; } else if (type == "sell" || type == "market_sell") { res.Amount.Side = Side.Sell; } else { throw new ArgumentException("Unknown value of `type`: " + type); } // sigTradeAmount and sigTradePrice are optional fields. JToken fillQuantity = data["sigTradeAmount"]; if (fillQuantity != null) { res.FillQuantity = fillQuantity.AsDecimal(); } JToken fillPrice = data["sigTradePrice"]; if (fillPrice != null) { res.FillPrice = fillPrice.AsDecimal(); } return(res); }
/// <summary> /// chechs if someone win /// </summary> /// <param name="boxState"></param> private void GetWin(SpotState boxState) { #region Horizontalcheck short segindex = 0; short temp = maxRowSize; short temp2 = 0; for (short j = 0; j < maxRowSize; ++j) { for (short i = temp2; i < temp; ++i) { if (spotValues[i] != boxState) { GameState = true; foundWinPattern = false; break; } else if (spotValues[i] == boxState) { winSegments[segindex++] = i; GameState = false; foundWinPattern = true; } } if (foundWinPattern) { break; } segindex = 0; temp += maxRowSize; temp2 += 2 + 1; } #endregion if (foundWinPattern) { return; } #region VerticalCheck segindex = 0; temp = 6; temp2 = 0; short temp3 = temp2; for (short j = 0; j < maxcolSize; ++j) { for (short i = temp2; i <= temp; i += 3) { if (spotValues[i] != boxState) { GameState = true; foundWinPattern = false; break; } else if (spotValues[i] == boxState) { winSegments[segindex++] = i; GameState = false; foundWinPattern = true; } } if (foundWinPattern) { break; } segindex = 0; temp += 1; temp3 += 1; temp2 = temp3; } #endregion //if winner pattern for horizontal and vertical patterns is found return if (foundWinPattern) { return; } //chech diagonals #region diagonalCheck segindex = 0; temp = 8; temp2 = 0; short incr = 4; for (short j = 0; j < maxcolSize - 1; ++j) { for (short i = temp2; i <= temp; i += incr) { if (spotValues[i] != boxState) { GameState = true; foundWinPattern = false; break; } else if (spotValues[i] == boxState) { winSegments[segindex++] = i; GameState = false; foundWinPattern = true; } } //if pattern is found if (foundWinPattern) { break; } segindex = 0; temp -= 2; temp2 += 2; incr -= 2; } #endregion }
private Material GetGraphic(SpotState spotIndex) => subGraphics[(int)spotIndex]?.MatSingle;