Beispiel #1
0
    //Runs .Behaviour method for all actors and active blocks. These are stored in WrapperList
    public void DoTurn()
    {
        TurnCount += 1;
        MonoBehaviour.print("TurnCount: " + TurnCount.ToString());
        int ActionCount = 0; //Used to prevent endless loop

        IsRunning = true;    //Might read this in other scripts
        Action NewAction;

        for (RunCount = 0; RunCount < WrapperList.Count; RunCount++) //Goes through WrapperList
        {
            ObjectWrapper Wrapper = WrapperList[RunCount];           //Convenience

            //Remove Wrapper from list if it is empty or actor/block tiles are inconsistent.
            if
            (
                (Wrapper.Actor == null && Wrapper.Block == null) ||
                (Wrapper.Actor != null && (Wrapper.Actor.TileOfActor == null || Wrapper.Actor.TileOfActor.ActorOfTile != Wrapper.Actor)) ||
                (Wrapper.Block != null && (Wrapper.Block.TileOfBlock == null || Wrapper.Block.TileOfBlock.BlockOfTile != Wrapper.Block))
            )
            {
                WrapperList.RemoveAt(RunCount);
                RunCount -= 1;
                continue;
            }

            //Checks if actor is set
            if (Wrapper.Actor != null)
            {
                ActionCount = 0;
                Wrapper.Actor.TurnNumber = RunCount;                // Sets turn order so actor can use this information
                Wrapper.Actor.Energy     = Wrapper.Actor.MaxEnergy; //Resets energy to max

                //Keep running .Behaviour untill energy runs out
                while (Wrapper.Actor.Energy > 0)
                {
                    //Prevents endless loop, some actions might not cost energy
                    if (ActionCount >= ActionLimit)
                    {
                        print("Action Count exceeded limit for " + Wrapper.Actor.Name);
                        break;
                    }

                    //Runs .Behaviour to get the action the actor wants to perform
                    NewAction = Wrapper.Actor.Behaviour();

                    //Checks if Actor has enought energy and nothing is preventing the action. Actors should check this themselves, this just prevents bugs
                    if (NewAction.EnergyCost <= Wrapper.Actor.Energy && NewAction.CanActivate(Wrapper.Actor))
                    {
                        //Performs the action
                        NewAction.Activate(Wrapper.Actor);
                        Wrapper.Actor.Energy -= NewAction.EnergyCost;
                    }
                    else
                    {
                        //Sends a message so the bug can be found
                        print(Wrapper.Actor.Name + " instance returned action that could not be activated!");

                        break;
                    }
                    ActionCount += 1;
                }
            }

            //Blocks have no Action equivalent. .Behaviour does stuff itself
            if (Wrapper.Block != null)
            {
                Wrapper.Block.TurnNumber = RunCount;
                Wrapper.Block.Behaviour();
            }
        }

        IsRunning = false;

        //Draws the room
        foreach (GameObject Sprite in SpriteList)
        {
            Destroy(Sprite);
        }
        SpriteList = ActiveRoom.RenderRoom();
    }
Beispiel #2
0
        // Icon,Show Name, Full Path, TypFile
        public WorkspaceTree()
        {
            treeView = new TreeView();

            treeView.ButtonReleaseEvent += new ButtonReleaseEventHandler(OnButtonRelease);
            treeView.KeyReleaseEvent    += delegate(object o, KeyReleaseEventArgs args) {
                if (args.Event.Key == Gdk.Key.Delete)
                {
                    MainClass.MainWindow.DeleteFile();
                }
            };

            //treeView.Model = modelStore = store;

            filter             = new Gtk.TreeModelFilter(store, null);
            filter.VisibleFunc = new Gtk.TreeModelFilterVisibleFunc(FilterTree);
            treeView.Model     = filter;

            treeView.HeadersVisible = true;
            //this.ExpandAll();
            treeView.Selection.Mode     = Gtk.SelectionMode.Single;
            treeView.RowActivated      += OnRowActivate;
            treeView.Selection.Changed += OnRowSelection;
            treeView.ShowExpanders      = true;

            //	TreeViewColumn display_column.PackStart (text_render, true);

            CellRendererPixbuf crp = new CellRendererPixbuf();

            crp.Ypad   = 0;
            crp.Yalign = 0;

            Gtk.CellRendererText fileNameRenderer = new Gtk.CellRendererText();
            fileNameRenderer.Ypad = 0;

            TreeViewColumn icon_column = new TreeViewColumn();            //("Icon", crp, "pixbuf", ICO_ROW);

            icon_column.PackStart(crp, false);
            icon_column.AddAttribute(crp, "pixbuf", ICO_ROW);

            icon_column.PackStart(fileNameRenderer, true);
            icon_column.AddAttribute(fileNameRenderer, "markup", NAME_ROW);


            treeView.AppendColumn(icon_column);

            //treeView.AppendColumn("Icon", crp, "pixbuf", ICO_ROW);

            treeView.AppendColumn("Name", fileNameRenderer, "text", NAME_ROW);
            treeView.Columns[NAME_ROW].Visible = false;

            CellRendererText textRenderer = new CellRendererText();

            textRenderer.Ypad = 0;

            treeView.AppendColumn("FullPath", textRenderer, "text", PATH_ROW);
            treeView.Columns[PATH_ROW].Visible = false;
            treeView.HeadersVisible            = false;
            treeView.EnableTreeLines           = true;
            treeView.HoverExpand    = false;
            treeView.HoverSelection = false;

            treeView.Columns[NAME_ROW].SetCellDataFunc(fileNameRenderer, new Gtk.TreeCellDataFunc(RenderFileNme));

            sw.ShadowType = ShadowType.Out;
            sw.Add(treeView);

            this.PackEnd(sw, true, true, 0);

            Toolbar toolbar = new Toolbar();

            refreshButton             = new ToolButton("refresh.png"); //Stock.Home);
            refreshButton.IsImportant = true;
            refreshButton.Label       = MainClass.Languages.Translate("menu_refresh");
            refreshButton.BorderWidth = 1;
            refreshButton.Clicked    += delegate {
                MainClass.MainWindow.RefreshProject();
            };
            toolbar.Insert(refreshButton, -1);

            Gtk.Menu menuAdd = new Gtk.Menu();

            MenuItem mi = new MenuItem(MainClass.Languages.Translate("menu_create_file"));

            mi.Activated += delegate(object sender, EventArgs e) {
                NewAction nw = new NewAction();
                nw.Activate();
            };

            menuAdd.Insert(mi, -1);
            mi            = new MenuItem(MainClass.Languages.Translate("menu_create_dir"));
            mi.Activated += delegate(object sender, EventArgs e) {
                NewDirectoryAction nw = new NewDirectoryAction();
                nw.Activate();
            };

            menuAdd.Insert(mi, -1);
            menuAdd.ShowAll();

            mtbCreate             = new MenusToolButton(menuAdd, "file-new.png");
            mtbCreate.IsImportant = true;
            mtbCreate.Label       = "Create";
            toolbar.Insert(mtbCreate, -1);

            if (MainClass.Settings.LogicalSort == null)
            {
                MainClass.Settings.LogicalSort = LogicalSystem.GetDefaultLogicalSystem();
            }

            Gtk.Menu menuFilter = new Gtk.Menu();

            MenuItem menuItemFilter = new MenuItem(MainClass.Languages.Translate("all_files"));

            menuItemFilter.Activated += delegate(object sender, EventArgs e) {
                activetFilter = null;
                filter.Refilter();
                treeView.QueueDraw();
            };
            menuFilter.Insert(menuItemFilter, -1);


            foreach (LogicalSystem ls in MainClass.Settings.LogicalSort)
            {
                LogicalSystem lsTemp = ls;
                menuItemFilter            = new MenuItem(lsTemp.Display);
                menuItemFilter.Activated += delegate(object sender, EventArgs e) {
                    if (lsTemp != null)
                    {
                        activetFilter = lsTemp;
                    }
                    else
                    {
                        activetFilter = null;
                    }
                    filter.Refilter();
                    treeView.QueueDraw();
                };
                menuFilter.Insert(menuItemFilter, -1);
                //filterModel.AppendValues(ls.Display, "", ls);
            }
            menuFilter.ShowAll();

            MenusToolButton mtbFilter = new MenusToolButton(menuFilter, "filter.png");

            mtbFilter.IsImportant = true;
            mtbFilter.Label       = "Filter";
            toolbar.Insert(mtbFilter, -1);
            this.PackStart(toolbar, false, false, 0);
            //this.PackStart(ComboFilter, false, false, 0);
            //ComboFilter.Active = 0;
        }