Inheritance: MonoBehaviour
Example #1
0
        public Simulation()
        {
            _environmentSeed = 20200803;
            _movementSeed    = 1622;
            _size            = new Size(256, 256);
            _strands         = new StrandCollection
            {
                Owner = this
            };
            _attractors = new ChemoeffectorCollection
            {
                Owner = this
            };
            _repellents = new ChemoeffectorCollection
            {
                Owner = this
            };
            _minimumAttractorStrength = 1;
            _maximumAttractorStrength = 128;
            _minimumRepellentStrength = 1;
            _maximumRepellentStrength = 128;
            _attractorCollisionAction = CollisionAction.ReduceSelf;
            _repellentCollisionAction = CollisionAction.ReduceOther;
            _respawnAttractor         = true;
            _wrap = true;

            this.Reset();
        }
Example #2
0
 public CollisionRule(Shape shape, CollisionAction action, Action <Shape> method = null)
 {
     Type   = CollisionRuleType.Shape;
     Target = shape;
     Action = action;
     Method = method;
 }
Example #3
0
        public CollisionRule(Objectmap objMap, CollisionAction action, Type[] objFilter = null, Action <PhysicalObject> method = null)
        {
            //validate objFilter
            foreach (Type objType in objFilter)
            {
                if (!objType.IsSubclassOf(typeof(PhysicalObject)))
                {
                    throw new InvalidObjectTypeException("objType in objFilter (" + objType.ToString() + ") is not a subclass of PhysicalObject");
                }
            }

            Type   = CollisionRuleType.Objectmap;
            Target = objMap;
            if (objFilter != null)
            {
                ObjectmapFilter = new List <Type>(objFilter);
                FilterEnabled   = true;
            }
            else
            {
                FilterEnabled = false;
            }
            Action = action;
            Method = method;
        }
Example #4
0
 public CollisionRule(PhysicalObject obj, CollisionAction action, Action <PhysicalObject> method = null)
 {
     Type   = CollisionRuleType.Object;
     Target = obj;
     Action = action;
     Method = method;
 }
 public CollisionRule(PhysicalObject obj, CollisionAction action, Action<PhysicalObject> method = null)
 {
     Type = CollisionRuleType.Object;
     Target = obj;
     Action = action;
     Method = method;
 }
 public CollisionRule(Shape shape, CollisionAction action, Action<Shape> method = null)
 {
     Type = CollisionRuleType.Shape;
     Target = shape;
     Action = action;
     Method = method;
 }
Example #7
0
        public bool AddItem(Item item, Point location, IHistoryTransaction trans,
                            CollisionAction collisionAction = CollisionAction.ThrowException)
        {
            if (!item.IsRoot)
            {
                throw new InvalidOperationException("Only root items may be added to the field.");
            }
            Size size = item.GetSize();
            var  l    = mapManager.CurrentLayer;

            var itemRect = new Rectangle(location, size);

            if (IsOccupied(itemRect))
            {
                switch (collisionAction)
                {
                case CollisionAction.ThrowException:
                    throw new InvalidOperationException("The specified location is already occupied.");

                case CollisionAction.Abort:
                    return(false);

                case CollisionAction.Overwrite:
                    DeleteRect(itemRect, trans);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(collisionAction), collisionAction, null);
                }
            }

            if (!IsInWorldBounds(itemRect))
            {
                switch (collisionAction)
                {
                case CollisionAction.ThrowException:
                    throw new InvalidOperationException("The specified location is outside of the world.");

                case CollisionAction.Abort:
                    return(false);

                case CollisionAction.Overwrite:
                    return(false);

                default:
                    throw new ArgumentOutOfRangeException(nameof(collisionAction), collisionAction, null);
                }
            }

            trans?.AddStep(new AddItemStep(item, location, this));
            Item tile = l.GetTile(location);

            l.SetExtensionTiles(item, location.X, location.Y);
            tile.CopyFrom(item);
            return(true);
        }
        public CollisionRule(Type objType, CollisionAction action, Action<PhysicalObject> method = null)
        {
            //validate objType
            if (!objType.IsSubclassOf(typeof(PhysicalObject)))
                throw new InvalidObjectTypeException("objType (" + objType + ") is not a subclass of PhysicalObject");

            Type = CollisionRuleType.ObjectType;
            Target = objType;
            Action = action;
            Method = method;
        }
Example #9
0
        public CollisionRule(Type objType, CollisionAction action, Action <PhysicalObject> method = null)
        {
            //validate objType
            if (!objType.IsSubclassOf(typeof(PhysicalObject)))
            {
                throw new InvalidObjectTypeException("objType (" + objType.ToString() + ") is not a subclass of PhysicalObject");
            }

            Type   = CollisionRuleType.ObjectType;
            Target = objType;
            Action = action;
            Method = method;
        }
Example #10
0
 public CollisionRule(Spritemap spritemap, CollisionAction action, Sprite[] spriteFilter = null, Action <PhysicalObject> method = null)
 {
     Type   = CollisionRuleType.Spritemap;
     Target = spritemap;
     if (spriteFilter != null)
     {
         SpritemapFilter = new List <Sprite>(spriteFilter);
         FilterEnabled   = true;
     }
     else
     {
         FilterEnabled = false;
     }
     Action = action;
     Method = method;
 }
Example #11
0
        public CollisionRule(GameObjectCollection objMap, CollisionAction action, Type[] objFilter = null, Action<PhysicalObject> method = null)
        {
            Type = CollisionRuleType.Objectmap;
            Target = objMap;
            Action = action;
            Method = method;

            if (objFilter != null)
            {
                //validate the filter
                foreach (Type objType in objFilter)
                {
                    if (!objType.IsSubclassOf(typeof (PhysicalObject)))
                        throw new InvalidObjectTypeException("objType in objFilter (" + objType +
                                                             ") is not a subclass of PhysicalObject");
                }

                ObjectmapFilter = new List<Type>(objFilter);

                FilterEnabled = true;
            }
            else
                FilterEnabled = false;
        }
Example #12
0
        private IEntityBase CopyObject(
            INamedObjectList oDstList,
            IEntityBase oEntity,
            bool bWithOwnedChildren)
        {
            IEntityBase oClonedEntity =
                PerformClone(oEntity);

            IEntityBase oDstListEntity = oClonedEntity;

            try
            {
                oDstList.Add(oClonedEntity);
            }
            catch
            {
                // Collision

                string sObjName = oEntity.Name;

                // Determine what to do
                CollisionAction enCollisionAction = GetCollisionAction(
                    ref sObjName,
                    oEntity.TypeInfo.TheType.Name,
                    oDstList);

                bool bRetryAdd = true;

                switch (enCollisionAction)
                {
                case CollisionAction.Rename:
                    oClonedEntity.Rename(sObjName);
                    break;

                case CollisionAction.Overwrite:
                    oDstList.Remove(oEntity.Name);
                    break;

                case CollisionAction.KeepOriginal:
                    oDstListEntity = (EntityBase)oDstList[oEntity.Name];
                    bRetryAdd      = false;
                    break;
                }

                if (bRetryAdd)
                {
                    oDstList.Add(oClonedEntity);
                }
            }

            m_oGraph[oEntity] = oDstListEntity;

            if (bWithOwnedChildren)
            {
                CopyOwnedChildren(
                    oEntity,
                    oDstListEntity,
                    true  // Recursive
                    );
            }

            return(oDstListEntity);
        }
Example #13
0
        private void ProcessCollision(Strand strand, Chemoeffector chemoeffector, ChemoeffectorCollection container, CollisionAction action, Action createNew)
        {
            if (action == CollisionAction.ReduceSelf)
            {
                chemoeffector.Strength--;
                strand.Strength++;
            }
            else if (action == CollisionAction.ReduceOther)
            {
                strand.Strength--;
            }

            if (chemoeffector.Strength <= 0 || action == CollisionAction.DestroySelf)
            {
                container.Remove(chemoeffector);

                createNew();
            }

            if (strand.Strength <= 0 || action == CollisionAction.DestroyOther)
            {
                _strands.Remove(strand);
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="FileNameCollisionEventArgs"/> class.
 /// </summary>
 /// <param name="defaultAction">The default action.</param>
 public FileNameCollisionEventArgs(CollisionAction defaultAction)
 {
     Action = defaultAction;
 }
Example #15
0
 public CollisionRule(string spritemapID, CollisionAction action, string[] spriteIDFilter = null, Action <PhysicalObject> method = null)
     : this(Resources.Spritemaps[spritemapID], action, ProcessSpriteIDs(spriteIDFilter), method)
 {
 }