예제 #1
0
    public void NetFire(ProjectileID ProjectileId, int Firer, Vector3 Position, Vector3 Rotation, Vector3 Momentum, string NameArg)
    {
        var Instance = (IProjectile)Data[ProjectileId].Scene.Instance();

        Instance.FirerId         = Firer;
        Instance.Translation     = Position;
        Instance.RotationDegrees = Rotation;
        Instance.Momentum        = Momentum;
        Instance.Name            = NameArg;
        World.EntitiesRoot.AddChild((Node)Instance);
    }
        private void SetupExplosivesDictionary()
        {
            InterestingExplosives = new Dictionary <short, string>();
            ProjectileID projectileId = new ProjectileID();
            Type         type         = projectileId.GetType();

            foreach (string explosive in ExplosivesConfig.Explosives)
            {
                short id = (short)type.GetField(explosive).GetValue(projectileId);
                InterestingExplosives.Add(id, explosive);
            }
        }
예제 #3
0
        public static void Initialize()
        {
            BaseTypes = new List <Type>();

            List <Type> TypeList = Assembly.GetExecutingAssembly().GetTypes()
                                   .Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(ProjectileBase)) && t.Namespace == "ProjectMove.Content.Projectile.ProjectileTypes")
                                   .ToList();

            for (ushort i = 0; i < TypeList.Count; i++)
            {
                Type type = TypeList[i];

                BaseTypes.Add(type);
                ProjectileID.Add(type, i);
            }
        }
예제 #4
0
    public static void Fire(ProjectileID ProjectileId, Player UsingPlayer)
    {
        int     Firer    = UsingPlayer.Id;
        Vector3 Position = UsingPlayer.ProjectileEmitter.GlobalTransform.origin;
        Vector3 Rotation = new Vector3(-UsingPlayer.IntendedLookVertical, UsingPlayer.LookHorizontal, 0);
        Vector3 Momentum = new Vector3(0, 0, Data[ProjectileId].InitialSpeed)
                           .Rotated(new Vector3(1, 0, 0), Deg2Rad(Rotation.x))
                           .Rotated(new Vector3(0, 1, 0), Deg2Rad(Rotation.y));
        string NameArg = System.Guid.NewGuid().ToString();

        if (Net.Work.IsNetworkServer())
        {
            Self.NonStaticFire(ProjectileId, Firer, Position, Rotation, Momentum, NameArg);
        }
        else
        {
            Self.RpcId(Net.ServerId, nameof(NonStaticFire), ProjectileId, Firer, Position, Rotation, Momentum, NameArg);
        }
    }
예제 #5
0
    public void ActualFire(ProjectileID ProjectileId, int Firer, Vector3 Position, Vector3 Rotation, Vector3 Momentum, string NameArg)
    {
        if (World.EntitiesRoot.HasNode(NameArg))
        {
            return;
        }

        var Instance = (IProjectile)Data[ProjectileId].Scene.Instance();

        Instance.ProjectileId    = ProjectileId;
        Instance.FirerId         = Firer;
        Instance.Translation     = Position;
        Instance.RotationDegrees = Rotation;
        Instance.Momentum        = Momentum;
        Instance.Name            = NameArg;
        World.EntitiesRoot.AddChild((Node)Instance);

        if (Net.Work.IsNetworkServer())
        {
            Entities.SendCreate(Instance);
        }
    }
예제 #6
0
        public void Load(TagCompound tag)
        {
            type      = (Type)tag.Get <int>("Type");
            uniqueKey = tag.GetString("UniqueKey");

            switch (type)
            {
            case Type.Item:
                id = ItemID.TypeFromUniqueKey(uniqueKey);
                break;

            case Type.NPC:
                id = NPCID.TypeFromUniqueKey(uniqueKey);
                break;

            case Type.Projectile:
                id = ProjectileID.TypeFromUniqueKey(uniqueKey);
                break;
            }

            animation = new DrawAnimationVertical(tag.Get <int>("TicksPerFrame"), tag.Get <int>("FrameCount"));
        }
예제 #7
0
        public IconData(Type type, int id)
        {
            this.type = type;
            this.id   = id;

            switch (type)
            {
            case Type.Item:
                uniqueKey = ItemID.GetUniqueKey(id);
                animation = Main.itemAnimations[id] as DrawAnimationVertical ?? new DrawAnimationVertical(0, 1);
                break;

            case Type.NPC:
                uniqueKey = NPCID.GetUniqueKey(id);
                animation = new DrawAnimationVertical(5, Main.npcFrameCount[id]);
                break;

            case Type.Projectile:
                uniqueKey = ProjectileID.GetUniqueKey(id);
                animation = new DrawAnimationVertical(5, Main.projFrames[id]);
                break;
            }
        }
예제 #8
0
 public ProjectileDefinition(int type) : base(ProjectileID.GetUniqueKey(type))
 {
 }
예제 #9
0
 private void NonStaticFire(ProjectileID ProjectileId, int Firer, Vector3 Position, Vector3 Rotation, Vector3 Momentum, string NameArg)
 {
     NetFire(ProjectileId, Firer, Position, Rotation, Momentum, NameArg);
     Net.SteelRpc(this, nameof(NetFire), ProjectileId, Firer, Position, Rotation, Momentum, NameArg);
 }