public int AddElement(ElementInstance element) { element.Id = Elements.Count > 0 ? Elements.Max(e => e.Id) + 1 : 0; element.GameId = Id; element.Validate(); Elements.Add(element); Definition.OnAddElement(this, element); return(element.Id); }
public string ExecuteQuery(ElementQuery query) { ElementInstance result = Elements.Where(el => el.Definition.Name == query.FromStatement && el.GetAttributeValue(query.WhereStatement) == query.EqualsStatement).FirstOrDefault(); if (result != null) { return(result.GetAttributeValue(query.SelectStatement)); } return(""); }
public void RejectElement(int elementId) { ElementInstance element = GetElement(elementId); foreach (var tokenBunch in element.Tokens) { GetPlayer(tokenBunch.PlayerId).AddTokens(tokenBunch.Token, tokenBunch.PlayerId, tokenBunch.Amount); } element.Tokens.Clear(); foreach (var a in element.Region.Attributes) { element[a.Name] = ""; } element.IsAccepted = false; }
public void SetTokens(Player player, TokenDefinition token, ElementInstance element, int amount) { player.SetTokensToElement(token, element, amount); Definition.OnSetToken(this, player, element, token, amount); }
public bool AcceptElement(int elementId, int containerId, int regionId) { ElementInstance element = GetElement(elementId); if (element == null) { return(false); } RegionContainer container = Definition.Board.GetContainer(containerId); if (container == null) { return(false); } if (container.AcceptElementId != element.Definition.Id) { return(false); } BoardRegion region = container.GetRegion(regionId); if (region == null) { return(false); } if (element.IsAccepted == true && (element.Region.Container.Id != containerId || element.Region.Id != regionId)) { GetAcceptedElements(element.Region.Container.Id, element.Region.Id).ForEach(el => { if (el.Order > element.Order) { el.Order--; } }); } var elements = GetAcceptedElements(containerId, regionId); if (element.IsAccepted == true && element.Region.Container.Id == containerId && element.Region.Id == regionId) { elements.ForEach(el => { if (el.Order > element.Order) { el.Order--; } }); } foreach (var a in region.Attributes) { element[a.Name] = a.Value; } foreach (var calcAttr in region.CalcAttributes) { element[calcAttr.Name] = ExecuteQuery(calcAttr.Query); } element.IsAccepted = true; element.Region = region; element.Order = elements.Count; Definition.OnAcceptElement(this, element); return(true); }