示例#1
0
 public void DestroyChildActor(EditorActor inDestroyTarget)
 {
     EditorRendererPINVOKE.EditorActor_DestroyChildActor(swigCPtr, EditorActor.getCPtr(inDestroyTarget));
     if (EditorRendererPINVOKE.SWIGPendingException.Pending)
     {
         throw EditorRendererPINVOKE.SWIGPendingException.Retrieve();
     }
 }
示例#2
0
        private void OnActorAdded(EditorActor obj)
        {
            conRenderer.Actor = obj;

            pgGrid.SelectedObject = obj;

            Globals.SaveProject.Invoke(false);
            Globals.RefreshSequenceDropDown.Invoke(false);
        }
 protected override void SpawnEntities()
 {
     PUActor     = World.CreateActor("PUActor");
     PUComponent = PUActor.CreatePUSystemComponent("PUSystem", PUSystemName, true);
     PUComponent.PlaySystem();
     distance     = 50;
     zoomdistance = 5;
     VP.SetCameraYawPitchDistance(yaw, pitch, distance);
 }
示例#4
0
    public EditorActor GetChildActorByName(string inName)
    {
        EditorActor ret = new EditorActor(EditorRendererPINVOKE.EditorActor_GetChildActorByName(swigCPtr, inName), false);

        if (EditorRendererPINVOKE.SWIGPendingException.Pending)
        {
            throw EditorRendererPINVOKE.SWIGPendingException.Retrieve();
        }
        return(ret);
    }
 public EditorCollisionFilterActor(EditorLevel level, XElement data)
     : base(level, data)
 {
     _selectedPoints = new List<PointListNode>();
     if (data.Attribute("actor_a").Value != "-1")
         _actorA = level.getActor(int.Parse(data.Attribute("actor_a").Value));
     if (data.Attribute("actor_b").Value != "-1")
         _actorB = level.getActor(int.Parse(data.Attribute("actor_b").Value));
     initializeControls(Vector2.Zero, Vector2.Zero);
 }
示例#6
0
    public EditorActor CreateActor(string inName)
    {
        EditorActor ret = new EditorActor(EditorRendererPINVOKE.EditorWorld_CreateActor(swigCPtr, inName), false);

        if (EditorRendererPINVOKE.SWIGPendingException.Pending)
        {
            throw EditorRendererPINVOKE.SWIGPendingException.Retrieve();
        }
        return(ret);
    }
示例#7
0
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            Globals.IsDialogWindowOpen = false;

            if (Globals.RenderWindow.CurrentSelectedObject is EditorSprite)
            {
                EditorSprite s = Globals.RenderWindow.CurrentSelectedObject as EditorSprite;
                {
                    s.ObjectTypeName = lsTypes.Text;
                    s.ObjectType     = lsTypes.SelectedItem.GetType();
                }

                Service.CloseDropDown();
            }

            if (Globals.RenderWindow.CurrentSelectedObject is EditorActor)
            {
                EditorActor s = Globals.RenderWindow.CurrentSelectedObject as EditorActor;
                {
                    s.ObjectTypeName = lsTypes.Text;
                    s.ObjectType     = lsTypes.SelectedItem.GetType();
                }

                Service.CloseDropDown();
            }

            if (Globals.RenderWindow.CurrentSelectedObject is EditorEmitter)
            {
                EditorEmitter s = Globals.RenderWindow.CurrentSelectedObject as EditorEmitter;
                {
                    s.ObjectTypeName = lsTypes.Text;
                    s.ObjectType     = lsTypes.SelectedItem.GetType();
                }

                Service.CloseDropDown();
            }

            if (Globals.RenderWindow.CurrentSelectedObject is EditorGroup)
            {
                EditorGroup s = Globals.RenderWindow.CurrentSelectedObject as EditorGroup;
                {
                    s.ObjectTypeName = lsTypes.Text;
                    s.ObjectType     = lsTypes.SelectedItem.GetType();
                }

                Service.CloseDropDown();
            }
        }
 protected virtual void SpawnEntities()
 {
     if (meshname != null)
     {
         if (meshname != "")
         {
             MainActor = World.CreateActor("Model");
             if (MainActor != null)
             {
                 MainActor.SetMesh(GetTrueFileName(meshname));
                 distance     = MainActor.GetBoundingRadius() * 1.25f;
                 zoomdistance = distance * 0.1f;
                 VP.SetCameraDistance(distance);
             }
         }
     }
 }
 public EditorPrismaticActor(EditorLevel level, XElement data)
     : base(level, data)
 {
     int actorIdA = Loader.loadInt(data.Attribute("actor_a"), -1);
     int actorIdB = Loader.loadInt(data.Attribute("actor_b"), -1);
     _position = Loader.loadVector2(data.Attribute("position"), Vector2.Zero);
     _actorA = actorIdA == -1 ? null : level.getActor(actorIdA);
     _actorB = actorIdB == -1 ? null : level.getActor(actorIdB);
     Vector2 axis = Loader.loadVector2(data.Attribute("axis"), new Vector2(1, 0));
     _angle = (float)Math.Atan2(axis.Y, axis.X);
     lowerLimit = Loader.loadFloat(data.Attribute("lower_limit"), 0f);
     upperLimit = Loader.loadFloat(data.Attribute("upper_limit"), 0f);
     _autoCalculateForce = Loader.loadBool(data.Attribute("auto_calculate_force"), false);
     _autoForceDifference = Loader.loadFloat(data.Attribute("auto_force_difference"), 0f);
     _motorSpeed = Loader.loadFloat(data.Attribute("motor_speed"), 0f);
     _motorEnabled = Loader.loadBool(data.Attribute("motor_enabled"), false);
     _maxMotorForce = Loader.loadFloat(data.Attribute("max_motor_force"), 0f);
     initializeControls();
 }
示例#10
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(EditorActor obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
示例#11
0
 public void OnObjectRemoved(VisualObject obj)
 {
     Actor = null;
     Manager.CurrentScreen.VisualObjects.Remove(obj);
 }
示例#12
0
 public override void handleSelectedClick(System.Windows.Forms.MouseButtons button)
 {
     if ((_selectedConnectionA || _selectedConnectionB) && !_moveActor)
     {
         foreach (List<EditorActor> actors in _level.sortedActors.Values)
         {
             foreach (EditorActor actor in actors)
             {
                 if (actor.type == ActorType.Box || actor.type == ActorType.Circle || actor.type == ActorType.Terrain)
                 {
                     PointListNode connectionControl = _selectedConnectionA ? _connectionA : _connectionB;
                     if (actor.hitTest(connectionControl.position, (results) =>
                         {
                             if (results.Count > 0)
                             {
                                 if (_selectedConnectionA)
                                     _actorA = actor;
                                 else
                                     _actorB = actor;
                                 return true;
                             }
                             return false;
                         }))
                     {
                         break;
                     }
                 }
             }
         }
     }
     deselect();
 }
示例#13
0
        // Create actor from toolbar
        public void createActorFromToolbar(string buttonName)
        {
            // Create actor controller based on button name
            EditorActor actor = null;

            switch (buttonName)
            {
            case "boxButton":
                actor = new EditorBoxActor(_level);
                break;

            case "circleButton":
                actor = new EditorCircleActor(_level);
                break;

            case "terrainButton":
                actor = new EditorTerrainActor(_level);
                break;

            case "ropeButton":
                actor = new EditorRopeActor(_level);
                break;

            case "fluidButton":
                actor = new EditorFluidActor(_level);
                break;

            case "playerSpawnButton":
                // Remove existing player spawns before adding a new one
                List <EditorPlayerSpawnActor> results = _level.getActors <EditorPlayerSpawnActor>(ActorType.PlayerSpawn);
                if (results.Count > 0)
                {
                    _level.removeActor(results[0]);
                }
                actor = new EditorPlayerSpawnActor(_level);
                break;

            case "plantsButton":
                PlantSelectBox plantSelectBox = new PlantSelectBox();
                if (plantSelectBox.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    // Adjust mouse position since movement isn't tracked when a form is open
                    _mouse    = _levelView.PointToClient(System.Windows.Forms.Cursor.Position);
                    _oldMouse = _mouse;

                    PlantType selectedPlantType = plantSelectBox.selectedPlantType;
                    switch (selectedPlantType)
                    {
                    case PlantType.Tree:
                        actor = new EditorTreeActor(_level);
                        break;
                    }
                }
                break;

            case "itemsButton":
                SelectItem selectItemForm = new SelectItem(_editorController);
                if (selectItemForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    actor = new EditorItemActor(_level, selectItemForm.uid);
                }
                break;

            case "circuitsButton":
                SelectCircuit selectCircuitForm = new SelectCircuit(_editorController.circuitController);
                if (selectCircuitForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    actor = new EditorCircuitActor(_level, selectCircuitForm.circuitUID);
                }
                break;

            case "revoluteButton":
                actor = new EditorRevoluteActor(_level);
                break;

            case "prismaticButton":
                actor = new EditorPrismaticActor(_level);
                break;

            case "collisionFilterButton":
                actor = new EditorCollisionFilterActor(_level);
                break;

            case "regionButton":
                actor = new EditorRegionActor(_level);
                break;

            case "decalsButton":
                actor = new EditorDecalActor(_level);
                break;

            case "levelTransitionButton":
                actor = new EditorLevelTransitionActor(_level);
                break;

            case "tooltipButton":
                actor = new EditorTooltipActor(_level);
                break;

            case "waypointButton":
                actor = new EditorWaypointActor(_level);
                break;

            case "edgeBoundaryButton":
                actor = new EditorEdgeBoundaryActor(_level);
                break;
            }

            if (actor != null)
            {
                _editorController.view.selectLevelTab();
                _level.addActor(actor);
                _selectedActor = actor;
            }
        }
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (lsSceneObjects.SelectedItem != null && lsAvailablePaths.SelectedItem != null)
            {
                if (lsSceneObjects.SelectedItem is EditorGroup)
                {
                    EditorGroup  vo = lsSceneObjects.SelectedItem as EditorGroup;
                    LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder;

                    if (bo != null)
                    {
                        vo.AttachedPathingNode     = bo;
                        vo.CurrentPathNodeIndex    = Convert.ToInt16(tbNodeIndex.Text);
                        vo.AttachedPathingNodeName = bo.Name;

                        foreach (LedgeNodeDisplay node in bo.Nodes)
                        {
                            node.Scale = vo.Scale;
                        }

                        Globals.IsDialogWindowOpen = false;

                        Dispose();
                    }
                }

                if (lsSceneObjects.SelectedItem is EditorSprite)
                {
                    EditorSprite vo = lsSceneObjects.SelectedItem as EditorSprite;
                    LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder;

                    if (bo != null)
                    {
                        vo.AttachedPathingNode     = bo;
                        vo.CurrentPathNodeIndex    = Convert.ToInt16(tbNodeIndex.Text);
                        vo.AttachedPathingNodeName = bo.Name;

                        foreach (LedgeNodeDisplay node in bo.Nodes)
                        {
                            node.Scale = vo.Scale;
                        }

                        Globals.IsDialogWindowOpen = false;

                        Dispose();
                    }
                }

                if (lsSceneObjects.SelectedItem is EditorEmitter)
                {
                    EditorEmitter vo = lsSceneObjects.SelectedItem as EditorEmitter;
                    LedgeBuilder  bo = lsAvailablePaths.SelectedItem as LedgeBuilder;

                    if (bo != null)
                    {
                        vo.AttachedPathingNode     = bo;
                        vo.CurrentPathNodeIndex    = Convert.ToInt16(tbNodeIndex.Text);
                        vo.AttachedPathingNodeName = bo.Name;

                        foreach (LedgeNodeDisplay node in bo.Nodes)
                        {
                            node.Scale = vo.Scale;
                        }

                        Globals.IsDialogWindowOpen = false;

                        Dispose();
                    }
                }

                if (lsSceneObjects.SelectedItem is EditorActor)
                {
                    EditorActor  vo = lsSceneObjects.SelectedItem as EditorActor;
                    LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder;

                    if (bo != null)
                    {
                        vo.AttachedPathingNode     = bo;
                        vo.CurrentPathNodeIndex    = Convert.ToInt16(tbNodeIndex.Text);
                        vo.AttachedPathingNodeName = bo.Name;

                        // Store these in the pathing node
                        bo.Sequences = vo.Sequences;

                        foreach (LedgeNodeDisplay node in bo.Nodes)
                        {
                            node.AnimationSequence = vo.ClipPlayer.CurrentSequence;
                            node.Scale             = vo.Scale;
                        }

                        Globals.IsDialogWindowOpen = false;

                        Dispose();
                    }
                }
            }
            else
            {
                MessageBox.Show(@"Please select a scene object and an available pathing node to attach it to.");
            }
        }
示例#15
0
        // Create actor from toolbar
        public void createActorFromToolbar(string buttonName)
        {
            // Create actor controller based on button name
            EditorActor actor = null;
            switch (buttonName)
            {
                case "boxButton":
                    actor = new EditorBoxActor(_level);
                    break;

                case "circleButton":
                    actor = new EditorCircleActor(_level);
                    break;

                case "terrainButton":
                    actor = new EditorTerrainActor(_level);
                    break;

                case "ropeButton":
                    actor = new EditorRopeActor(_level);
                    break;

                case "fluidButton":
                    actor = new EditorFluidActor(_level);
                    break;

                case "playerSpawnButton":
                    // Remove existing player spawns before adding a new one
                    List<EditorPlayerSpawnActor> results = _level.getActors<EditorPlayerSpawnActor>(ActorType.PlayerSpawn);
                    if (results.Count > 0)
                    {
                        _level.removeActor(results[0]);
                    }
                    actor = new EditorPlayerSpawnActor(_level);
                    break;

                case "plantsButton":
                    PlantSelectBox plantSelectBox = new PlantSelectBox();
                    if (plantSelectBox.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        // Adjust mouse position since movement isn't tracked when a form is open
                        _mouse = _levelView.PointToClient(System.Windows.Forms.Cursor.Position);
                        _oldMouse = _mouse;

                        PlantType selectedPlantType = plantSelectBox.selectedPlantType;
                        switch (selectedPlantType)
                        {
                            case PlantType.Tree:
                                actor = new EditorTreeActor(_level);
                                break;
                        }
                    }
                    break;

                case "itemsButton":
                    SelectItem selectItemForm = new SelectItem(_editorController);
                    if (selectItemForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        actor = new EditorItemActor(_level, selectItemForm.uid);
                    }
                    break;

                case "circuitsButton":
                    SelectCircuit selectCircuitForm = new SelectCircuit(_editorController.circuitController);
                    if (selectCircuitForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        actor = new EditorCircuitActor(_level, selectCircuitForm.circuitUID);
                    }
                    break;

                case "revoluteButton":
                    actor = new EditorRevoluteActor(_level);
                    break;

                case "prismaticButton":
                    actor = new EditorPrismaticActor(_level);
                    break;

                case "collisionFilterButton":
                    actor = new EditorCollisionFilterActor(_level);
                    break;

                case "regionButton":
                    actor = new EditorRegionActor(_level);
                    break;

                case "decalsButton":
                    actor = new EditorDecalActor(_level);
                    break;

                case "levelTransitionButton":
                    actor = new EditorLevelTransitionActor(_level);
                    break;

                case "tooltipButton":
                    actor = new EditorTooltipActor(_level);
                    break;

                case "waypointButton":
                    actor = new EditorWaypointActor(_level);
                    break;

                case "edgeBoundaryButton":
                    actor = new EditorEdgeBoundaryActor(_level);
                    break;
            }

            if (actor != null)
            {
                _editorController.view.selectLevelTab();
                _level.addActor(actor);
                _selectedActor = actor;
            }
        }
示例#16
0
        private void btnAddActor_Click(object sender, EventArgs e)
        {
            if (
                MessageBox.Show("Are you sure you want to add this to the scene?", "Add Actor Confirmation", MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question) == DialogResult.No)
            {
                return;
            }

            // Disable all thse
            tbName.Enabled      = false;
            cbRole.Enabled      = false;
            gbSequences.Enabled = false;
            gbPreview.Enabled   = false;
            btnSave.Enabled     = false;

            pgBar.Style = ProgressBarStyle.Continuous;

            // Create our actor
            Actor = new EditorActor(Globals.Game, string.Empty, string.Empty);

            if (tvSequences.Nodes.Count >= 0)
            {
                // Set our Actors Role
                switch (cbRole.Text)
                {
                case "Player":
                    Actor.Role = ActorRole.Player;
                    break;

                case "Enemy":
                    Actor.Role = ActorRole.Enemy;
                    break;

                case "NPC":
                    Actor.Role = ActorRole.NPC;
                    break;

                case "Prop":
                    Actor.Role = ActorRole.Prop;
                    break;
                }

                Actor.Name = tbName.Text;

                // Init our clip player
                Actor.ClipPlayer = new AnimationPlayer2D(Globals.Game);
                Actor.ClipPlayer.Initialize();

                // Loop thru the Tree view controls Nodes adding our Key Frames to our Clip Player
                foreach (TreeNode node in tvSequences.Nodes)
                {
                    // Reset our frame index
                    {
                        int endFrameIndex = (node.Nodes.Count - 1);

                        Sequence2D sequence = new Sequence2D(node.Name);
                        sequence.StartFrame = 0;
                        sequence.EndFrame   = endFrameIndex;

                        // Add our Frames
                        foreach (TreeNode child in tvSequences.Nodes[node.Name].Nodes)
                        {
                            KeyFrame2D frame = new KeyFrame2D();
                            frame.Duration      = 1f;
                            frame.AssetFilename = child.Tag.ToString();

                            sequence.Frames.Add(frame);
                        }

                        // Add our Sequence
                        Actor.ClipPlayer.Sequences.Add(sequence);
                    }
                }

                // Generate our Sprite Sheet for the Clip Player
                SpriteTools.GenerateSpriteSheet(Actor, Globals.AppSettings.ProjectPath, tbName.Text);

                Actor.ClipPlayer.Texture = Catalyst3D.XNA.Engine.UtilityClasses.Utilitys.TextureFromFile(
                    Globals.Game.GraphicsDevice, Globals.AppSettings.ProjectPath + @"\" + Actor.SpriteSheetFileName);
            }

            // Default to the idle sequence
            if (Actor.Sequences.Count > 0)
            {
                Actor.Play(Actor.ClipPlayer.Sequences[0].Name, true);
            }

            // Add it to our Scene
            Globals.ActorAdded.Invoke(Actor);

            tvSequences.Nodes.Clear();

            Close();
        }
 public CircuitOutputConnection(EditorCircuitActor circuitActor, EditorActor actor, Gate gate, GameEventType onEnabledEvent, GameEventType onDisabledEvent)
     : base(circuitActor, actor, gate, "output")
 {
     _onEnabledEvent = onEnabledEvent;
     _onDisabledEvent = onDisabledEvent;
 }
示例#18
0
        public override void update()
        {
            Vector2 worldDelta = _level.controller.worldDeltaMouse;
            float angleIncrement = _level.controller.isKeyHeld(Keys.LeftShift) ? 0.0001f : 0.0005f;
            float limitIncrement = _level.controller.isKeyHeld(Keys.LeftShift) ? 0.0001f : 0.0005f;

            // Update connections
            if (_actorA != null && !_level.containsActor(_actorA))
            {
                _connectionA.position = _actorA.prismaticConnectionPosition;
                _actorA = null;
            }
            if (_actorB != null && !_level.containsActor(_actorB))
            {
                _connectionB.position = _actorB.prismaticConnectionPosition;
                _actorB = null;
            }

            if (selected)
            {
                if (!_level.controller.isKeyHeld(Keys.LeftControl))
                {
                    if (_moveActor)
                        _position += worldDelta;
                    if (_selectedConnectionA)
                        _connectionA.position += worldDelta;
                    if (_selectedConnectionB)
                        _connectionB.position += worldDelta;
                }

                if (_level.controller.isKeyHeld(Keys.Q))
                    _angle -= angleIncrement;
                if (_level.controller.isKeyHeld(Keys.E))
                    _angle += angleIncrement;
                if (_level.controller.isKeyHeld(Keys.W))
                    upperLimit += limitIncrement;
                if (_level.controller.isKeyHeld(Keys.S))
                    upperLimit -= limitIncrement;
                if (_level.controller.isKeyHeld(Keys.A))
                    lowerLimit -= limitIncrement;
                if (_level.controller.isKeyHeld(Keys.D))
                    lowerLimit += limitIncrement;

                if (_level.controller.isKeyPressed(Keys.Escape))
                    deselect();
                else if (_level.controller.isKeyPressed(Keys.Delete))
                    delete();
            }
        }
 public override bool handleUnselectedClick(System.Windows.Forms.MouseButtons button)
 {
     if (button == System.Windows.Forms.MouseButtons.Left)
     {
         return hitTest(_level.controller.worldMouse, (results) =>
         {
             if (results.Count == 1 && results[0] is PointListNode)
             {
                 _selectedPoints.Add(results[0] as PointListNode);
                 select();
                 return true;
             }
             else if (results.Count == 2 && _actorA == null && _actorB == null)
             {
                 foreach (IActorComponent component in results)
                 {
                     if (component is PointListNode)
                         _selectedPoints.Add(component as PointListNode);
                 }
                 select();
                 return true;
             }
             else if (results.Count == 2 && _actorA != null && _actorB != null)
             {
                 _nodeA.position = _actorA.collisionFilterConnectionPosition;
                 _nodeB.position = _actorB.collisionFilterConnectionPosition;
                 _actorA = null;
                 _actorB = null;
                 _selectedPoints.Add(_nodeA);
                 _selectedPoints.Add(_nodeB);
                 select();
             }
             return false;
         });
     }
     else if (button == System.Windows.Forms.MouseButtons.Right)
     {
         return hitTest(_level.controller.worldMouse, (results) =>
         {
             if (results.Count == 1)
             {
                 _level.controller.openActorProperties(results[0]);
                 return true;
             }
             return false;
         });
     }
     return false;
 }
示例#20
0
        private void OnActorAdded(EditorActor actor)
        {
            Actor = actor;

            Globals.Renderer.AddVisualObject(actor);
        }
        public override void handleSelectedClick(System.Windows.Forms.MouseButtons button)
        {
            if (_selectedPoints.Count == 1)
            {
                // Perform an actor hit test and form a connection if successful
                foreach (List<EditorActor> actors in _level.sortedActors.Values)
                {
                    foreach (EditorActor actor in actors)
                    {
                        if (actor.type == ActorType.Box || actor.type == ActorType.Circle || actor.type == ActorType.Terrain)
                        {
                            bool connectionFormed = actor.hitTest(_selectedPoints[0].position, (results) =>
                            {
                                if (results.Count > 0)
                                {
                                    if (_selectedPoints[0] == _nodeA)
                                        _actorA = actor;
                                    else if (_selectedPoints[0] == _nodeB)
                                        _actorB = actor;

                                    return true;
                                }
                                return false;
                            });

                            if (connectionFormed)
                            {
                                deselect();
                                return;
                            }
                        }
                    }
                }
            }
            deselect();
        }
示例#22
0
        private void LoadProject(bool showresult)
        {
            // Create our Open File Dialog
            OpenFileDialog dia = new OpenFileDialog();

            dia.Filter           = "Catalyst3D Actor File|*.a2d";
            dia.InitialDirectory = Globals.AppSettings.ProjectPath;

            if (dia.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if (Globals.IsProjectLoaded)
                    {
                        // Flush the sequencer drop down for available sequences
                        tsSequence.Items.Clear();
                        conRenderer.Manager.CurrentScreen.VisualObjects.Clear();
                    }

                    // Store our current projects path and file name
                    Globals.AppSettings.ProjectPath     = Path.GetDirectoryName(dia.FileName);
                    Globals.AppSettings.ProjectFilename = Path.GetFileName(dia.FileName);

                    Actor original = Serializer.Deserialize <Actor>(dia.FileName);

                    EditorActor actor = new EditorActor(Globals.Game, string.Empty, original.AssetName)
                    {
                        AssetName           = original.AssetName,
                        SpriteSheetFileName = original.SpriteSheetFileName,
                        Direction           = original.Direction,
                        DrawOrder           = original.DrawOrder,
                        UpdateOrder         = original.UpdateOrder,
                        Name        = original.Name,
                        PlayerIndex = original.PlayerIndex,
                        Position    = Vector2.Zero,
                        Role        = original.Role,
                        Scale       = original.Scale,
                        Enabled     = original.Enabled,
                        Visible     = original.Visible,
                        GameScreen  = Globals.Renderer
                    };

                    actor.ClipPlayer = new AnimationPlayer2D(Globals.Game)
                    {
                        AssetName  = original.ClipPlayer.AssetName,
                        Sequences  = original.ClipPlayer.Sequences,
                        GameScreen = Globals.Renderer
                    };

                    actor.ClipPlayer.Initialize();

                    actor.ClipPlayer.Texture = Catalyst3D.XNA.Engine.UtilityClasses.Utilitys.TextureFromFile(Globals.Game.GraphicsDevice, Globals.AppSettings.ProjectPath + @"\" + original.SpriteSheetFileName);

                    // Play the first sequence by default after loading
                    if (actor.ClipPlayer.Sequences.Count > 0)
                    {
                        actor.Play(actor.ClipPlayer.Sequences[0].Name, true);
                    }

                    actor.Initialize();

                    conRenderer.Actor = actor;

                    pgGrid.SelectedObject = actor;

                    Globals.Renderer.AddVisualObject(actor);

                    Globals.RefreshSequenceDropDown.Invoke(false);

                    Globals.IsProjectLoaded = true;
                }
                catch
                {
                    MessageBox.Show("Error: Failed to load the sprite sheet for this actor project!");

                    Globals.IsProjectLoaded = false;

                    conRenderer.Actor = null;

                    if (conRenderer.Manager.CurrentScreen != null)
                    {
                        conRenderer.Manager.CurrentScreen.VisualObjects.Clear();
                    }
                }
            }
        }