Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }
Exemple #4
0
 public void SetTokens(Player player, TokenDefinition token, ElementInstance element, int amount)
 {
     player.SetTokensToElement(token, element, amount);
     Definition.OnSetToken(this, player, element, token, amount);
 }
Exemple #5
0
        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);
        }