예제 #1
0
 private void OnTriggerExit2D(Collider2D collision)
 {
     if (_lastSpawnedInstance != null && collision.GetComponent <ElementInstance>() == _lastSpawnedInstance)
     {
         _lastSpawnedInstance = null;
     }
 }
예제 #2
0
        public JsonResult EditElement(int gameId, int elementId, FormCollection elementData)
        {
            lock (Game)
            {
                try
                {
                    Player          player  = Platform.GetCurrentPlayer(Game);
                    ElementInstance element = Game.GetElement(elementId);

                    if (element.PlayerId != player.Id && !player.IsModerator())
                    {
                        throw new Error.AccessDenied();
                    }

                    foreach (var key in elementData.AllKeys)
                    {
                        if (element.Definition.HasAttribute(key))
                        {
                            element.Definition.GetAttribute(key).Validate(elementData.Get(key));
                            element.SetAttributeValue(key, elementData.Get(key));
                        }
                    }
                    Game.Definition.OnEditElement(Game, element);

                    return(Json(Result.Succes));
                }
                catch (Error.AppError ex)
                {
                    return(Json(new Result(ex.Message).AsFailure()));
                }
            }
        }
예제 #3
0
        private string TypeNameForDirectShapeType(ElementInstance instance)
        {
            var nameParts = new List <string>();

            if (instance.BaseDefinition.AdditionalProperties.TryGetValue("discriminator", out var discriminator))
            {
                nameParts.Add(discriminator as string);
            }
            if (!string.IsNullOrWhiteSpace(instance.BaseDefinition.Name))
            {
                nameParts.Add(instance.BaseDefinition.Name);
            }
            var typeName = String.Join(" - ", nameParts);

            if (typeNameNumber.TryGetValue(typeName, out var number))
            {
                typeNameNumber[typeName] = number + 1;
                return(typeName + $" ({number++})"); //increment the number to be applied if a type name already exists with this name.
            }
            else
            {
                typeNameNumber[typeName] = 0;
                return(typeName);
            }
        }
예제 #4
0
        public StoryboardLayer(RenderTarget renderTarget, IReadOnlyList <Element> elements, Timing timing) : base(renderTarget)
        {
            if (elements == null)
            {
                return;
            }
            _vSize = new Size2F(renderTarget.Size.Width / 854f, renderTarget.Size.Height / 480f);
            RenderThings[] instants = new RenderThings[elements.Count];
            for (int i = 0; i < instants.Length; i++)
            {
                instants[i] = new RenderThings
                {
                    Index  = i,
                    Elment = elements[i],
                    Events = elements[i].EventList
                }
            }
            ;

            _timing    = timing ?? new Timing(0, new Stopwatch());
            _instances = new ElementInstance[instants.Length];
            for (var i = 0; i < instants.Length; i++)
            {
                var item = instants[i];
                _instances[i] = new ElementInstance(RenderTarget, item.Elment, _vSize, _timing);
            }

            LoadFirstFrame(instants);

            _timing.Watch.Start();
        }
 public void SubscribeActiveInstance(ElementInstance element)
 {
     if (_interactibleData.Contains(element.Data))
     {
         _activeInstances.Add(element);
     }
 }
예제 #6
0
        public JsonResult AddElement(int gameId, int elementDefinitionId, FormCollection elementData)
        {
            lock (Game)
            {
                try
                {
                    ElementInstance element = new ElementInstance(Game.Definition.GetElementDefinition(elementDefinitionId));
                    element.PlayerId = Platform.GameAuthentication.GetPlayerId(gameId);

                    foreach (var key in elementData.AllKeys)
                    {
                        if (element.Definition.HasAttribute(key))
                        {
                            element.SetAttributeValue(key, elementData.Get(key));
                        }
                    }

                    if (element.Definition.CanAdd(Platform.GetCurrentPlayer(Game)))
                    {
                        int id = Game.AddElement(element);
                        return(Json(new Result(new { elementId = id }).AsSuccess()));
                    }
                    else
                    {
                        throw new Error.AccessDenied();
                    }
                }
                catch (Error.AppError ex)
                {
                    return(Json(new Result(ex.Message).AsFailure()));
                }
            }
        }
예제 #7
0
 public void AddTokensToElement(TokenDefinition token, ElementInstance element, int amount)
 {
     if (amount >= 0 && amount <= GetTokenAmount(token))
     {
         element.AddTokens(token, Id, amount);
         AddTokens(token, Id, -amount);
     }
 }
예제 #8
0
 public override void Interact(ElementInstance element)
 {
     if (element.dragging)
     {
         return;
     }
     element.transform.position += transform.up * pushPower * Time.deltaTime;
 }
예제 #9
0
 public override void Interact(ElementInstance element)
 {
     if (!absorbedElements.Contains(element))
     {
         element.Lock();
         absorbedElements.Add(element);
     }
 }
예제 #10
0
 void SpawnElement()
 {
     if (element != null)
     {
         _lastSpawnedInstance      = Instantiate(Director.GetManager <CombinationManager>().emptyElementPrefab, transform.position, Quaternion.identity, elementContainer);
         _lastSpawnedInstance.Data = element;
     }
     _currentSpawnTime = 0;
 }
예제 #11
0
        public JsonResult GetPlayerTokensAmount(int gameId, int tokenDefinitionId, int elementId)
        {
            ElementInstance element = Game.GetElement(elementId);
            TokenDefinition token   = Game.Definition.GetTokenDefinition(tokenDefinitionId);

            int amount = element.GetTokenAmount(token, Platform.GetCurrentPlayer(Game).Id);

            return(Json(new Result(new { tokensAmount = amount }).AsSuccess()));
        }
    public void CancelInteraction(ElementInstance a, ElementInstance b)
    {
        int hash = a.GetHashCode() + b.GetHashCode();

        if (_activeInteractions.ContainsKey(hash))
        {
            _activeInteractions[hash].Kill();
        }
    }
예제 #13
0
 public JsonResult SetTokens(int gameId, int tokenDefinitionId, int elementId, int amount)
 {
     lock (Game)
     {
         ElementInstance element = Game.GetElement(elementId);
         TokenDefinition token   = Game.Definition.GetTokenDefinition(tokenDefinitionId);
         Game.SetTokens(Platform.GetCurrentPlayer(Game), token, element, amount);
         return(Json(Result.Succes));
     }
 }
예제 #14
0
 private void CheckElement(ElementInstance element)
 {
     if (element.GetAttributeValue("Status") == "Pożądany")
     {
         element.Color = element.Definition.Colors[1];
     }
     else
     {
         element.Color = element.Definition.Colors[0];
     }
 }
예제 #15
0
        private static List <Element> CreateFramingPlanInstance(List <Beam> framing, double elevation)
        {
            var instanceBeams = new List <Element>();

            foreach (var beam in framing)
            {
                var halfDepth    = _halfDepths[_beamProfiles.IndexOf(beam.Profile)];
                var beamInstance = new ElementInstance(beam, new Transform(new Vector3(0, 0, elevation - halfDepth)));
                instanceBeams.Add(beamInstance);
            }
            return(instanceBeams);
        }
    public void OnTriggerStay2D(Collider2D other)
    {
        ElementInstance element = other.GetComponent <ElementInstance>();

        if (element != null)
        {
            if (element != a && element != b)
            {
                Interact(element);
            }
        }
    }
 private void CheckElement(ElementInstance element)
 {
     if (element.GetTokenAmount(GetTokenDefinition(0)) >= int.Parse(element.GetAttributeValue("Cena")))
     {
         element.Color = element.Definition.Colors[1];
         element.SetAttributeValue("Czy kupiony?", "Tak");
     }
     else
     {
         element.Color = element.Definition.Colors[0];
         element.SetAttributeValue("Czy kupiony?", "Nie");
     }
 }
예제 #18
0
    protected override void Reposition()
    {
        if (a.Data == airData)
        {
            _airInstance   = a;
            _powerInstance = b;
        }
        else
        {
            _airInstance   = b;
            _powerInstance = a;
        }

        transform.position = _airInstance.transform.position;
    }
예제 #19
0
        public void SetTokensToElement(TokenDefinition token, ElementInstance element, int amount)
        {
            if (amount < 0)
            {
                return;
            }
            int currentAmount = element.GetTokenAmount(token, Id);
            int diff          = amount - currentAmount;

            if (diff <= GetTokenAmount(token))
            {
                element.AddTokens(token, Id, diff);
                AddTokens(token, Id, -diff);
            }
        }
 public override void Interact(ElementInstance element)
 {
     if (element != null)
     {
         foreach (var transformation in recipes)
         {
             if (transformation.input == element.Data)
             {
                 element.Data = transformation.output;
                 Director.GetManager <AchievementManager>().AddCount(element.Data.creationAchievement);
                 break;
             }
         }
     }
 }
예제 #21
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.isTrigger)
        {
            return;
        }

        ElementInstance element = collision.gameObject.GetComponent <ElementInstance>();

        if (element != null && !element.locked && Director.GetManager <CombinationManager>().CombinationExists(this, element))
        {
            Lock();
            Destroy(this.gameObject);
            Destroy(element.gameObject);
        }
    }
    public Interaction GetInteraction(ElementInstance a, ElementInstance b)
    {
        if (a == null || b == null)
        {
            return(null);
        }
        int hash = a.GetHashCode() + b.GetHashCode();

        if (_activeInteractions.ContainsKey(hash))
        {
            return(_activeInteractions[hash]);
        }
        InteractionData validInteraction = null;

        foreach (var interaction in availableInteractions)
        {
            if (interaction.IsFulfilledBy(a.Data, b.Data))
            {
                if (Vector3.Distance(a.transform.position, b.transform.position) < interaction.distance)
                {
                    validInteraction = interaction;
                }
                else
                {
                    CancelInteraction(a, b);
                }
            }
        }
        if (validInteraction != null)
        {
            Interaction newInteraction = Instantiate(validInteraction.interactionPrefab);
            newInteraction.Birth(a, b);
            newInteraction.OnKill            += () => { _activeInteractions.Remove(hash); };
            newInteraction.transform.position = (a.transform.position + b.transform.position) / 2;
            _activeInteractions[hash]         = newInteraction;
            return(newInteraction);
        }
        return(null);
    }
    public bool CombinationExists(ElementInstance a, ElementInstance b)
    {
        ElementData validResult = null;

        foreach (ElementData element in elements)
        {
            if (element.IsFulfilledBy(a.Data, b.Data))
            {
                validResult = element;
                break;
            }
        }
        if (validResult != null)
        {
            ElementInstance element = Instantiate(emptyElementPrefab, (a.transform.position + b.transform.position) / 2, Quaternion.identity, a.transform.parent);

            element.Data = validResult;
            Director.GetManager <AchievementManager>().AddCount(validResult.creationAchievement);
            Director.GetManager <AchievementManager>().AddCount(combinationsAchievement);
        }

        return(validResult != null);
    }
예제 #24
0
        private DB.ElementId[] DirectShapeInstance(LoadContext context, DB.ElementId categoryId, ElementInstance instance)
        {
            var discriminator = "ElementInstance";

            if (instance.BaseDefinition.AdditionalProperties.TryGetValue("discriminator", out var discriminatorValue) && discriminatorValue != null)
            {
                discriminator += $" of {discriminatorValue as string}";
            }
            if (!GeometryLoaderConfig.ShouldDirectShapeObject(instance.BaseDefinition))
            {
                return(Array.Empty <DB.ElementId>());
            }
            else
            {
                var defTypeId = DB.DirectShapeLibrary.GetDirectShapeLibrary(context.Document).FindDefinitionType(instance.BaseDefinition.Id.ToString());
                // If a user uses "Undo" after we've created some direct shape objects the DirectShapeLibrary
                // does not refresh and know that this element has been removed.  This will look like it's going
                // to work all the way until we go to regenerate the document, when a DocumentCorruption error
                // will be posted resulting in the entire Load operation (all converters) to be rolled back.
                var foundType = context.Document.GetElement(defTypeId);
                if (defTypeId == DB.ElementId.InvalidElementId || foundType == null)
                {
                    string typeName     = TypeNameForDirectShapeType(instance);
                    var    defType      = DB.DirectShapeType.Create(context.Document, typeName, categoryId);
                    var    shapeBuilder = instance.BaseDefinition.GetShapeBuilder(context.Document);
                    if (shapeBuilder != null)
                    {
                        defType.AppendShape(shapeBuilder);
                    }
                    else
                    {
                        return(Array.Empty <DB.ElementId>());
                    }
                    defTypeId = defType.Id;
                    DB.DirectShapeLibrary.GetDirectShapeLibrary(context.Document).AddDefinitionType(instance.BaseDefinition.Id.ToString(), defTypeId);
                }

                var completeTransform = new Transform();
                if (instance.BaseDefinition.Transform != null)
                {
                    completeTransform.Concatenate(instance.BaseDefinition.Transform);
                    completeTransform.Invert();
                }
                if (instance.Transform != null)
                {
                    completeTransform.Concatenate(instance.Transform);
                }

                var directShape = DB.DirectShape.CreateElementInstance(context.Document,
                                                                       defTypeId,
                                                                       categoryId,
                                                                       instance.BaseDefinition.Id.ToString(),
                                                                       completeTransform.ToRevitTransform(true));
                if (directShape == null)
                {
                    return(Array.Empty <DB.ElementId>());
                }

                directShape.LookupParameter("Comments")?.Set(discriminator);
                directShape.LookupParameter("Mark")?.Set(instance.Id.ToString());
                return(new[] { directShape.Id });
            }
        }
예제 #25
0
 override public void OnAddElement(GameInstance game, ElementInstance element)
 {
     CheckElement(element);
 }
예제 #26
0
 private void CheckElement(ElementInstance element)
 {
 }
 override public void OnSetToken(GameInstance game, Player player, ElementInstance element, TokenDefinition token, int amount)
 {
     CheckElement(element);
 }
 virtual public void OnSetToken(GameInstance game, Player player, ElementInstance element, TokenDefinition token, int amount)
 {
 }
예제 #29
0
        public ActionResult ElementListItem(int gameId, int elementId)
        {
            ElementInstance elements = Game.GetElement(elementId);

            return(View("Partials/ElementListItem", elements));
        }
 virtual public void OnEditElement(GameInstance game, ElementInstance element)
 {
 }