Example #1
0
        public override void Alert()
        {
            Player p = Player.GetInstance();
            string m = "";

            switch (p.Level)
            {
            case 2:
                m = "You have survived my underlings well. Continue forward.";
                break;

            case 4:
                m = "You're still alive? Excellent...";
                break;

            case 6:
                m = "Yes...Take another step forward to your doom.";
                break;

            case 8:
                m = "So close...Just a few more steps to your doom.";
                break;

            case 10:
                m = "Welcome to my lair. Prepare to die.";
                break;
            }

            if (m != "")
            {
                CommandPost.GetInstance().AddCommand(new BossProclamationCommand(m));
            }
        }
        protected override void OnStopped()
        {
            NetChannel.RemoveRemoteEvent("Client_GamemodeInfo");
            NetChannel.RemoveRemoteEvent("Client_UpdateScores");
            NetChannel.RemoveRemoteEvent("Client_IntelPickedUp");
            NetChannel.RemoveRemoteEvent("Client_IntelDropped");
            NetChannel.RemoveRemoteEvent("Client_IntelCaptured");
            NetChannel.RemoveRemoteEvent("Client_IntelReturned");

            objectComponent.RemoveInstantiationEvent("Client_CreateIntel");
            objectComponent.RemoveInstantiationEvent("Client_CreateCommandPost");

            redIntel  = null;
            blueIntel = null;
            redPost   = null;
            bluePost  = null;

            TeamAScore = 0;
            TeamBScore = 0;
            ScoreCap   = 3;

            OurPlayerHasIntel = false;

            intelAudioSource?.Dispose();

            base.OnStopped();
        }
        private void CharacterController_OnCollision(object sender, PhysicsBodyComponent e)
        {
            if (this.intel == null)
            {
                Intel intel = e.GameObject as Intel;

                if (intel != null)
                {
                    if (intel.RequestOwnership(this))
                    {
                        DashCMD.WriteLine("[SPPlayer] Picked up the intel", ConsoleColor.Green);
                        this.intel          = intel;
                        intel.IsIconVisible = false;
                    }
                }
            }

            CommandPost commandPost = e.GameObject as CommandPost;

            if (commandPost != null)
            {
                if (commandPost.Team == Team)
                {
                    Refresh();

                    if (intel != null)
                    {
                        intel.Return();
                        intel.IsIconVisible = true;
                        intel = null;
                    }
                }
            }
        }
Example #4
0
        private void Post_OnCollision(object sender, PhysicsBodyComponent e)
        {
            ServerMPPlayer player = e.GameObject as ServerMPPlayer;

            if (player != null)
            {
                CommandPost post = ((PhysicsBodyComponent)sender).GameObject as CommandPost;
                if (post.Team == player.Team)
                {
                    player.Refresh();

                    if (player.HasIntel)
                    {
                        CaptureIntel(player, player.Intel);
                    }
                }
            }
            else if (e.GameObject is Intel intel)
            {
                if (intel.Holder == null)
                {
                    CommandPost post = ((PhysicsBodyComponent)sender).GameObject as CommandPost;
                    if (post.Team != intel.Team)
                    {
                        CaptureIntel(intel.LastHolder as ServerMPPlayer, intel);
                    }
                }
            }
        }
Example #5
0
        void LoadFallbackGameObjects()
        {
            Vector3 blueTeamOrigin =
                World.Terrain.Chunks[new IndexPosition(World.Terrain.Width - 1, 0, World.Terrain.Depth - 1)].Position;

            redIntel  = new Intel(GetSpawnLocation(200, 200, Block.CUBE_SIZE * 1.5f), Team.A);
            blueIntel = new Intel(GetSpawnLocation(blueTeamOrigin.X - 200, blueTeamOrigin.Z - 200,
                                                   Block.CUBE_SIZE * 1.5f), Team.B);

            redPost  = new CommandPost(GetSpawnLocation(100, 100, Block.CUBE_SIZE * 3), Team.A);
            bluePost = new CommandPost(GetSpawnLocation(blueTeamOrigin.X - 75, blueTeamOrigin.Z - 75,
                                                        Block.CUBE_SIZE * 3), Team.B);

            redIntel.OnPickedUp  += Intel_OnPickedUp;
            redIntel.OnDropped   += Intel_OnDropped;
            redIntel.OnReturned  += Intel_OnReturned;
            blueIntel.OnPickedUp += Intel_OnPickedUp;
            blueIntel.OnDropped  += Intel_OnDropped;
            blueIntel.OnReturned += Intel_OnReturned;

            redPost.PhysicsBody.OnCollision  += Post_OnCollision;
            bluePost.PhysicsBody.OnCollision += Post_OnCollision;

            // Instantiate intels over network
            objectComponent.NetworkInstantiate(redIntel, "Client_CreateIntel", null,
                                               redIntel.Transform.Position.X, redIntel.Transform.Position.Y, redIntel.Transform.Position.Z, (byte)redIntel.Team);
            objectComponent.NetworkInstantiate(blueIntel, "Client_CreateIntel", null,
                                               blueIntel.Transform.Position.X, blueIntel.Transform.Position.Y, blueIntel.Transform.Position.Z, (byte)blueIntel.Team);
            objectComponent.NetworkInstantiate(redPost, "Client_CreateCommandPost", null,
                                               redPost.Transform.Position.X, redPost.Transform.Position.Y, redPost.Transform.Position.Z, (byte)redPost.Team);
            objectComponent.NetworkInstantiate(bluePost, "Client_CreateCommandPost", null,
                                               bluePost.Transform.Position.X, bluePost.Transform.Position.Y, bluePost.Transform.Position.Z, (byte)bluePost.Team);
        }
Example #6
0
        private void Post_OnCollision(object sender, PhysicsBodyComponent e)
        {
            ServerMPPlayer player = e.GameObject as ServerMPPlayer;

            if (player != null)
            {
                CommandPost post = ((PhysicsBodyComponent)sender).GameObject as CommandPost;
                if (post.Team == player.Team)
                {
                    player.Refresh();
                }
            }
        }
        protected override void OnStopped()
        {
            NetChannel.RemoveRemoteEvent("Client_GamemodeInfo");
            NetChannel.RemoveRemoteEvent("Client_UpdateScores");

            objectComponent.RemoveInstantiationEvent("Client_CreateCommandPost");

            redPost  = null;
            bluePost = null;

            TeamAScore = 0;
            TeamBScore = 0;
            ScoreCap   = 100;

            base.OnStopped();
        }
Example #8
0
        void LoadFallbackGameObjects()
        {
            Vector3 blueTeamOrigin =
                World.Terrain.Chunks[new IndexPosition(World.Terrain.Width - 1, 0, World.Terrain.Depth - 1)].Position;

            redPost  = new CommandPost(GetSpawnLocation(100, 100, Block.CUBE_SIZE * 3), Team.A);
            bluePost = new CommandPost(GetSpawnLocation(blueTeamOrigin.X - 75, blueTeamOrigin.Z - 75,
                                                        Block.CUBE_SIZE * 3), Team.B);

            redPost.PhysicsBody.OnCollision  += Post_OnCollision;
            bluePost.PhysicsBody.OnCollision += Post_OnCollision;

            objectComponent.NetworkInstantiate(redPost, "Client_CreateCommandPost", null,
                                               redPost.Transform.Position.X, redPost.Transform.Position.Y, redPost.Transform.Position.Z, (byte)redPost.Team);
            objectComponent.NetworkInstantiate(bluePost, "Client_CreateCommandPost", null,
                                               bluePost.Transform.Position.X, bluePost.Transform.Position.Y, bluePost.Transform.Position.Z, (byte)bluePost.Team);
        }
Example #9
0
        protected override void OnStarted()
        {
            Server.OnUserDisconnected += Server_OnUserDisconnected;

            // Send gamemode info
            NetChannel.FireEventForAllConnections("Client_GamemodeInfo", (ushort)SCORE_CAP);

            var commandposts = World.Description.GetObjectsByTag("CommandPost");

            if (commandposts.Count == 2)
            {
                // Load command posts
                foreach (WorldObjectDescription ob in commandposts)
                {
                    Vector3 position = ob.GetVector3("Position");
                    Team    team     = (Team)(ob.GetField <byte>("Team") ?? 0);

                    CommandPost post = new CommandPost(position, team);
                    if (team == Team.A)
                    {
                        redPost = post;
                    }
                    else
                    {
                        bluePost = post;
                    }

                    post.PhysicsBody.OnCollision += Post_OnCollision;

                    objectComponent.NetworkInstantiate(post, "Client_CreateCommandPost", null,
                                                       position.X, position.Y, position.Z, (byte)team);
                }
            }
            else
            {
                DashCMD.WriteWarning("[TDMGamemode] Current world does not have a proper gameobject setup! Falling back to default.");
                LoadFallbackGameObjects();
            }

            base.OnStarted();
        }
Example #10
0
        public SPWorld(MasterRenderer renderer)
            : base(renderer)
        {
            WorldDescription desc = LoadFromFile(Program.GetConfigString("Singleplayer/world"));

            spawnPos = new Vector3(100, 400, 100);

            var commandposts = desc.GetObjectsByTag("CommandPost");

            foreach (WorldObjectDescription ob in commandposts)
            {
                Vector3     position    = ob.GetVector3("Position");
                Team        team        = (Team)(ob.GetField <byte>("Team") ?? 0);
                CommandPost commandPost = new CommandPost(position, team);
                AddGameObject(commandPost);

                if (team == Team.A)
                {
                    spawnPos = position;
                }
            }

            var intels = desc.GetObjectsByTag("Intel");

            foreach (WorldObjectDescription ob in intels)
            {
                Vector3 position    = ob.GetVector3("Position");
                Team    team        = (Team)(ob.GetField <byte>("Team") ?? 0);
                Intel   editorIntel = new Intel(position, team);
                AddGameObject(editorIntel);
            }

            Player = new SPPlayer(Renderer, this, Camera.Active, spawnPos, Team.A);
            AddGameObject(Player);
            hud        = new HUD(Renderer);
            hud.Player = Player;
            hud.ShowCharacterInformation = true;
            hud.Enable();

            Player.AttachCamera();
        }
        INetCreatable I_CreateCommandPost(ushort id, bool isAppOwner, NetBuffer data)
        {
            // Read the packet
            float x    = data.ReadFloat();
            float y    = data.ReadFloat();
            float z    = data.ReadFloat();
            Team  team = (Team)data.ReadByte();

            CommandPost post = new CommandPost(new Vector3(x, y, z), team);

            if (team == Team.A)
            {
                redPost = post;
            }
            else
            {
                bluePost = post;
            }

            return(post);
        }
Example #12
0
        protected override void OnStarted()
        {
            Server.OnUserDisconnected += Server_OnUserDisconnected;

            var commandposts = World.Description.GetObjectsByTag("CommandPost");
            var intels       = World.Description.GetObjectsByTag("Intel");

            if (commandposts.Count == 2 && intels.Count == 2)
            {
                // Load intel
                foreach (WorldObjectDescription ob in intels)
                {
                    Vector3 position = ob.GetVector3("Position");
                    Team    team     = (Team)(ob.GetField <byte>("Team") ?? 0);

                    Intel intel = new Intel(position, team);
                    if (team == Team.A)
                    {
                        redIntel = intel;
                    }
                    else
                    {
                        blueIntel = intel;
                    }

                    intel.OnPickedUp += Intel_OnPickedUp;
                    intel.OnDropped  += Intel_OnDropped;
                    intel.OnReturned += Intel_OnReturned;

                    objectComponent.NetworkInstantiate(intel, "Client_CreateIntel", null,
                                                       position.X, position.Y, position.Z, (byte)team);
                }

                // Load command posts
                foreach (WorldObjectDescription ob in commandposts)
                {
                    Vector3 position = ob.GetVector3("Position");
                    Team    team     = (Team)(ob.GetField <byte>("Team") ?? 0);

                    CommandPost post = new CommandPost(position, team);
                    if (team == Team.A)
                    {
                        redPost = post;
                    }
                    else
                    {
                        bluePost = post;
                    }

                    post.PhysicsBody.OnCollision += Post_OnCollision;

                    objectComponent.NetworkInstantiate(post, "Client_CreateCommandPost", null,
                                                       position.X, position.Y, position.Z, (byte)team);
                }
            }
            else
            {
                DashCMD.WriteWarning("[CTFGamemode] Current world does not have a proper gameobject setup! Falling back to default.");
                LoadFallbackGameObjects();
            }

            base.OnStarted();
        }
Example #13
0
    void FixedUpdate()
    {
        int layerMask = LayerMask.GetMask(mask, "Ground");

        if (!hasHit)
        {
            RaycastHit hit;
            if (Physics.Raycast(transform.position, transform.forward, out hit, speed, layerMask))
            {
                hasHit = true;
                transform.Translate(transform.forward * hit.distance, Space.World);
                Rigidbody rb = hit.transform.root.GetComponent <Rigidbody>();
                if (rb != null)
                {
                    rb.AddForceAtPosition(transform.forward * force, hit.point, ForceMode.Impulse);
                }
                Enemy enemy = hit.transform.root.GetComponentInChildren <Enemy>();
                if (enemy != null)
                {
                    enemy.DeliverDamage(damage, shooter);
                    if (enemy.HasShield() && enemy.GetComponent <ActorCommons>().HasShield())
                    {
                        hasHit = false;
                        Vector3 reflected = Vector3.Reflect(transform.forward, hit.normal);
                        transform.rotation = Quaternion.LookRotation(reflected, Vector3.up);
                        transform.Translate(transform.forward * (speed - hit.distance), Space.World);
                    }
                    else
                    {
                        if (turrFrom != null)
                        {
                            // Vampirism works only on health, not shields
                            turrFrom.ConfirmHit();
                        }
                    }
                }
                else if (hit.transform.tag == "Player")
                {
                    CommandPost cp = hit.transform.root.GetComponent <CommandPost>();
                    if (cp != null)
                    {
                        cp.DeliverDamage(damage);
                    }
                    else
                    {
                        hit.transform.root.GetComponent <Turret>().DeliverDamage(damage);
                    }
                }
                GameObject spks = Instantiate(sparks, hit.point, Quaternion.identity);
                if (shooter == 1)
                {
                    if (isFireworks)
                    {
                        spks.transform.localScale *= 3.0f;
                    }
                }
            }
            else
            {
                transform.Translate(transform.forward * speed, Space.World);
            }
            if (hasHit)
            {
                transform.GetChild(0).gameObject.SetActive(false);
            }
        }
    }