Beispiel #1
0
        private void FireSnowball()
        {
            SpawnSnowball snowball = new SpawnSnowball
            {
                UserID    = UserID,
                PosX      = transform.position.x,
                PosY      = transform.position.y,
                Direction = _facing,
            };

            Socket.Instance.SendPacket(snowball, Packets.SpawnSnowball);
        }
Beispiel #2
0
        private static void HandleSpawnSnowball(SpawnSnowball spawn)
        {
            if (spawn == null)
            {
                throw new WrongPacketTypeException();
            }
            Player player = World.Instance.GetPlayer(spawn.UserID);

            if (player.Carrying)
            {
                return;
            }
            GameObject snowball = GameObject.Instantiate(Prefabs.Instance.SnowballPrefab);

            snowball.transform.position = new Vector2(spawn.PosX, spawn.PosY);
            Vector2     angle     = Quaternion.AngleAxis(spawn.Direction, Vector3.forward) * Vector3.down;
            Rigidbody2D rigidbody = snowball.GetComponent <Rigidbody2D>();
            // Ignore collisions with player who threw it
            Rigidbody2D playerRigidbody = player.GetComponent <Rigidbody2D>();

            // TODO: Make this a helper function in utilities
            Collider2D[] playerCols = new Collider2D[playerRigidbody.attachedColliderCount];
            Collider2D[] snowCols   = new Collider2D[rigidbody.attachedColliderCount];
            rigidbody.GetAttachedColliders(snowCols);
            foreach (Collider2D snowCol in snowCols)
            {
                foreach (Collider2D playerCol in playerCols)
                {
                    Physics2D.IgnoreCollision(snowCol, playerCol);
                }
            }

            rigidbody.velocity = angle * Snowball.Speed;

            int id = World.Instance.AddObject(snowball);

            snowball.GetComponent <Snowball>().Initialize(id, spawn.UserID);

            SnowballSync sync = new SnowballSync
            {
                ObjectID  = id,
                PosX      = spawn.PosX,
                PosY      = spawn.PosY,
                Direction = spawn.Direction,
                Velocity  = Snowball.Speed,
            };

            Socket.Instance.SendPacket(sync, Packets.SnowballSync);
        }