Beispiel #1
0
    public void Fire(Vector3 towards)
    {
        if (CustomNetworkManager.isServer)
        {
            return;
        }

        if (numArrowsLeft > 0)
        {
            Vector3 towardsFromTowerNonFlat = towards - arrowOrigin.position;
            Vector3 towardsFromTower        = new Vector3(towardsFromTowerNonFlat.x, 0, towardsFromTowerNonFlat.z); // Remove y-component
            Vector3 eulerDir = Quaternion.LookRotation(towardsFromTower).eulerAngles;

            // Send msg to server that we wish to fire an projectile and await broadcast from server before we spawn local copy
            Color             objColor   = calculateArrowColor();
            Vector3           arrowScale = calculateArrowScale();
            ProjectileDetails pDetails   = new ProjectileDetails()
            {
                dmg = damage, range = range
            };
            FireProjectileMsg msg = NetworkUtils.cFireProjectileMsg(ProjectileType.PlayerArrow, pDetails, arrowOrigin.position, eulerDir, arrowScale, speed, objColor, 8);
            NetworkManager.singleton.client.Send((short)CustomProtocol.FireProjectile, msg);

            numArrowsLeft -= 1;
        }
    }
Beispiel #2
0
    private void handleFireProjectileMsg(NetworkMessage data)
    {
        FireProjectileMsg msg  = data.ReadMessage <FireProjectileMsg>();
        VisualObject      proj = Instantiate(visualProjectilePrefabs[msg.type], msg.objDetails.pos, Quaternion.identity).GetComponent <VisualObject>(); // Spawn real projectile on only server

        spawnedProjectiles.Add(msg.objDetails.id, proj);
        proj.init(msg.objDetails);
    }
    private void handleFireProjectileMsg(NetworkMessage data)
    {
        FireProjectileMsg msg = data.ReadMessage <FireProjectileMsg>();
        ProjectileBase    obj = Instantiate(projectilePrefabs[msg.type], msg.objDetails.pos, Quaternion.identity).GetComponent <ProjectileBase>(); // Spawn real projectile on only server

        msg.objDetails.id = getNewProjectileID();                                                                                                  //Give the new projectile an ID, so we can locate and destroy it later
        spawnedProjectiles.Add(msg.objDetails.id, obj);
        obj.initProjectile(msg.objDetails, msg.projDetails);

        NetworkServer.SendToAll((short)CustomProtocol.FireProjectile, msg);
    }