Example #1
0
        public bool HandleMouseInput(MouseInput mi)
        {
            // Exclusively uses left and right mouse buttons, but nothing else
            if (mi.Button != MouseButton.Left && mi.Button != MouseButton.Right)
            {
                return(false);
            }

            if (mi.Button == MouseButton.Right)
            {
                editorWidget.ClearBrush();
                return(true);
            }

            var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);

            if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Down)
            {
                // Check the actor is inside the map
                if (!footprint.All(c => world.Map.MapTiles.Value.Contains(cell + locationOffset + c)))
                {
                    return(true);
                }

                var newActorReference = new ActorReference(Actor.Name);
                newActorReference.Add(new OwnerInit(owner.Name));

                cell += locationOffset;
                newActorReference.Add(new LocationInit(cell));

                var ios = Actor.Traits.GetOrDefault <IOccupySpaceInfo>();
                if (ios != null && ios.SharesCell)
                {
                    var subcell = editorLayer.FreeSubCellAt(cell);
                    if (subcell != SubCell.Invalid)
                    {
                        newActorReference.Add(new SubCellInit(subcell));
                    }
                }

                var initDict = newActorReference.InitDict;

                if (Actor.Traits.Contains <IFacingInfo>())
                {
                    initDict.Add(new FacingInit(facing));
                }

                if (Actor.Traits.Contains <TurretedInfo>())
                {
                    initDict.Add(new TurretFacingInit(facing));
                }

                editorLayer.Add(newActorReference);
            }

            return(true);
        }
Example #2
0
        public void Do()
        {
            var ownerName         = owner.Name;
            var specificOwnerInfo = actor.TraitInfoOrDefault <RequiresSpecificOwnersInfo>();

            if (specificOwnerInfo != null && !specificOwnerInfo.ValidOwnerNames.Contains(ownerName))
            {
                ownerName = specificOwnerInfo.ValidOwnerNames.First();
            }

            var newActorReference = new ActorReference(actor.Name);

            newActorReference.Add(new OwnerInit(ownerName));

            newActorReference.Add(new LocationInit(cell));

            var ios = actor.TraitInfoOrDefault <IOccupySpaceInfo>();

            if (ios != null && ios.SharesCell)
            {
                var subcell = editorLayer.FreeSubCellAt(cell);
                if (subcell != SubCell.Invalid)
                {
                    newActorReference.Add(new SubCellInit(subcell));
                }
            }

            var initDict = newActorReference.InitDict;

            if (actor.HasTraitInfo <IFacingInfo>())
            {
                initDict.Add(new FacingInit(facing));
            }

            if (actor.HasTraitInfo <TurretedInfo>())
            {
                initDict.Add(new TurretFacingInit(facing));
            }

            editorActorPreview = editorLayer.Add(newActorReference);

            Text = "Added {0} ({1})".F(editorActorPreview.Info.Name, editorActorPreview.ID);
        }
Example #3
0
        public bool HandleMouseInput(MouseInput mi)
        {
            // Exclusively uses left and right mouse buttons, but nothing else
            if (mi.Button != MouseButton.Left && mi.Button != MouseButton.Right)
            {
                return(false);
            }

            if (mi.Button == MouseButton.Right)
            {
                if (mi.Event == MouseInputEvent.Up)
                {
                    editorWidget.ClearBrush();
                    return(true);
                }

                return(false);
            }

            var cell = worldRenderer.Viewport.ViewToWorld(mi.Location - worldRenderer.ScreenPxOffset(centerOffset));

            if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Down)
            {
                // Check the actor is inside the map
                if (!footprint.All(c => world.Map.Tiles.Contains(cell + c)))
                {
                    return(true);
                }

                // Enforce first entry of ValidOwnerNames as owner if the actor has RequiresSpecificOwners
                var ownerName         = owner.Name;
                var specificOwnerInfo = Actor.TraitInfoOrDefault <RequiresSpecificOwnersInfo>();
                if (specificOwnerInfo != null && !specificOwnerInfo.ValidOwnerNames.Contains(ownerName))
                {
                    ownerName = specificOwnerInfo.ValidOwnerNames.First();
                }

                var newActorReference = new ActorReference(Actor.Name);
                newActorReference.Add(new OwnerInit(ownerName));

                newActorReference.Add(new LocationInit(cell));

                var ios = Actor.TraitInfoOrDefault <IOccupySpaceInfo>();
                if (ios != null && ios.SharesCell)
                {
                    var subcell = editorLayer.FreeSubCellAt(cell);
                    if (subcell != SubCell.Invalid)
                    {
                        newActorReference.Add(new SubCellInit(subcell));
                    }
                }

                var initDict = newActorReference.InitDict;

                if (Actor.HasTraitInfo <IFacingInfo>())
                {
                    initDict.Add(new FacingInit(facing));
                }

                if (Actor.HasTraitInfo <TurretedInfo>())
                {
                    initDict.Add(new TurretFacingInit(facing));
                }

                editorLayer.Add(newActorReference);
            }

            return(true);
        }