示例#1
0
 void Awake()
 {
     if(_instance != null)
     {
         print("ERRROR: Deleting WorldRenderer(singleton) instance duplicate");
         Destroy(gameObject);
     }
     else
         _instance = this;
 }
示例#2
0
 public void RenderDebugGeometry(WorldRenderer wr)
 {
 }
示例#3
0
 public IFinalizedRenderable PrepareRender(WorldRenderer wr)
 {
     return(this);
 }
示例#4
0
 protected override IEnumerable <IRenderable> RenderAnnotations(WorldRenderer wr, World world)
 {
     yield break;
 }
示例#5
0
 IEnumerable <IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
 {
     return(RangeCircleRenderables(self, wr));
 }
示例#6
0
 public PathFinder(MapManager mapManager, WorldRenderer worldRenderer)
 {
     this.mapManager    = mapManager;
     this.worldRenderer = worldRenderer;
 }
示例#7
0
        public ProductionPaletteWidget(ModData modData, OrderManager orderManager, World world, WorldRenderer worldRenderer)
        {
            this.modData       = modData;
            this.orderManager  = orderManager;
            World              = world;
            this.worldRenderer = worldRenderer;
            GetTooltipIcon     = () => TooltipIcon;
            tooltipContainer   = Exts.Lazy(() =>
                                           Ui.Root.Get <TooltipContainerWidget>(TooltipContainer));

            cantBuild = new Animation(world, NotBuildableAnimation);
            cantBuild.PlayFetchIndex(NotBuildableSequence, () => 0);
            clock = new Animation(world, ClockAnimation);

            overlayFont = Game.Renderer.Fonts["TinyBold"];
            Game.Renderer.Fonts.TryGetValue("Symbols", out symbolFont);
        }
示例#8
0
        public void Render(WorldRenderer wr)
        {
            var screenWidth = wr.ScreenVector(new WVec(width, WDist.Zero, WDist.Zero))[0];

            Game.Renderer.WorldRgbaColorRenderer.DrawLine(offsets.Select(offset => wr.Screen3DPosition(offset)), screenWidth, color, false);
        }
示例#9
0
 public virtual IEnumerable <IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
 {
     yield break;
 }
示例#10
0
        static IEnumerable <Actor> SelectActorsOnScreen(World world, WorldRenderer wr, IEnumerable <string> selectionClasses, IEnumerable <Player> players)
        {
            var actors = world.ScreenMap.ActorsInMouseBox(wr.Viewport.TopLeft, wr.Viewport.BottomRight).Select(a => a.Actor);

            return(SelectActorsByOwnerAndSelectionClass(actors, players, selectionClasses));
        }
        public void InitPalette(WorldRenderer wr)
        {
            var remap = new ScaledPaletteRemap(info.Scale, info.Offset);

            wr.AddPalette(info.Name, new Palette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers);
        }
 public ActorPreviewInitializer(ActorInfo actor, WorldRenderer worldRenderer, TypeDictionary dict)
 {
     Actor         = actor;
     WorldRenderer = worldRenderer;
     this.dict     = dict;
 }
示例#13
0
 public void WorldLoaded(World w, WorldRenderer wr)
 {
     Fade(Info.Effect);
 }
示例#14
0
        public void WorldLoaded(World w, WorldRenderer wr)
        {
            var resources = w.WorldActor.TraitsImplementing <ResourceType>()
                            .ToDictionary(r => r.Info.ResourceType, r => r);

            // Build the sprite layer dictionary for rendering resources
            // All resources that have the same palette must also share a sheet and blend mode
            foreach (var r in resources)
            {
                var layer = spriteLayers.GetOrAdd(r.Value.Palette, pal =>
                {
                    var first = r.Value.Variants.First().Value.First();
                    return(new TerrainSpriteLayer(w, wr, first.Sheet, first.BlendMode, pal, wr.World.Type != WorldType.Editor));
                });

                // Validate that sprites are compatible with this layer
                var sheet = layer.Sheet;
                if (r.Value.Variants.Any(kv => kv.Value.Any(s => s.Sheet != sheet)))
                {
                    throw new InvalidDataException("Resource sprites span multiple sheets. Try loading their sequences earlier.");
                }

                var blendMode = layer.BlendMode;
                if (r.Value.Variants.Any(kv => kv.Value.Any(s => s.BlendMode != blendMode)))
                {
                    throw new InvalidDataException("Resource sprites specify different blend modes. "
                                                   + "Try using different palettes for resource types that use different blend modes.");
                }
            }

            foreach (var cell in w.Map.AllCells)
            {
                ResourceType t;
                if (!resources.TryGetValue(w.Map.Resources[cell].Type, out t))
                {
                    continue;
                }

                if (!AllowResourceAt(t, cell))
                {
                    continue;
                }

                Content[cell] = CreateResourceCell(t, cell);
            }

            foreach (var cell in w.Map.AllCells)
            {
                var type = Content[cell].Type;
                if (type != null)
                {
                    // Set initial density based on the number of neighboring resources
                    // Adjacent includes the current cell, so is always >= 1
                    var adjacent = GetAdjacentCellsWith(type, cell);
                    var density  = int2.Lerp(0, type.Info.MaxDensity, adjacent, 9);
                    var temp     = Content[cell];
                    temp.Density = Math.Max(density, 1);

                    // Initialize the RenderContent with the initial map state
                    // because the shroud may not be enabled.
                    RenderContent[cell] = Content[cell] = temp;
                    UpdateRenderedSprite(cell);
                }
            }
        }
示例#15
0
        public static void InitializeMod(string mod, Arguments args)
        {
            // Clear static state if we have switched mods
            LobbyInfoChanged       = () => { };
            ConnectionStateChanged = om => { };
            BeforeGameStart        = () => { };
            OnRemoteDirectConnect  = endpoint => { };
            delayedActions         = new ActionQueue();

            Ui.ResetAll();

            worldRenderer?.Dispose();
            worldRenderer = null;
            server?.Shutdown();
            OrderManager?.Dispose();

            if (ModData != null)
            {
                ModData.ModFiles.UnmountAll();
                ModData.Dispose();
            }

            ModData = null;

            if (mod == null)
            {
                throw new InvalidOperationException("Game.Mod argument missing.");
            }

            if (!Mods.ContainsKey(mod))
            {
                throw new InvalidOperationException("Unknown or invalid mod '{0}'.".F(mod));
            }

            Console.WriteLine("Loading mod: {0}", mod);

            Sound.StopVideo();

            ModData = new ModData(Mods[mod], Mods, true);

            LocalPlayerProfile = new LocalPlayerProfile(Path.Combine(Platform.SupportDir, Settings.Game.AuthProfile), ModData.Manifest.Get <PlayerDatabase>());

            if (!ModData.LoadScreen.BeforeLoad())
            {
                return;
            }

            using (new PerfTimer("LoadMaps"))
                ModData.MapCache.LoadMaps();

            ModData.InitializeLoaders(ModData.DefaultFileSystem);
            Renderer.InitializeFonts(ModData);

            var grid = ModData.Manifest.Contains <MapGrid>() ? ModData.Manifest.Get <MapGrid>() : null;

            Renderer.InitializeDepthBuffer(grid);

            Cursor?.Dispose();

            Cursor = new CursorManager(ModData.CursorProvider);

            PerfHistory.Items["render"].HasNormalTick           = false;
            PerfHistory.Items["batches"].HasNormalTick          = false;
            PerfHistory.Items["render_world"].HasNormalTick     = false;
            PerfHistory.Items["render_widgets"].HasNormalTick   = false;
            PerfHistory.Items["render_flip"].HasNormalTick      = false;
            PerfHistory.Items["terrain_lighting"].HasNormalTick = false;

            JoinLocal();

            try
            {
                discoverNat?.Wait();
            }
            catch (Exception e)
            {
                Console.WriteLine("NAT discovery failed: {0}", e.Message);
                Log.Write("nat", e.ToString());
            }

            ChromeMetrics.TryGet("ChatMessageColor", out chatMessageColor);
            ChromeMetrics.TryGet("SystemMessageColor", out systemMessageColor);
            if (!ChromeMetrics.TryGet("SystemMessageLabel", out systemMessageLabel))
            {
                systemMessageLabel = "Battlefield Control";
            }

            ModData.LoadScreen.StartGame(args);
        }
 public IEnumerable <IRenderable> Render(WorldRenderer wr, World world)
 {
     yield break;
 }
示例#17
0
 public IEnumerable <IRenderable> Render(Actor self, WorldRenderer wr)
 {
     yield return(trail);
 }
示例#18
0
        public ObserverStatsLogic(World world, ModData modData, WorldRenderer worldRenderer, Widget widget,
                                  Action onExit, ObserverStatsPanel activePanel, Dictionary <string, MiniYaml> logicArgs)
        {
            this.world         = world;
            this.worldRenderer = worldRenderer;

            MiniYaml yaml;

            string[] keyNames     = Enum.GetNames(typeof(ObserverStatsPanel));
            var      statsHotkeys = new HotkeyReference[keyNames.Length];

            for (var i = 0; i < keyNames.Length; i++)
            {
                statsHotkeys[i] = logicArgs.TryGetValue("Statistics" + keyNames[i] + "Key", out yaml) ? modData.Hotkeys[yaml.Value] : new HotkeyReference();
            }

            players = world.Players.Where(p => !p.NonCombatant);

            basicStatsHeaders            = widget.Get <ContainerWidget>("BASIC_STATS_HEADERS");
            economyStatsHeaders          = widget.Get <ContainerWidget>("ECONOMY_STATS_HEADERS");
            productionStatsHeaders       = widget.Get <ContainerWidget>("PRODUCTION_STATS_HEADERS");
            combatStatsHeaders           = widget.Get <ContainerWidget>("COMBAT_STATS_HEADERS");
            earnedThisMinuteGraphHeaders = widget.Get <ContainerWidget>("EARNED_THIS_MIN_GRAPH_HEADERS");

            playerStatsPanel        = widget.Get <ScrollPanelWidget>("PLAYER_STATS_PANEL");
            playerStatsPanel.Layout = new GridLayout(playerStatsPanel);

            basicPlayerTemplate           = playerStatsPanel.Get <ScrollItemWidget>("BASIC_PLAYER_TEMPLATE");
            economyPlayerTemplate         = playerStatsPanel.Get <ScrollItemWidget>("ECONOMY_PLAYER_TEMPLATE");
            productionPlayerTemplate      = playerStatsPanel.Get <ScrollItemWidget>("PRODUCTION_PLAYER_TEMPLATE");
            combatPlayerTemplate          = playerStatsPanel.Get <ScrollItemWidget>("COMBAT_PLAYER_TEMPLATE");
            earnedThisMinuteGraphTemplate = playerStatsPanel.Get <ContainerWidget>("EARNED_THIS_MIN_GRAPH_TEMPLATE");

            teamTemplate = playerStatsPanel.Get <ScrollItemWidget>("TEAM_TEMPLATE");

            var statsDropDown = widget.Get <DropDownButtonWidget>("STATS_DROPDOWN");
            Func <string, ContainerWidget, Action, StatsDropDownOption> createStatsOption = (title, headers, a) =>
            {
                return(new StatsDropDownOption
                {
                    Title = title,
                    IsSelected = () => headers.Visible,
                    OnClick = () =>
                    {
                        ClearStats();
                        statsDropDown.GetText = () => title;
                        a();
                    }
                });
            };

            var statsDropDownOptions = new StatsDropDownOption[]
            {
                createStatsOption("Basic", basicStatsHeaders, () => DisplayStats(BasicStats)),
                createStatsOption("Economy", economyStatsHeaders, () => DisplayStats(EconomyStats)),
                createStatsOption("Production", productionStatsHeaders, () => DisplayStats(ProductionStats)),
                createStatsOption("Combat", combatStatsHeaders, () => DisplayStats(CombatStats)),
                createStatsOption("Earnings (graph)", earnedThisMinuteGraphHeaders, () => EarnedThisMinuteGraph())
            };

            Func <StatsDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
            {
                var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick);
                item.Get <LabelWidget>("LABEL").GetText = () => option.Title;
                return(item);
            };

            statsDropDown.OnMouseDown = _ => statsDropDown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, statsDropDownOptions, setupItem);
            statsDropDownOptions[(int)activePanel].OnClick();

            var close = widget.GetOrNull <ButtonWidget>("CLOSE");

            if (close != null)
            {
                close.OnClick = () =>
                {
                    Ui.CloseWindow();
                    Ui.Root.RemoveChild(widget);
                    onExit();
                }
            }
            ;

            var keyListener = statsDropDown.Get <LogicKeyListenerWidget>("STATS_DROPDOWN_KEYHANDLER");

            keyListener.AddHandler(e =>
            {
                if (e.Event == KeyInputEvent.Down && !e.IsRepeat)
                {
                    for (var i = 0; i < statsHotkeys.Length; i++)
                    {
                        if (statsHotkeys[i].IsActivatedBy(e))
                        {
                            Game.Sound.PlayNotification(modData.DefaultRules, null, "Sounds", "ClickSound", null);
                            statsDropDownOptions[i].OnClick();
                            return(true);
                        }
                    }
                }

                return(false);
            });
        }

        void ClearStats()
        {
            playerStatsPanel.Children.Clear();
            basicStatsHeaders.Visible            = false;
            economyStatsHeaders.Visible          = false;
            productionStatsHeaders.Visible       = false;
            combatStatsHeaders.Visible           = false;
            earnedThisMinuteGraphHeaders.Visible = false;
        }

        void EarnedThisMinuteGraph()
        {
            earnedThisMinuteGraphHeaders.Visible = true;
            var template = earnedThisMinuteGraphTemplate.Clone();

            var graph = template.Get <LineGraphWidget>("EARNED_THIS_MIN_GRAPH");

            graph.GetSeries = () =>
                              players.Select(p => new LineGraphSeries(
                                                 p.PlayerName,
                                                 p.Color.RGB,
                                                 (p.PlayerActor.TraitOrDefault <PlayerStatistics>() ?? new PlayerStatistics(p.PlayerActor)).EarnedSamples.Select(s => (float)s)));

            playerStatsPanel.AddChild(template);
            playerStatsPanel.ScrollToTop();
        }

        void DisplayStats(Func <Player, ScrollItemWidget> createItem)
        {
            var teams = players.GroupBy(p => (world.LobbyInfo.ClientWithIndex(p.ClientIndex) ?? new Session.Client()).Team).OrderBy(g => g.Key);

            foreach (var t in teams)
            {
                var team = t;
                var tt   = ScrollItemWidget.Setup(teamTemplate, () => false, () => { });
                tt.IgnoreMouseOver = true;
                tt.Get <LabelWidget>("TEAM").GetText = () => team.Key == 0 ? "No Team" : "Team " + team.Key;
                playerStatsPanel.AddChild(tt);
                foreach (var p in team)
                {
                    var player = p;
                    playerStatsPanel.AddChild(createItem(player));
                }
            }
        }

        ScrollItemWidget CombatStats(Player player)
        {
            combatStatsHeaders.Visible = true;
            var template = SetupPlayerScrollItemWidget(combatPlayerTemplate, player);

            LobbyUtils.AddPlayerFlagAndName(template, player);

            var stats = player.PlayerActor.TraitOrDefault <PlayerStatistics>();

            if (stats == null)
            {
                return(template);
            }
            template.Get <LabelWidget>("ASSETS_DESTROYED").GetText = () => "$" + stats.KillsCost;
            template.Get <LabelWidget>("ASSETS_LOST").GetText      = () => "$" + stats.DeathsCost;
            template.Get <LabelWidget>("UNITS_KILLED").GetText     = () => stats.UnitsKilled.ToString();
            template.Get <LabelWidget>("UNITS_DEAD").GetText       = () => stats.UnitsDead.ToString();
            template.Get <LabelWidget>("BUILDINGS_KILLED").GetText = () => stats.BuildingsKilled.ToString();
            template.Get <LabelWidget>("BUILDINGS_DEAD").GetText   = () => stats.BuildingsDead.ToString();

            return(template);
        }

        ScrollItemWidget ProductionStats(Player player)
        {
            productionStatsHeaders.Visible = true;
            var template = SetupPlayerScrollItemWidget(productionPlayerTemplate, player);

            LobbyUtils.AddPlayerFlagAndName(template, player);

            template.Get <ObserverProductionIconsWidget>("PRODUCTION_ICONS").GetPlayer      = () => player;
            template.Get <ObserverSupportPowerIconsWidget>("SUPPORT_POWER_ICONS").GetPlayer = () => player;
            template.IgnoreChildMouseOver = false;

            return(template);
        }

        ScrollItemWidget EconomyStats(Player player)
        {
            economyStatsHeaders.Visible = true;
            var template = SetupPlayerScrollItemWidget(economyPlayerTemplate, player);

            LobbyUtils.AddPlayerFlagAndName(template, player);

            var res   = player.PlayerActor.Trait <PlayerResources>();
            var stats = player.PlayerActor.TraitOrDefault <PlayerStatistics>();

            if (stats == null)
            {
                return(template);
            }

            template.Get <LabelWidget>("CASH").GetText            = () => "$" + (res.Cash + res.Resources);
            template.Get <LabelWidget>("EARNED_MIN").GetText      = () => AverageEarnedPerMinute(res.Earned);
            template.Get <LabelWidget>("EARNED_THIS_MIN").GetText = () => "$" + stats.EarnedThisMinute;
            template.Get <LabelWidget>("EARNED").GetText          = () => "$" + res.Earned;
            template.Get <LabelWidget>("SPENT").GetText           = () => "$" + res.Spent;

            var assets = template.Get <LabelWidget>("ASSETS");

            assets.GetText = () => "$" + world.ActorsHavingTrait <Valued>()
                             .Where(a => a.Owner == player && !a.IsDead)
                             .Sum(a => a.Info.TraitInfos <ValuedInfo>().First().Cost);

            var harvesters = template.Get <LabelWidget>("HARVESTERS");

            harvesters.GetText = () => world.ActorsHavingTrait <Harvester>().Count(a => a.Owner == player && !a.IsDead).ToString();

            return(template);
        }

        ScrollItemWidget BasicStats(Player player)
        {
            basicStatsHeaders.Visible = true;
            var template = SetupPlayerScrollItemWidget(basicPlayerTemplate, player);

            LobbyUtils.AddPlayerFlagAndName(template, player);

            var res = player.PlayerActor.Trait <PlayerResources>();

            template.Get <LabelWidget>("CASH").GetText       = () => "$" + (res.Cash + res.Resources);
            template.Get <LabelWidget>("EARNED_MIN").GetText = () => AverageEarnedPerMinute(res.Earned);

            var powerRes = player.PlayerActor.Trait <PowerManager>();
            var power    = template.Get <LabelWidget>("POWER");

            power.GetText  = () => powerRes.PowerDrained + "/" + powerRes.PowerProvided;
            power.GetColor = () => GetPowerColor(powerRes.PowerState);

            var stats = player.PlayerActor.TraitOrDefault <PlayerStatistics>();

            if (stats == null)
            {
                return(template);
            }
            template.Get <LabelWidget>("KILLS").GetText            = () => (stats.UnitsKilled + stats.BuildingsKilled).ToString();
            template.Get <LabelWidget>("DEATHS").GetText           = () => (stats.UnitsDead + stats.BuildingsDead).ToString();
            template.Get <LabelWidget>("ASSETS_DESTROYED").GetText = () => "$" + stats.KillsCost;
            template.Get <LabelWidget>("ASSETS_LOST").GetText      = () => "$" + stats.DeathsCost;
            template.Get <LabelWidget>("EXPERIENCE").GetText       = () => stats.Experience.ToString();
            template.Get <LabelWidget>("ACTIONS_MIN").GetText      = () => AverageOrdersPerMinute(stats.OrderCount);

            return(template);
        }

        ScrollItemWidget SetupPlayerScrollItemWidget(ScrollItemWidget template, Player player)
        {
            return(ScrollItemWidget.Setup(template, () => false, () =>
            {
                var playerBase = world.ActorsHavingTrait <BaseBuilding>().FirstOrDefault(a => !a.IsDead && a.Owner == player);
                if (playerBase != null)
                {
                    worldRenderer.Viewport.Center(playerBase.CenterPosition);
                }
            }));
        }
示例#19
0
 public SupportPowerBinWidget(World world, WorldRenderer worldRenderer)
 {
     this.world         = world;
     this.worldRenderer = worldRenderer;
 }
示例#20
0
        public static void InitializeWithMod(string mod, string replay)
        {
            // Clear static state if we have switched mods
            LobbyInfoChanged       = () => { };
            AddChatLine            = (a, b, c) => { };
            ConnectionStateChanged = om => { };
            BeforeGameStart        = () => { };
            Ui.ResetAll();

            worldRenderer = null;
            if (server != null)
            {
                server.Shutdown();
            }
            if (orderManager != null)
            {
                orderManager.Dispose();
            }

            // Fall back to default if the mod doesn't exist
            if (!ModMetadata.AllMods.ContainsKey(mod))
            {
                mod = new GameSettings().Mod;
            }

            Console.WriteLine("Loading mod: {0}", mod);
            Settings.Game.Mod = mod;

            Sound.StopMusic();
            Sound.StopVideo();
            Sound.Initialize();

            modData = new ModData(mod);
            Renderer.InitializeFonts(modData.Manifest);
            modData.InitializeLoaders();
            using (new PerfTimer("LoadMaps"))
                modData.MapCache.LoadMaps();

            PerfHistory.items["render"].hasNormalTick         = false;
            PerfHistory.items["batches"].hasNormalTick        = false;
            PerfHistory.items["render_widgets"].hasNormalTick = false;
            PerfHistory.items["render_flip"].hasNormalTick    = false;

            JoinLocal();

            if (Settings.Server.Dedicated)
            {
                while (true)
                {
                    Settings.Server.Map = WidgetUtils.ChooseInitialMap(Settings.Server.Map);
                    Settings.Save();
                    CreateServer(new ServerSettings(Settings.Server));
                    while (true)
                    {
                        System.Threading.Thread.Sleep(100);

                        if (server.State == Server.ServerState.GameStarted && server.Conns.Count < 1)
                        {
                            Console.WriteLine("No one is playing, shutting down...");
                            server.Shutdown();
                            break;
                        }
                    }

                    if (Settings.Server.DedicatedLoop)
                    {
                        Console.WriteLine("Starting a new server instance...");
                        modData.MapCache.LoadMaps();
                        continue;
                    }

                    break;
                }

                Environment.Exit(0);
            }
            else
            {
                modData.LoadScreen.StartGame();
                Settings.Save();
                if (!string.IsNullOrEmpty(replay))
                {
                    Game.JoinReplay(replay);
                }
            }
        }
示例#21
0
 public IEnumerable <IRenderable> Render(WorldRenderer wr)
 {
     return(anim.Render(pos, wr.Palette(palette)));
 }
示例#22
0
        public EditorActorBrush(EditorViewportControllerWidget editorWidget, ActorInfo actor, PlayerReference owner, WorldRenderer wr)
        {
            this.editorWidget = editorWidget;
            worldRenderer     = wr;
            world             = wr.World;
            editorLayer       = world.WorldActor.Trait <EditorActorLayer>();

            Actor      = actor;
            this.owner = owner;

            preview           = editorWidget.Get <ActorPreviewWidget>("DRAG_ACTOR_PREVIEW");
            preview.GetScale  = () => worldRenderer.Viewport.Zoom;
            preview.IsVisible = () => editorWidget.CurrentBrush == this;

            var buildingInfo = actor.Traits.GetOrDefault <BuildingInfo>();

            if (buildingInfo != null)
            {
                locationOffset = -FootprintUtils.AdjustForBuildingSize(buildingInfo);
                previewOffset  = FootprintUtils.CenterOffset(world, buildingInfo);
            }

            var td = new TypeDictionary();

            td.Add(new FacingInit(facing));
            td.Add(new TurretFacingInit(facing));
            td.Add(new OwnerInit(owner.Name));
            td.Add(new FactionInit(owner.Faction));
            preview.SetPreview(actor, td);

            var ios = actor.Traits.GetOrDefault <IOccupySpaceInfo>();

            if (ios != null)
            {
                footprint = ios.OccupiedCells(actor, CPos.Zero)
                            .Select(c => c.Key - CPos.Zero)
                            .ToArray();
            }
            else
            {
                footprint = new CVec[0];
            }

            // The preview widget may be rendered by the higher-level code before it is ticked.
            // Force a manual tick to ensure the bounds are set correctly for this first draw.
            Tick();
        }
示例#23
0
 public WorldCommandWidget(World world, WorldRenderer worldRenderer)
 {
     this.world         = world;
     this.worldRenderer = worldRenderer;
     radarPings         = world.WorldActor.TraitOrDefault <RadarPings>();
 }
示例#24
0
 protected override IEnumerable <IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
 {
     yield break;
 }
示例#25
0
 public IEnumerable <IRenderable> Render(WorldRenderer wr)
 {
     return(SpriteRenderable.None);
 }
示例#26
0
 public Rectangle ScreenBounds(WorldRenderer wr)
 {
     return(Rectangle.Empty);
 }
示例#27
0
 public void CachePalette(WorldRenderer wr, Player owner)
 {
     PaletteReference = wr.Palette(IsPlayerPalette ? Palette + owner.InternalName : Palette);
 }
示例#28
0
文件: GpsDot.cs 项目: cjshmyr/OpenRA
 IEnumerable <IRenderable> IEffect.Render(WorldRenderer wr)
 {
     return(SpriteRenderable.None);
 }
示例#29
0
 public IEnumerable <IRenderable> Render(WorldRenderer r)
 {
     yield break;
 }
示例#30
0
 void Awake()
 {
     if (WRENDERER == null) {
         WRENDERER = this;
     }
     else if (WRENDERER != this) {
         Destroy(gameObject);
     }
 }
示例#31
0
        public ScriptContext(World world, WorldRenderer worldRenderer,
                             IEnumerable <string> scripts)
        {
            runtime = new MemoryConstrainedLuaRuntime();

            Log.AddChannel("lua", "lua.log");

            World              = world;
            WorldRenderer      = worldRenderer;
            knownActorCommands = Game.ModData.ObjectCreator
                                 .GetTypesImplementing <ScriptActorProperties>()
                                 .ToArray();

            ActorCommands = new Cache <ActorInfo, Type[]>(FilterActorCommands);

            var knownPlayerCommands = Game.ModData.ObjectCreator
                                      .GetTypesImplementing <ScriptPlayerProperties>()
                                      .ToArray();

            PlayerCommands = FilterCommands(world.Map.Rules.Actors["player"], knownPlayerCommands);

            runtime.Globals["GameDir"] = Platform.GameDir;
            runtime.DoBuffer(File.Open(Platform.ResolvePath(".", "lua", "scriptwrapper.lua"), FileMode.Open, FileAccess.Read).ReadAllText(), "scriptwrapper.lua").Dispose();
            tick = (LuaFunction)runtime.Globals["Tick"];

            // Register globals
            using (var fn = runtime.CreateFunctionFromDelegate((Action <string>)FatalError))
                runtime.Globals["FatalError"] = fn;

            runtime.Globals["MaxUserScriptInstructions"] = MaxUserScriptInstructions;

            using (var registerGlobal = (LuaFunction)runtime.Globals["RegisterSandboxedGlobal"])
            {
                using (var fn = runtime.CreateFunctionFromDelegate((Action <string>)LogDebugMessage))
                    registerGlobal.Call("print", fn).Dispose();

                // Register global tables
                var bindings = Game.ModData.ObjectCreator.GetTypesImplementing <ScriptGlobal>();
                foreach (var b in bindings)
                {
                    var ctor = b.GetConstructors(BindingFlags.Public | BindingFlags.Instance).FirstOrDefault(c =>
                    {
                        var p = c.GetParameters();
                        return(p.Length == 1 && p.First().ParameterType == typeof(ScriptContext));
                    });

                    if (ctor == null)
                    {
                        throw new InvalidOperationException("{0} must define a constructor that takes a ScriptContext context parameter".F(b.Name));
                    }

                    var binding = (ScriptGlobal)ctor.Invoke(new[] { this });
                    using (var obj = binding.ToLuaValue(this))
                        registerGlobal.Call(binding.Name, obj).Dispose();
                }
            }

            // System functions do not count towards the memory limit
            runtime.MaxMemoryUse = runtime.MemoryUse + MaxUserScriptMemory;

            using (var loadScript = (LuaFunction)runtime.Globals["ExecuteSandboxedScript"])
            {
                foreach (var s in scripts)
                {
                    loadScript.Call(s, world.Map.Open(s).ReadAllText()).Dispose();
                }
            }
        }
示例#32
0
    public World Initialize(bool loadWorld = false)
    {
        simplex = new SimplexNoise(GameManager.gameSeed);
        octaves = Random.Range(4, 4);
        multiplier = Random.Range(10, 10);
        amplitude = Random.Range(0.6f, 1f);
        lacunarity = Random.Range(0.7f, .9f);
        dAmplitude = Random.Range(0.5f, .1f);

        if (loadWorld)
        {
          activeWorld = LoadWorld();
        }
        else
        {
          activeWorld = new World();
          activeWorld.PrepForCache(worldScale, worldSubdivisions);
        }

        //Seed the world heights
        SetHeights();

        //CreateOcean();

        currentWorldObject = new GameObject("World");
        currentWorldTrans = currentWorldObject.transform;

        //currentWorld = new World(WorldSize.Small, WorldType.Verdant, Season.Spring, AxisTilt.Slight);

        worldRenderer = GetComponent<WorldRenderer>();
        //changed this to run RenderPlates instead of RenderWorld
        foreach (GameObject g in worldRenderer.RenderPlates(activeWorld, regularTileSet))
        {
          g.transform.parent =currentWorldTrans;
        }

        //layermask = 1 << 8;   // Layer 8 is set up as "Chunk" in the Tags & Layers manager

        labelDirections = true;

        //DrawHexIndices();

        return activeWorld;
    }
示例#33
0
 public CncWorldInteractionControllerWidget(World world, WorldRenderer worldRenderer)
     : base(world, worldRenderer)
 {
     tooltipContainer = Lazy.New(() =>
                                 Ui.Root.Get <TooltipContainerWidget>(TooltipContainer));
 }