示例#1
0
文件: Projectile.cs 项目: MK4H/MHUrho
            /// <summary>
            /// Creates a loader that loads the <paramref name="storedProjectile"/> into the <paramref name="level"/>.
            /// </summary>
            /// <param name="level">The level the projectile is being loaded into.</param>
            /// <param name="storedProjectile">The stored data of the projectile.</param>
            public Loader(LevelManager level,
                          StProjectile storedProjectile)
            {
                this.level            = level;
                this.storedProjectile = storedProjectile;
                this.componentLoaders = new List <DefaultComponentLoader>();

                type = level.Package.GetProjectileType(storedProjectile.TypeID);
                if (type == null)
                {
                    throw new ArgumentException($"Projectile type {storedProjectile.TypeID} was not loaded");
                }
            }
示例#2
0
文件: Projectile.cs 项目: MK4H/MHUrho
            /// <summary>
            /// Stores the projectile into an instance of <see cref="StProjectile"/> for serialization.
            /// </summary>
            /// <param name="projectile">The projectile to store.</param>
            /// <returns>Stored projectile in an instance of <see cref="StProjectile"/> for serialization</returns>
            public static StProjectile Save(Projectile projectile)
            {
                var stProjectile = new StProjectile
                {
                    Id         = projectile.ID,
                    Position   = projectile.Node.Position.ToStVector3(),
                    Rotation   = projectile.Node.Rotation.ToStQuaternion(),
                    PlayerID   = projectile.Player.ID,
                    TypeID     = projectile.ProjectileType.ID,
                    FaceDir    = projectile.FaceInTheDirectionOfMovement,
                    Trigger    = projectile.TriggerCollisions,
                    UserPlugin = new PluginData()
                };

                try {
                    projectile.ProjectilePlugin.SaveState(new PluginDataWrapper(stProjectile.UserPlugin,
                                                                                projectile.Level));
                }
                catch (Exception e) {
                    string message = $"Saving projectile plugin failed with Exception: {e.Message}";
                    Urho.IO.Log.Write(LogLevel.Error, message);
                    throw new SavingException(message, e);
                }


                foreach (var component in projectile.Node.Components)
                {
                    var defaultComponent = component as DefaultComponent;
                    if (defaultComponent != null)
                    {
                        stProjectile.DefaultComponents.Add(defaultComponent.SaveState());
                    }
                }

                return(stProjectile);
            }