Inheritance: MonoBehaviour
		IEnumerable<Order> InnerOrder(World world, CPos xy, MouseInput mi)
		{
			if (world.Paused)
				yield break;

			if (mi.Button == MouseButton.Left)
			{
				var topLeft = xy - FootprintUtils.AdjustForBuildingSize(BuildingInfo);
				if (!world.CanPlaceBuilding(Building, BuildingInfo, topLeft, null)
					|| !BuildingInfo.IsCloseEnoughToBase(world, Producer.Owner, Building, topLeft))
				{
					Sound.PlayNotification(world.Map.Rules, Producer.Owner, "Speech", "BuildingCannotPlaceAudio", Producer.Owner.Country.Race);
					yield break;
				}

				var isLineBuild = world.Map.Rules.Actors[Building].Traits.Contains<LineBuildInfo>();
				yield return new Order(isLineBuild ? "LineBuild" : "PlaceBuilding", Producer.Owner.PlayerActor, false)
				{
					TargetLocation = topLeft,
					TargetActor = Producer,
					TargetString = Building,
					SuppressVisualFeedback = true
				};
			}
		}
Esempio n. 2
0
        public IEnumerable<Order> Order(World world, int2 xy, MouseInput mi)
        {
            if (mi.Button == MouseButton.Right)
                world.CancelInputMode();

            return OrderInner(world, xy, mi);
        }
Esempio n. 3
0
		private void WriteInputStats(ref FormattedText target, MouseInput input)
		{
			// Initialize the formatted text block we'll write to
			this.PrepareFormattedText(ref target);

			// Determine all pressed mouse buttons
			string activeButtons = "";
			foreach (MouseButton button in Enum.GetValues(typeof(MouseButton)))
			{
				if (input.ButtonPressed(button))
				{
					if (activeButtons.Length != 0)
						activeButtons += ", ";
					activeButtons += button.ToString();
				}
			}

			// Compose the formatted text to display
			target.SourceText = 
				"/f[1]Mouse Stats/f[0]/n/n" +
				string.Format("Description: /cFF8800FF{0}/cFFFFFFFF/n", input.Description) +
				string.Format("IsAvailable: /cFF8800FF{0}/cFFFFFFFF/n", input.IsAvailable) +
				string.Format("X:     /c44AAFFFF{0,4}/cFFFFFFFF | XSpeed:     /c44AAFFFF{1,4}/cFFFFFFFF/n", input.X, input.XSpeed) +
				string.Format("Y:     /c44AAFFFF{0,4}/cFFFFFFFF | YSpeed:     /c44AAFFFF{1,4}/cFFFFFFFF/n", input.Y, input.YSpeed) +
				string.Format("Wheel: /c44AAFFFF{0,4}/cFFFFFFFF | WheelSpeed: /c44AAFFFF{1,4}/cFFFFFFFF/n", input.WheelPrecise, input.WheelSpeedPrecise) +
				string.Format("Buttons: /c44AAFFFF{0}/cFFFFFFFF/n", activeButtons);
		}
        public IEnumerable<Order> Order(World world, CPos xy, MouseInput mi)
        {
            var underCursor = world.ScreenMap.ActorsAt(mi)
                .Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>())
                .WithHighestSelectionPriority();

            Target target;
            if (underCursor != null)
                target = Target.FromActor(underCursor);
            else
            {
                var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi)
                    .Where(a => a.Info.Traits.Contains<ITargetableInfo>() && !a.Footprint.All(world.ShroudObscures))
                    .WithHighestSelectionPriority();
                target = frozen != null ? Target.FromFrozenActor(frozen) : Target.FromCell(world, xy);
            }

            var orders = world.Selection.Actors
                .Select(a => OrderForUnit(a, target, mi))
                .Where(o => o != null)
                .ToList();

            var actorsInvolved = orders.Select(o => o.Actor).Distinct();
            if (actorsInvolved.Any())
                yield return new Order("CreateGroup", actorsInvolved.First().Owner.PlayerActor, false)
                {
                    TargetString = actorsInvolved.Select(a => a.ActorID).JoinWith(",")
                };

            foreach (var o in orders)
                yield return CheckSameOrder(o.Order, o.Trait.IssueOrder(o.Actor, o.Order, o.Target, mi.Modifiers.HasModifier(Modifiers.Shift)));
        }
Esempio n. 5
0
        public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
        {
            if (underCursor != null && underCursor.HasTrait<RenderInfantry>())
                return new Order("Disguise", self, underCursor);

            return null;
        }
        public IEnumerable<Order> Order( World world, int2 xy, MouseInput mi )
        {
            var underCursor = world.FindUnitsAtMouse(mi.Location)
                .Where(a => a.HasTrait<ITargetable>())
                .OrderByDescending(
                    a =>
                    a.Info.Traits.Contains<SelectableInfo>()
                        ? a.Info.Traits.Get<SelectableInfo>().Priority
                        : int.MinValue)
                .FirstOrDefault();

            var orders = world.Selection.Actors
                .Select(a => OrderForUnit(a, xy, mi, underCursor))
                .Where(o => o != null)
                .ToArray();

            var actorsInvolved = orders.Select(o => o.self).Distinct();
            if (actorsInvolved.Any())
                yield return new Order("CreateGroup", actorsInvolved.First().Owner.PlayerActor, false)
                {
                    TargetString = string.Join(",", actorsInvolved.Select(a => a.ActorID.ToString()).ToArray())
                };

            foreach (var o in orders)
                yield return CheckSameOrder(o.iot, o.trait.IssueOrder(o.self, o.iot, o.target, mi.Modifiers.HasModifier(Modifiers.Shift)));
        }
        public override bool OnMouseUp(Widget w, MouseInput mi)
        {
            if (w.Id == "MAINMENU_BUTTON_CREATE")
            {
                Game.chrome.rootWidget.ShowMenu("CREATESERVER_BG");
                return true;
            }

            if (w.Id == "CREATESERVER_BUTTON_CANCEL")
            {
                Game.chrome.rootWidget.ShowMenu("MAINMENU_BG");
                return true;
            }

            if (w.Id == "CREATESERVER_BUTTON_START")
            {
                Game.chrome.rootWidget.ShowMenu(null);
                Log.Write("Creating server");

                Server.Server.ServerMain(AdvertiseServerOnline, Game.Settings.MasterServer,
                                        Game.Settings.GameName, Game.Settings.ListenPort,
                                        Game.Settings.ExternalPort, Game.Settings.InitialMods);

                Log.Write("Joining server");
                Game.JoinServer(IPAddress.Loopback.ToString(), Game.Settings.ListenPort);
                return true;
            }

            return false;
        }
Esempio n. 8
0
 static IEnumerable<Actor> FriendlyGuardableUnits(World world, MouseInput mi)
 {
     return world.ScreenMap.ActorsAt(mi)
         .Where(a => !world.FogObscures(a) && !a.IsDead &&
             a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) &&
             a.Info.HasTraitInfo<GuardableInfo>());
 }
    public GameClass(bool startFullScreen, Size size, bool enableNetwork)
    {
        this.startFullscreen = startFullScreen;
        this.Size = size;
        this.networkEnabled = enableNetwork;
        this.Text = "SpaceWar3D-Step12";
        statusMessageTimer = Constants.StatusMessageDisplayTime;

        drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular);

        input = new InputClass(this);
        mouseInput = new MouseInput(this);
        this.MouseMove +=new MouseEventHandler(GameClass_MouseMove);
        this.Cursor = Cursors.NoMove2D;

        camera = new Camera();
        soundHandler = new SoundHandler(this);

        if (networkEnabled) {
            peer = new PlayClass(this);
            if (peer.IsHost) {
                hullColor = HullColors.Red;
            }
        }
    }
Esempio n. 10
0
        public override bool HandleInput(MouseInput mi)
        {
            if (Game.chrome.selectedWidget == this)
                Depressed = (GetEventBounds().Contains(mi.Location.X,mi.Location.Y)) ? true : false;

            // Relinquish focus
            if (Game.chrome.selectedWidget == this && mi.Event == MouseInputEvent.Up)
            {
                Game.chrome.selectedWidget = null;
                Depressed = false;
            }

            // Are we able to handle this event?
            if (!Visible || !GetEventBounds().Contains(mi.Location.X,mi.Location.Y))
                return base.HandleInput(mi);

            if (base.HandleInput(mi))
                return true;

            // Give button focus only while the mouse is down
            // This is a bit of a hack: it will become cleaner soonish
            // It will also steal events from any potential children
            // We also want to play a click sound
            if (mi.Event == MouseInputEvent.Down)
            {
                Game.chrome.selectedWidget = this;
                Depressed = true;
                return true;
            }

            return false;
        }
Esempio n. 11
0
        public override bool OnMouseDown(Widget w, MouseInput mi)
        {
            if (w.Id == "SETTINGS_CHECKBOX_UNITDEBUG")
            {
                Game.Settings.UnitDebug = !Game.Settings.UnitDebug;
                return true;
            }

            if (w.Id == "SETTINGS_CHECKBOX_PATHDEBUG")
            {
                Game.Settings.PathDebug = !Game.Settings.PathDebug;
                return true;
            }

            if (w.Id == "SETTINGS_CHECKBOX_INDEXDEBUG")
            {
                Game.Settings.IndexDebug = !Game.Settings.IndexDebug;
                return true;
            }

            if (w.Id == "SETTINGS_CHECKBOX_PERFGRAPH")
            {
                Game.Settings.PerfGraph = !Game.Settings.PerfGraph;
                return true;
            }

            if (w.Id == "SETTINGS_CHECKBOX_PERFTEXT")
            {
                Game.Settings.PerfText = !Game.Settings.PerfText;
                return true;
            }

            return false;
        }
Esempio n. 12
0
        public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
        {
            if (mi.Button == MouseButton.Right && self == underCursor)
                return new Order("DeployTransform", self);

            return null;
        }
Esempio n. 13
0
        public string GetCursor( World world, int2 xy, MouseInput mi )
        {
            bool useSelect = false;

            var custom = world.WorldActor.TraitOrDefault<ICustomUnitOrderGenerator>();
            if (custom != null)
            {
               return custom.GetCursor(world, xy, mi);
            }

            var underCursor = world.FindUnitsAtMouse(mi.Location)
                .Where(a => a.HasTrait<ITargetable>())
                .OrderByDescending(a => a.Info.Traits.Contains<SelectableInfo>() ? a.Info.Traits.Get<SelectableInfo>().Priority : int.MinValue)
                .FirstOrDefault();

            if (mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any())
                if (underCursor != null)
                    useSelect = true;

            var orders = world.Selection.Actors
                .Select(a => OrderForUnit(a, xy, mi, underCursor))
                .Where(o => o != null)
                .ToArray();

            if( orders.Length == 0 ) return (useSelect) ? "select" : "default";

            return orders[0].cursor ?? ((useSelect) ? "select" : "default");
        }
Esempio n. 14
0
        public string GetCursor(World world, CPos xy, MouseInput mi)
        {
            var useSelect = false;
            var underCursor = world.ScreenMap.ActorsAt(mi)
                .Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>())
                .WithHighestSelectionPriority();

            if (underCursor != null && (mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any()))
            {
                var selectable = underCursor.TraitOrDefault<Selectable>();
                if (selectable != null && selectable.Info.Selectable)
                    useSelect = true;
            }

            Target target;
            if (underCursor != null)
                target = Target.FromActor(underCursor);
            else
            {
                var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi)
                    .Where(a => a.Info.Traits.Contains<ITargetableInfo>() && !a.Footprint.All(world.ShroudObscures))
                    .WithHighestSelectionPriority();
                target = frozen != null ? Target.FromFrozenActor(frozen) : Target.FromCell(world, xy);
            }

            var ordersWithCursor = world.Selection.Actors
                .Select(a => OrderForUnit(a, target, mi))
                .Where(o => o != null && o.Cursor != null);

            var cursorOrder = ordersWithCursor.MaxByOrDefault(o => o.Order.OrderPriority);

            return cursorOrder != null ? cursorOrder.Cursor : (useSelect ? "select" : "default");
        }
Esempio n. 15
0
		public override bool HandleMouseInput(MouseInput mi)
		{
			if (mi.Button != MouseButton.Left) return false;
			if (IsDisabled()) return false;
			if (mi.Event == MouseInputEvent.Down && !TakeFocus(mi))	return false;
			if (!Focused) return false;

			switch( mi.Event )
			{
			case MouseInputEvent.Up:
				isMoving = false;
				LoseFocus(mi);
				break;

			case MouseInputEvent.Down:
				isMoving = true;
				/* todo: handle snapping to ticks properly again */
				/* todo: handle nudge via clicking outside the thumb */
				UpdateValue(ValueFromPx(mi.Location.X - RenderBounds.Left));
				break;

			case MouseInputEvent.Move:
				if (isMoving)
					UpdateValue(ValueFromPx(mi.Location.X - RenderBounds.Left));
				break;
			}

			return ThumbRect.Contains(mi.Location);
		}
Esempio n. 16
0
 public override bool HandleMouseInput(MouseInput mi)
 {
     if (ClickThrough) return false;
     if (!Draggable || moving && (!TakeFocus(mi) || mi.Button != MouseButton.Left)) return true;
     if (prevMouseLocation == null)
         prevMouseLocation = mi.Location;
     var vec = mi.Location - (int2)prevMouseLocation;
     prevMouseLocation = mi.Location;
     switch (mi.Event)
     {
         case MouseInputEvent.Up:
             moving = false;
             LoseFocus(mi);
             break;
         case MouseInputEvent.Down:
             moving = true;
             Bounds = new Rectangle(Bounds.X + vec.X, Bounds.Y + vec.Y, Bounds.Width, Bounds.Height);
             break;
         case MouseInputEvent.Move:
             if (moving)
                 Bounds = new Rectangle(Bounds.X + vec.X, Bounds.Y + vec.Y, Bounds.Width, Bounds.Height);
             break;
     }
     return true;
 }
        public IEnumerable<Order> Order(World world, int2 xy, MouseInput mi)
        {
            if (mi.Button == MouseButton.Right)
                Game.controller.CancelInputMode();

            return InnerOrder(world, xy, mi);
        }
Esempio n. 18
0
        // Used for classic mouse orders, determines whether or not action at xy is move or select
        public virtual bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
        {
            var actor = world.ScreenMap.ActorsAt(xy).WithHighestSelectionPriority(xy);
            if (actor == null)
                return true;

            var target = Target.FromActor(actor);
            var cell = world.Map.CellContaining(target.CenterPosition);
            var actorsAt = world.ActorMap.GetActorsAt(cell).ToList();
            var underCursor = world.Selection.Actors.WithHighestSelectionPriority(xy);

            var o = OrderForUnit(underCursor, target, actorsAt, cell, mi);
            if (o != null)
            {
                var modifiers = TargetModifiers.None;
                if (mi.Modifiers.HasModifier(Modifiers.Ctrl))
                    modifiers |= TargetModifiers.ForceAttack;
                if (mi.Modifiers.HasModifier(Modifiers.Shift))
                    modifiers |= TargetModifiers.ForceQueue;
                if (mi.Modifiers.HasModifier(Modifiers.Alt))
                    modifiers |= TargetModifiers.ForceMove;

                if (o.Order.TargetOverridesSelection(modifiers))
                    return true;
            }

            return false;
        }
Esempio n. 19
0
        public IEnumerable<Order> Order(World world, CPos xy, MouseInput mi)
        {
            var underCursor = world.FindUnitsAtMouse(mi.Location)
                .Where(a => a.HasTrait<ITargetable>())
                .OrderByDescending(a => a.Info.SelectionPriority())
                .FirstOrDefault();

            Target target;
            if (underCursor != null)
                target = Target.FromActor(underCursor);
            else
            {
                var frozen = world.FindFrozenActorsAtMouse(mi.Location)
                    .Where(a => a.Info.Traits.Contains<ITargetableInfo>())
                    .OrderByDescending(a => a.Info.SelectionPriority())
                    .FirstOrDefault();
                target = frozen != null ? Target.FromFrozenActor(frozen) : Target.FromCell(xy);
            }

            var orders = world.Selection.Actors
                .Select(a => OrderForUnit(a, target, mi))
                .Where(o => o != null)
                .ToArray();

            var actorsInvolved = orders.Select(o => o.self).Distinct();
            if (actorsInvolved.Any())
                yield return new Order("CreateGroup", actorsInvolved.First().Owner.PlayerActor, false)
                {
                    TargetString = actorsInvolved.Select(a => a.ActorID).JoinWith(",")
                };

            foreach (var o in orders)
                yield return CheckSameOrder(o.iot, o.trait.IssueOrder(o.self, o.iot, o.target, mi.Modifiers.HasModifier(Modifiers.Shift)));
        }
Esempio n. 20
0
        public string GetCursor(World world, CPos xy, MouseInput mi)
        {
            var useSelect = false;
            var underCursor = world.ScreenMap.ActorsAt(mi)
                .Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>())
                .OrderByDescending(a => a.Info.SelectionPriority())
                .FirstOrDefault();

            if (underCursor != null && (mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any()))
            {
                var selectable = underCursor.TraitOrDefault<Selectable>();
                if (selectable != null && selectable.Info.Selectable)
                    useSelect = true;
            }

            Target target;
            if (underCursor != null)
                target = Target.FromActor(underCursor);
            else
            {
                var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi)
                    .Where(a => a.Info.Traits.Contains<ITargetableInfo>())
                    .OrderByDescending(a => a.Info.SelectionPriority())
                    .FirstOrDefault();
                target = frozen != null ? Target.FromFrozenActor(frozen) : Target.FromCell(xy);
            }

            var orders = world.Selection.Actors
                .Select(a => OrderForUnit(a, target, mi))
                .Where(o => o != null)
                .ToArray();

            var cursorName = orders.Select(o => o.Cursor).FirstOrDefault();
            return cursorName ?? (useSelect ? "select" : "default");
        }
		public override bool HandleMouseInput(MouseInput mi)
		{
			if (CurrentBrush.HandleMouseInput(mi))
				return true;

			return base.HandleMouseInput(mi);
		}
Esempio n. 22
0
        static IEnumerable<Order> OrderInner(World world, MouseInput mi)
        {
            if (mi.Button != MouseButton.Left)
                yield break;

            var underCursor = world.ScreenMap.ActorsAt(mi)
                .FirstOrDefault(a => a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) && !world.FogObscures(a));

            if (underCursor == null)
                yield break;

            if (underCursor.GetDamageState() == DamageState.Undamaged)
                yield break;

            // Repair a building.
            if (underCursor.Info.HasTraitInfo<RepairableBuildingInfo>())
                yield return new Order("RepairBuilding", world.LocalPlayer.PlayerActor, false) { TargetActor = underCursor };

            // Don't command allied units
            if (underCursor.Owner != world.LocalPlayer)
                yield break;

            // Test for generic Repairable (used on units).
            var repairable = underCursor.TraitOrDefault<Repairable>();
            if (repairable == null)
                yield break;

            // Find a building to repair at.
            var repairBuilding = repairable.FindRepairBuilding(underCursor);
            if (repairBuilding == null)
                yield break;

            yield return new Order("Repair", underCursor, false) { TargetActor = repairBuilding };
        }
Esempio n. 23
0
        public IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
        {
            world.CancelInputMode();

            if (mi.Button == MouseButton.Left)
                yield return new Order("PlaceBeacon", world.LocalPlayer.PlayerActor, false) { TargetLocation = cell, SuppressVisualFeedback = true };
        }
Esempio n. 24
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);

			if (mi.Button == MouseButton.Left && AllowResourceAt(cell))
			{
				var type = (byte)ResourceType.ResourceType;
				var index = (byte)ResourceType.MaxDensity;
				world.Map.MapResources.Value[cell] = new ResourceTile(type, index);
			}

			return true;
		}
Esempio n. 25
0
        public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
        {
            if (mi.Button == MouseButton.Right && xy == self.Location && chargeTick <= 0)
                return new Order("Deploy", self);

            return null;
        }
Esempio n. 26
0
        public string GetCursor(World world, int2 xy, MouseInput mi)
        {
            if (!world.LocalPlayer.Shroud.IsExplored(xy))
                return "move-blocked";

            var movement = self.TraitOrDefault<IMove>();
            return (movement.CanEnterCell(xy)) ? "chrono-target" : "move-blocked";
        }
Esempio n. 27
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;
            }

            if (mi.Button == MouseButton.Left)
            {
                if (mi.Event == MouseInputEvent.Down)
                    painting = true;
                else if (mi.Event == MouseInputEvent.Up)
                    painting = false;
            }

            if (!painting)
                return true;

            var map = world.Map;
            var mapTiles = map.MapTiles.Value;
            var mapHeight = map.MapHeight.Value;
            var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);

            if (mi.Event != MouseInputEvent.Down && mi.Event != MouseInputEvent.Move)
                return true;

            var rules = map.Rules;
            var tileset = rules.TileSets[map.Tileset];
            var template = tileset.Templates[Template];
            var baseHeight = mapHeight.Contains(cell) ? mapHeight[cell] : (byte)0;
            if (mi.Event == MouseInputEvent.Move && PlacementOverlapsSameTemplate(template, cell))
                return true;

            var i = 0;
            for (var y = 0; y < template.Size.Y; y++)
            {
                for (var x = 0; x < template.Size.X; x++, i++)
                {
                    if (template.Contains(i) && template[i] != null)
                    {
                        var index = template.PickAny ? (byte)Game.CosmeticRandom.Next(0, template.TilesCount) : (byte)i;
                        var c = cell + new CVec(x, y);
                        if (!mapTiles.Contains(c))
                            continue;

                        mapTiles[c] = new TerrainTile(Template, index);
                        mapHeight[c] = (byte)(baseHeight + template[index].Height).Clamp(0, map.MaximumTerrainHeight);
                    }
                }
            }

            return true;
        }
Esempio n. 28
0
        public bool HandleMouseInput(MouseInput mi)
        {
            // Exclusively uses left and right mouse buttons, but nothing else
            // Mouse move events are important for tooltips, so we always allow these through
            if (mi.Button != MouseButton.Left && mi.Button != MouseButton.Right && mi.Event != MouseInputEvent.Move)
                return false;

            var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);
            if (mi.Event == MouseInputEvent.Up)
                return true;

            var underCursor = editorLayer.PreviewsAt(worldRenderer.Viewport.ViewToWorldPx(mi.Location))
                .FirstOrDefault();

            var mapResources = world.Map.MapResources.Value;
            ResourceType type;
            if (underCursor != null)
                editorWidget.SetTooltip(underCursor.Tooltip);
            else if (mapResources.Contains(cell) && resources.TryGetValue(mapResources[cell].Type, out type))
                editorWidget.SetTooltip(type.Info.Name);
            else
                editorWidget.SetTooltip(null);

            // Finished with mouse move events, so let them bubble up the widget tree
            if (mi.Event == MouseInputEvent.Move)
                return false;

            if (mi.Button == MouseButton.Right)
            {
                editorWidget.SetTooltip(null);

                if (underCursor != null)
                    editorLayer.Remove(underCursor);

                if (mapResources.Contains(cell) && mapResources[cell].Type != 0)
                    mapResources[cell] = new ResourceTile();
            }
            else if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Down)
            {
                if (underCursor != null)
                {
                    // Test case / demonstration of how to edit an existing actor
                    var facing = underCursor.Init<FacingInit>();
                    if (facing != null)
                        underCursor.ReplaceInit(new FacingInit((facing.Value(world) + 32) % 256));
                    else if (underCursor.Info.Traits.WithInterface<UsesInit<FacingInit>>().Any())
                        underCursor.ReplaceInit(new FacingInit(32));

                    var turret = underCursor.Init<TurretFacingInit>();
                    if (turret != null)
                        underCursor.ReplaceInit(new TurretFacingInit((turret.Value(world) + 32) % 256));
                    else if (underCursor.Info.Traits.WithInterface<UsesInit<TurretFacingInit>>().Any())
                        underCursor.ReplaceInit(new TurretFacingInit(32));
                }
            }

            return true;
        }
        public void ApplyOrders(World world, PPos xy, MouseInput mi)
        {
            if (world.OrderGenerator == null) return;

            var orders = world.OrderGenerator.Order(world, xy.ToCPos(), mi).ToArray();
            orders.Do(o => world.IssueOrder(o));

            world.PlayVoiceForOrders(orders);
        }
Esempio n. 30
0
 public Button(Sprite sprite, MouseInput mouseInput)
 {
     _buttonSprite = sprite;
     _buttonSprite.BindParent(this);
     _mouseInput = mouseInput;
     _state = BUTTON_STATE.RELEASED;
     _selection = BUTTON_SELECT.NONE;
     _lock = LOCK.LOCKED;
 }
Esempio n. 31
0
 protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     return(IsValidTarget(world, cell) ? cursor : cursorBlocked);
 }
Esempio n. 32
0
 public string GetCursor(World world, CPos xy, MouseInput mi)
 {
     return(IsValidTarget(xy) ? "chrono-target" : "move-blocked");
 }
Esempio n. 33
0
 public override bool YieldMouseFocus(MouseInput mi)
 {
     leftPressed = rightPressed = false;
     return(base.YieldMouseFocus(mi));
 }
Esempio n. 34
0
        private void PlaySync()
        {
            try
            {
                manualResetEvent.Reset();
                MouseInput.GetMaxSize();

                uint period = Math.Max(periodMin, Math.Min(periodMax, (uint)GetWaitTime((int)minWaitTime)));;

                if (NativeMethods.timeBeginPeriod(period) != 0)
                {
                    throw new Exception("timeBeginPeriod failed.");
                }

                for (int i = 0; i < times && State == SessionState.Playing; i++)
                {
                    for (int j = 0; j < packets.Count && State == SessionState.Playing; j++)
                    {
                        Packet packet = packets[j];

                        WaitPacket wait = packet as WaitPacket;

                        if (wait != null)
                        {
                            sendInput.Flush();
                            int waitTime = GetWaitTime(wait.Milliseconds);

                            if (waitTime > 0)
                            {
                                manualResetEvent.WaitOne(waitTime);
                            }

                            continue;
                        }

                        InputPacket input = packet as InputPacket;

                        if (input != null)
                        {
                            sendInput.Queue(input.Input);
                            continue;
                        }
                    }
                }

                if (State == SessionState.Playing)
                {
                    sendInput.Flush();
                }

                if (NativeMethods.timeEndPeriod(period) != 0)
                {
                    throw new Exception("timeEndPeriod failed.");
                }
            }
            catch (Exception ex)
            {
                MainForm.ShowError(ex);
            }

            State = SessionState.Idle;
        }
Esempio n. 35
0
 protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     return(power.UnitsInRange(cell).Any() ? power.info.Cursor : power.info.BlockedCursor);
 }
Esempio n. 36
0
 public UIManager(Game game, SpriteBatch spriteBatch, ImGuiRenderer gui, RenderTargetDescriber renderTargetDescriber, SceneSelector sceneSelector, EntityController entityController, CameraController cameraController, Editors editors, IList <IMenu> menus, EntityWindow entityWindow, NetWindow netWindow, KeyboardInput keyboardInput, MouseInput mouseInput)
 {
     this.Gui                   = gui;
     this.KeyboardInput         = keyboardInput;
     this.MouseInput            = mouseInput;
     this.GameLoop              = game;
     this.SpriteBatch           = spriteBatch;
     this.CameraController      = cameraController;
     this.RenderTargetDescriber = renderTargetDescriber;
     this.SceneSelector         = sceneSelector;
     this.EntityController      = entityController;
     this.Menus                 = menus;
     this.EntityWindow          = entityWindow;
     this.NetWindow             = netWindow;
     this.Editors               = editors;
 }
Esempio n. 37
0
        public override bool HandleMouseInput(MouseInput mi)
        {
            if (mi.Event == MouseInputEvent.Scroll && mi.Modifiers.HasModifier(Game.Settings.Game.ZoomModifier))
            {
                worldRenderer.Viewport.AdjustZoom(mi.Delta.Y * Game.Settings.Game.ZoomSpeed);
                return(true);
            }

            var gs           = Game.Settings.Game;
            var scrollButton = gs.UseClassicMouseStyle ^ gs.UseAlternateScrollButton ? MouseButton.Right : MouseButton.Middle;
            var scrollType   = mi.Button.HasFlag(scrollButton) ? gs.MouseScroll : MouseScrollType.Disabled;

            if (scrollType == MouseScrollType.Disabled)
            {
                return(IsJoystickScrolling || isStandardScrolling);
            }

            if (scrollType == MouseScrollType.Standard || scrollType == MouseScrollType.Inverted)
            {
                if (mi.Event == MouseInputEvent.Down && !isStandardScrolling)
                {
                    if (!TakeMouseFocus(mi))
                    {
                        return(false);
                    }

                    standardScrollStart = mi.Location;
                }
                else if (mi.Event == MouseInputEvent.Move && (isStandardScrolling ||
                                                              (standardScrollStart.HasValue && ((standardScrollStart.Value - mi.Location).Length > Game.Settings.Game.MouseScrollDeadzone))))
                {
                    isStandardScrolling = true;
                    var d = scrollType == MouseScrollType.Inverted ? -1 : 1;
                    worldRenderer.Viewport.Scroll((Viewport.LastMousePos - mi.Location) * d, false);
                    return(true);
                }
                else if (mi.Event == MouseInputEvent.Up)
                {
                    var wasStandardScrolling = isStandardScrolling;
                    isStandardScrolling = false;
                    standardScrollStart = null;
                    YieldMouseFocus(mi);

                    if (wasStandardScrolling)
                    {
                        return(true);
                    }
                }
            }

            // Tiberian Sun style click-and-drag scrolling
            if (scrollType == MouseScrollType.Joystick)
            {
                if (mi.Event == MouseInputEvent.Down)
                {
                    if (!TakeMouseFocus(mi))
                    {
                        return(false);
                    }

                    joystickScrollStart = mi.Location;
                }

                if (mi.Event == MouseInputEvent.Up)
                {
                    var wasJoystickScrolling = IsJoystickScrolling;

                    joystickScrollStart = joystickScrollEnd = null;
                    YieldMouseFocus(mi);

                    if (wasJoystickScrolling)
                    {
                        return(true);
                    }
                }

                if (mi.Event == MouseInputEvent.Move)
                {
                    if (!joystickScrollStart.HasValue)
                    {
                        joystickScrollStart = mi.Location;
                    }

                    joystickScrollEnd = mi.Location;
                }
            }

            return(IsJoystickScrolling || isStandardScrolling);
        }
Esempio n. 38
0
 public IEnumerable <FrozenActor> FrozenActorsAtMouse(Player viewer, MouseInput mi)
 {
     return(FrozenActorsAtMouse(viewer, worldRenderer.Viewport.ViewToWorldPx(mi.Location)));
 }
 public override bool InputOverridesSelection(World world, int2 xy, MouseInput mi)
 {
     return(true);
 }
        public override IEnumerable <Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
        {
            if (mi.Button != Game.Settings.Game.MouseButtonPreference.Action)
            {
                world.CancelInputMode();
            }
            else
            {
                var technician = this.technicians.OrderBy(e => (e.CenterPosition - world.Map.CenterOfCell(cell)).Length).FirstOrDefault();

                if (technician == null)
                {
                    yield break;
                }

                var actor = world.ActorMap.GetActorsAt(cell).FirstOrDefault(a => TechnicianUtils.CanEnter(technician, a));

                if (actor == null)
                {
                    yield break;
                }

                yield return(new(TechnicianEnterOrderTargeter.Id, technician, Target.FromActor(actor), true));
            }
        }
 public string GetCursor(World world, CPos xy, MouseInput mi)
 {
     return("default");
 }
Esempio n. 42
0
 public override bool YieldMouseFocus(MouseInput mi)
 {
     joystickScrollStart = joystickScrollEnd = null;
     return(base.YieldMouseFocus(mi));
 }
Esempio n. 43
0
 protected override IEnumerable <Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     world.CancelInputMode();
     if (mi.Button == expectedButton && IsValidTarget(world, cell))
     {
         yield return new Order(order, manager.Self, Target.FromCell(world, cell), false)
                {
                    SuppressVisualFeedback = true
                }
     }
     ;
 }
            protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
            {
                var powerInfo = (ChronoshiftPowerInfo)power.Info;

                return(IsValidTarget(cell) ? powerInfo.TargetCursor : powerInfo.TargetBlockedCursor);
            }
Esempio n. 45
0
        public static void SelectSpawnPoint(OrderManager orderManager, MapPreviewWidget mapPreview, MapPreview preview, MouseInput mi)
        {
            if (mi.Button != MouseButton.Left)
            {
                return;
            }

            if (!orderManager.LocalClient.IsObserver && orderManager.LocalClient.State == Session.ClientState.Ready)
            {
                return;
            }

            var spawnSize     = ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed").Size.XY;
            var selectedSpawn = preview.SpawnPoints
                                .Select((sp, i) => Pair.New(mapPreview.ConvertToPreview(sp, preview.GridType), i))
                                .Where(a => ((a.First - mi.Location).ToFloat2() / spawnSize * 2).LengthSquared <= 1)
                                .Select(a => a.Second + 1)
                                .FirstOrDefault();

            var locals       = orderManager.LobbyInfo.Clients.Where(c => c.Index == orderManager.LocalClient.Index || (Game.IsHost && c.Bot != null));
            var playerToMove = locals.FirstOrDefault(c => ((selectedSpawn == 0) ^ (c.SpawnPoint == 0) && !c.IsObserver));

            SetSpawnPoint(orderManager, playerToMove, selectedSpawn);
        }
 protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     return(((ChronoshiftPowerInfo)power.Info).SelectionCursor);
 }
Esempio n. 47
0
        }   // end of c'tor

        public void Update(Camera camera)
        {
            if (gettingFeeds)
            {
                msNewsFeed.Update();
                if (msNewsFeed.CurrentState == NewsFeeds.OpState.Failed)
                {
                    newsScroller.Clear();
                    FeedMs item = new FeedMs(FeedSize, "Failed to get news feed...", TitleFont, DateFont, BodyFont);
                    newsScroller.AddItem(item);
                    gettingFeeds       = false;
                    newsScroller.Dirty = true;
                }
                else if (msNewsFeed.CurrentState == NewsFeeds.OpState.Retrieving)
                {
                    newsScroller.Clear();
                    FeedMs item = new FeedMs(FeedSize, "Updating news...", TitleFont, DateFont, BodyFont);
                    newsScroller.AddItem(item);
                    //gettingFeeds = false;
                    newsScroller.Dirty = true;
                }
                else if (msNewsFeed.CurrentState == NewsFeeds.OpState.Retrieved)
                {
                    try
                    {
                        // Done getting Tweets
                        newsScroller.Clear();
                        List <FeedMs> feedList = msNewsFeed.GetFeedList(
                            (int)(FeedSize.X - newsScroller.ScrollBoxSize.X), TitleFont, DateFont, BodyFont);
                        if (feedList != null)
                        {
                            foreach (FeedMs newsItem in feedList)
                            {
                                newsScroller.AddItem(newsItem);
                            }
                        }
                        newsScroller.ResizeItemWidths();
                        gettingFeeds       = false;
                        newsScroller.Dirty = true;
                    }
                    catch
                    {
                        newsScroller.Clear();
                        FeedMs item = new FeedMs(FeedSize, "Error getting news feed...", TitleFont, DateFont, BodyFont);
                        newsScroller.AddItem(item);
                        gettingFeeds       = false;
                        newsScroller.Dirty = true;
                    }
                }
            }

            Vector2 pureMouseHit = new Vector2(MouseInput.Position.X, MouseInput.Position.Y);

            if (moreLessHitBox.Contains(pureMouseHit) && MouseInput.Left.WasReleased)
            {
                expanded = !expanded;
            }

            //check touch hit
            TouchContact touch = TouchInput.GetOldestTouch();

            if (TouchInput.WasLastReleased && moreLessHitBox.Contains(touch.position))
            {
                expanded = !expanded;
            }

            // Even if not active we need to refresh the rendertarget.
            newsScroller.RefreshRT();

            if (Active)
            {
                newsScroller.Update(camera);

                if (camera == null)
                {
                    camera = new PerspectiveUICamera();
                }

                if (GamePadInput.ActiveMode == GamePadInput.InputMode.KeyboardMouse)
                {
                    Vector2 hit = MouseInput.GetAspectRatioAdjustedPosition(camera, useOverscanForHitTesting);
                    pureMouseHit = new Vector2(MouseInput.Position.X, MouseInput.Position.Y);
                    if (!IsInScrollwindow(pureMouseHit))
                    {
                        // Don't Deactivate here just because the mouse cursor has left the bounds of the scroll window.
                        // We should only deactivate if ComboRight is pressed.
                        //Deactivate();

                        // But if we're out of bounds and the used clicks, then Deactivate()
                        if (MouseInput.Left.WasPressed)
                        {
                            Deactivate();
                        }
                    }
                    else if (MouseInput.PrevPosition != MouseInput.Position)
                    {
                        newsScroller.Activate();
                    }

                    if (true) //newsScroller.IsFocused)
                    {
                        if (Actions.ComboUp.WasPressedOrRepeat)
                        {
                            newsScroller.FocusPrev();
                        }
                        else if (Actions.ComboDown.WasPressedOrRepeat)
                        {
                            newsScroller.FocusNext();
                        }
                        else if (Actions.ComboRight.WasPressed)
                        {
                            Deactivate();
                        }
                        if (Actions.ZoomIn.WasPressedOrRepeat)
                        {
                            newsScroller.FocusPrevItem();
                        }
                        else if (Actions.ZoomOut.WasPressedOrRepeat)
                        {
                            newsScroller.FocusNextItem();
                        }
                    }

                    if (Actions.ComboLeft.WasPressed)
                    {
                        newsScroller.Activate();
                    }
                }
                else if (GamePadInput.ActiveMode == GamePadInput.InputMode.GamePad)
                {
                    // Ignore game pad input for news feed.  This allows it to stay open
                    // even while the main menu is active.
                    // HandleGamepadInput();
                }
            } // end if active.
        }     // end of Update()
Esempio n. 48
0
 protected override IEnumerable <Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     world.CancelInputMode();
     if (mi.Button == MouseButton.Left && power.UnitsInRange(cell).Any())
     {
         yield return new Order(order, manager.Self, Target.FromCell(world, cell), false)
                {
                    SuppressVisualFeedback = true
                }
     }
     ;
 }
            protected override IEnumerable <Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
            {
                if (mi.Button == MouseButton.Right)
                {
                    world.CancelInputMode();
                    yield break;
                }

                var ret = OrderInner(cell).FirstOrDefault();

                if (ret == null)
                {
                    yield break;
                }

                world.CancelInputMode();
                yield return(ret);
            }
Esempio n. 50
0
 public override bool HandleMouseInput(MouseInput mi)
 {
     return(!ClickThrough);
 }
            protected override IEnumerable <Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
            {
                world.CancelInputMode();
                if (mi.Button == MouseButton.Left)
                {
                    world.OrderGenerator = new SelectDestination(world, order, manager, power, cell);
                }

                yield break;
            }
Esempio n. 52
0
        public void PumpInput(Sdl2PlatformWindow device, IInputHandler inputHandler, int2?lockedMousePosition)
        {
            var mods = MakeModifiers((int)SDL.SDL_GetModState());

            inputHandler.ModifierKeys(mods);
            MouseInput?pendingMotion = null;

            while (SDL.SDL_PollEvent(out var e) != 0)
            {
                switch (e.type)
                {
                case SDL.SDL_EventType.SDL_QUIT:
                    // On macOS, we'd like to restrict Cmd + Q from suddenly exiting the game.
                    if (Platform.CurrentPlatform != PlatformType.OSX || !mods.HasModifier(Modifiers.Meta))
                    {
                        Game.Exit();
                    }

                    break;

                case SDL.SDL_EventType.SDL_WINDOWEVENT:
                {
                    switch (e.window.windowEvent)
                    {
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
                        device.HasInputFocus = false;
                        break;

                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                        device.HasInputFocus = true;
                        break;

                    // Triggered when moving between displays with different DPI settings
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED:
                        device.WindowSizeChanged();
                        break;

                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_HIDDEN:
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_MINIMIZED:
                        device.IsSuspended = true;
                        break;

                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_EXPOSED:
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SHOWN:
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_MAXIMIZED:
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_RESTORED:
                        device.IsSuspended = false;
                        break;
                    }

                    break;
                }

                case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
                {
                    if (pendingMotion != null)
                    {
                        inputHandler.OnMouseInput(pendingMotion.Value);
                        pendingMotion = null;
                    }

                    var button = MakeButton(e.button.button);
                    lastButtonBits |= button;

                    var input = lockedMousePosition ?? new int2(e.button.x, e.button.y);
                    var pos   = EventPosition(device, input.X, input.Y);

                    inputHandler.OnMouseInput(new MouseInput(
                                                  MouseInputEvent.Down, button, pos, int2.Zero, mods,
                                                  MultiTapDetection.DetectFromMouse(e.button.button, pos)));

                    break;
                }

                case SDL.SDL_EventType.SDL_MOUSEBUTTONUP:
                {
                    if (pendingMotion != null)
                    {
                        inputHandler.OnMouseInput(pendingMotion.Value);
                        pendingMotion = null;
                    }

                    var button = MakeButton(e.button.button);
                    lastButtonBits &= ~button;

                    var input = lockedMousePosition ?? new int2(e.button.x, e.button.y);
                    var pos   = EventPosition(device, input.X, input.Y);

                    inputHandler.OnMouseInput(new MouseInput(
                                                  MouseInputEvent.Up, button, pos, int2.Zero, mods,
                                                  MultiTapDetection.InfoFromMouse(e.button.button)));

                    break;
                }

                case SDL.SDL_EventType.SDL_MOUSEMOTION:
                {
                    var mousePos = new int2(e.motion.x, e.motion.y);
                    var input    = lockedMousePosition ?? mousePos;
                    var pos      = EventPosition(device, input.X, input.Y);

                    var delta = lockedMousePosition == null
                                                                ? EventPosition(device, e.motion.xrel, e.motion.yrel)
                                                                : mousePos - lockedMousePosition.Value;

                    pendingMotion = new MouseInput(
                        MouseInputEvent.Move, lastButtonBits, pos, delta, mods, 0);

                    break;
                }

                case SDL.SDL_EventType.SDL_MOUSEWHEEL:
                {
                    SDL.SDL_GetMouseState(out var x, out var y);

                    var pos = EventPosition(device, x, y);
                    inputHandler.OnMouseInput(new MouseInput(MouseInputEvent.Scroll, MouseButton.None, pos, new int2(0, e.wheel.y), mods, 0));

                    break;
                }

                case SDL.SDL_EventType.SDL_TEXTINPUT:
                {
                    var rawBytes = new byte[SDL.SDL_TEXTINPUTEVENT_TEXT_SIZE];
                    unsafe { Marshal.Copy((IntPtr)e.text.text, rawBytes, 0, SDL.SDL_TEXTINPUTEVENT_TEXT_SIZE); }
                    inputHandler.OnTextInput(Encoding.UTF8.GetString(rawBytes, 0, Array.IndexOf(rawBytes, (byte)0)));
                    break;
                }

                case SDL.SDL_EventType.SDL_KEYDOWN:
                case SDL.SDL_EventType.SDL_KEYUP:
                {
                    var keyCode = (Keycode)e.key.keysym.sym;
                    var type    = e.type == SDL.SDL_EventType.SDL_KEYDOWN ?
                                  KeyInputEvent.Down : KeyInputEvent.Up;

                    var tapCount = e.type == SDL.SDL_EventType.SDL_KEYDOWN ?
                                   MultiTapDetection.DetectFromKeyboard(keyCode, mods) :
                                   MultiTapDetection.InfoFromKeyboard(keyCode, mods);

                    var keyEvent = new KeyInput
                    {
                        Event         = type,
                        Key           = keyCode,
                        Modifiers     = mods,
                        UnicodeChar   = (char)e.key.keysym.sym,
                        MultiTapCount = tapCount,
                        IsRepeat      = e.key.repeat != 0
                    };

                    // Special case workaround for windows users
                    if (e.key.keysym.sym == SDL.SDL_Keycode.SDLK_F4 && mods.HasModifier(Modifiers.Alt) &&
                        Platform.CurrentPlatform == PlatformType.Windows)
                    {
                        Game.Exit();
                    }
                    else
                    {
                        inputHandler.OnKeyInput(keyEvent);
                    }

                    break;
                }
                }
            }

            if (pendingMotion != null)
            {
                inputHandler.OnMouseInput(pendingMotion.Value);
                pendingMotion = null;
            }
        }
 public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     return("default");
 }
Esempio n. 54
0
 public IEnumerable <ActorBoundsPair> ActorsAtMouse(MouseInput mi)
 {
     return(ActorsAtMouse(worldRenderer.Viewport.ViewToWorldPx(mi.Location)));
 }
Esempio n. 55
0
        public bool HandleMouseInput(MouseInput mi)
        {
            // Exclusively uses mouse wheel and right mouse buttons, but nothing else
            // Mouse move events are important for tooltips, so we always allow these through
            if ((mi.Button != MouseButton.Right && mi.Event != MouseInputEvent.Move && mi.Event != MouseInputEvent.Scroll) ||
                mi.Event == MouseInputEvent.Down)
            {
                return(false);
            }

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

            var underCursor = editorLayer.PreviewsAt(worldPixel).MinByOrDefault(CalculateActorSelectionPriority);

            var          mapResources = world.Map.Resources;
            ResourceType type;

            if (underCursor != null)
            {
                editorWidget.SetTooltip(underCursor.Tooltip);
            }
            else if (mapResources.Contains(cell) && resources.TryGetValue(mapResources[cell].Type, out type))
            {
                editorWidget.SetTooltip(type.Info.Type);
            }
            else
            {
                editorWidget.SetTooltip(null);
            }

            // Finished with mouse move events, so let them bubble up the widget tree
            if (mi.Event == MouseInputEvent.Move)
            {
                return(false);
            }

            if (mi.Button == MouseButton.Right)
            {
                editorWidget.SetTooltip(null);

                if (underCursor != null)
                {
                    editorLayer.Remove(underCursor);
                }

                if (mapResources.Contains(cell) && mapResources[cell].Type != 0)
                {
                    mapResources[cell] = new ResourceTile();
                }
            }
            else if (mi.Event == MouseInputEvent.Scroll)
            {
                if (underCursor != null)
                {
                    // Test case / demonstration of how to edit an existing actor
                    var facing = underCursor.Init <FacingInit>();
                    if (facing != null)
                    {
                        underCursor.ReplaceInit(new FacingInit((facing.Value(world) + mi.ScrollDelta) % 256));
                    }
                    else if (underCursor.Info.HasTraitInfo <UsesInit <FacingInit> >())
                    {
                        underCursor.ReplaceInit(new FacingInit(mi.ScrollDelta));
                    }

                    var turret = underCursor.Init <TurretFacingInit>();
                    if (turret != null)
                    {
                        underCursor.ReplaceInit(new TurretFacingInit((turret.Value(world) + mi.ScrollDelta) % 256));
                    }
                    else if (underCursor.Info.HasTraitInfo <UsesInit <TurretFacingInit> >())
                    {
                        underCursor.ReplaceInit(new TurretFacingInit(mi.ScrollDelta));
                    }
                }
            }

            return(true);
        }
Esempio n. 56
0
        protected override IEnumerable <Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
        {
            if (mi.Button == Game.Settings.Game.MouseButtonPreference.Cancel)
            {
                world.CancelInputMode();
                yield break;
            }

            if (self.IsInWorld && self.Location != cell &&
                self.Trait <PortableChrono>().CanTeleport&& self.Owner.Shroud.IsExplored(cell))
            {
                world.CancelInputMode();
                yield return(new Order("PortableChronoTeleport", self, Target.FromCell(world, cell), mi.Modifiers.HasModifier(Modifiers.Shift)));
            }
        }
Esempio n. 57
0
 protected virtual bool HandleRightClick(MouseInput mi)
 {
     return(false);
 }
Esempio n. 58
0
 public string GetCursor(World world, CPos xy, MouseInput mi)
 {
     return("chrono-select");
 }
        IEnumerable <Order> InnerOrder(World world, CPos cell, MouseInput mi)
        {
            if (world.Paused)
            {
                yield break;
            }

            var owner = queue.Actor.Owner;
            var ai    = variants[variant].ActorInfo;
            var bi    = variants[variant].BuildingInfo;

            if (mi.Button == MouseButton.Left)
            {
                var orderType = "PlaceBuilding";
                var topLeft   = TopLeft;

                var plugInfo = ai.TraitInfoOrDefault <PlugInfo>();
                if (plugInfo != null)
                {
                    orderType = "PlacePlug";
                    if (!AcceptsPlug(topLeft, plugInfo))
                    {
                        Game.Sound.PlayNotification(world.Map.Rules, owner, "Speech", placeBuildingInfo.CannotPlaceNotification, owner.Faction.InternalName);
                        yield break;
                    }
                }
                else
                {
                    if (!world.CanPlaceBuilding(topLeft, ai, bi, null) ||
                        !bi.IsCloseEnoughToBase(world, owner, ai, topLeft))
                    {
                        foreach (var order in ClearBlockersOrders(world, topLeft))
                        {
                            yield return(order);
                        }

                        Game.Sound.PlayNotification(world.Map.Rules, owner, "Speech", placeBuildingInfo.CannotPlaceNotification, owner.Faction.InternalName);
                        yield break;
                    }

                    if (ai.HasTraitInfo <LineBuildInfo>() && !mi.Modifiers.HasModifier(Modifiers.Shift))
                    {
                        orderType = "LineBuild";
                    }
                }

                yield return(new Order(orderType, owner.PlayerActor, Target.FromCell(world, topLeft), false)
                {
                    // Building to place
                    TargetString = variants[0].ActorInfo.Name,

                    // Actor ID to associate with placement may be quite large, so it gets its own uint
                    ExtraData = queue.Actor.ActorID,

                    // Actor variant will always be small enough to safely pack in a CPos
                    ExtraLocation = new CPos(variant, 0),

                    SuppressVisualFeedback = true
                });
            }
        }
 string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
 {
     return("default");
 }