Пример #1
0
 //player collisions with aabb boxes
 public void PlayerCollision(AABB whichPlayerCollider, AABB collidingWith, rl.KeyboardKey forwardKey, rl.KeyboardKey backwardsKey, SceneObject whichTankObj)
 {
     if (whichPlayerCollider.Overlaps(collidingWith) && (rl.Raylib.IsKeyDown(forwardKey)))
     {
         MoveBackwards(whichTankObj);
     }
     else if (whichPlayerCollider.Overlaps(collidingWith) && (rl.Raylib.IsKeyDown(backwardsKey)))
     {
         MoveForward(whichTankObj);
     }
 }
Пример #2
0
        //interacting each bullet has with objects in the scene such as destroying them, damageing player hitting collision boxes etc
        public void ForEachBullet(List <Projectile> whichList, AABB whichBulletCollider, ref int Whichscore, AABB whichTargetcollider, AABB whichPlayerCollider, ref float health)
        {
            if (whichList.Count > 0)
            {
                foreach (Projectile newBullet in whichList)
                {
                    //moves bullet forward in facing direction * speed
                    newBullet.OnUpdate(deltaTime);

                    //debug drawing collider box updateing with bullets pos
                    if (rl.Raylib.IsKeyDown(rl.KeyboardKey.KEY_H))
                    {
                        rl.Raylib.DrawRectangleLines(Convert.ToInt32(newBullet.globalTransform.m7 - 10), Convert.ToInt32(newBullet.globalTransform.m8) - 10, 15, 15, rl.Color.GREEN);
                    }
                    //bullet collider box updating with bullets pos
                    whichBulletCollider.Resize(new Vector3(newBullet.globalTransform.m7 - 10, newBullet.globalTransform.m8 - 10, 0),
                                               new Vector3(newBullet.globalTransform.m7 + 10, newBullet.globalTransform.m8 + 10, 0));

                    //if bullet enters testbox do somthing
                    if (whichBulletCollider.Overlaps(whichTargetcollider))
                    {
                        Console.WriteLine("HIT TARGET");
                        Whichscore += 1;
                        Console.WriteLine(player1Score);
                        whichList.Remove(newBullet);
                        break;
                    }
                    if (whichBulletCollider.Overlaps(whichPlayerCollider))
                    {
                        health -= 10;
                        whichList.Remove(newBullet);
                        break;
                    }
                    if (newBullet.localTransform.m7 < 0.0f || newBullet.localTransform.m7 > rl.Raylib.GetScreenWidth() || newBullet.localTransform.m8 < 0.0f || newBullet.localTransform.m8 > rl.Raylib.GetScreenHeight())
                    {
                        Console.WriteLine("HIT WALL");
                        whichList.Remove(newBullet);
                        break;
                    }
                }
            }
        }
Пример #3
0
        //update happening every frame after init
        public void Update()
        {
            lastTime           = currentTime;
            currentTime        = stopwatch.ElapsedMilliseconds;
            deltaTime          = (currentTime - lastTime) / 1000.0f;
            player1ShootTimer += deltaTime;
            player2ShootTimer += deltaTime;

            if (rl.Raylib.IsKeyDown(rl.KeyboardKey.KEY_P))
            {
                // empty to stop the game ok?
            }
            else
            {
                //TANK 1 Movements
                TankMovement(tankObject1, turretObject1, rl.KeyboardKey.KEY_A, rl.KeyboardKey.KEY_D, rl.KeyboardKey.KEY_W, rl.KeyboardKey.KEY_S, rl.KeyboardKey.KEY_Q, rl.KeyboardKey.KEY_E, rl.KeyboardKey.KEY_SPACE, bulletsList1, ref player1ShootTimer);
                //TANK 2 Movements
                TankMovement(tankObject2, turretObject2, rl.KeyboardKey.KEY_KP_4, rl.KeyboardKey.KEY_KP_6, rl.KeyboardKey.KEY_KP_8, rl.KeyboardKey.KEY_KP_5, rl.KeyboardKey.KEY_KP_7, rl.KeyboardKey.KEY_KP_9, rl.KeyboardKey.KEY_KP_0, bulletsList2, ref player2ShootTimer);

                if (player1Health <= 0)
                {
                    Console.WriteLine("died");
                    tankObject1.SetPosition(rl.Raylib.GetScreenWidth() / 3.0f, rl.Raylib.GetScreenHeight() / 2.0f);
                    player1Health = 100;
                }


                //interaction each bullet has in world when bullet collides with certain game objects
                ForEachBullet(bulletsList1, bulletCollider1, ref player1Score, targetCollider2, player2Collider, ref player2Health);
                ForEachBullet(bulletsList2, bulletCollider2, ref player2Score, targetCollider1, player1Collider, ref player1Health);

                //resizing the collider around each player object every update
                ResizingCollider(player1Collider, tankObject1, tankSprite1);
                ResizingCollider(player2Collider, tankObject2, tankSprite2);

                //resizing the collider around each target object every update
                ResizingCollider(targetCollider1, targetObject1, targetSprite1);
                ResizingCollider(targetCollider2, targetObject2, targetSprite2);

                //resizing the collider around each blade object every update
                ResizingCollider(bladeBoxCollider, bladeObject, bladeSprite);

                //moving target objects forward
                MoveTargetForward(targetObject1);
                MoveTargetForward(targetObject2);

                //check collision between player 1 collider boxes if collision players speed is minus what ever direction player is moving
                PlayerCollision(player1Collider, leftWall, rl.KeyboardKey.KEY_W, rl.KeyboardKey.KEY_S, tankObject1);
                PlayerCollision(player1Collider, rightWall, rl.KeyboardKey.KEY_W, rl.KeyboardKey.KEY_S, tankObject1);
                PlayerCollision(player1Collider, topWall, rl.KeyboardKey.KEY_W, rl.KeyboardKey.KEY_S, tankObject1);
                PlayerCollision(player1Collider, bottomWall, rl.KeyboardKey.KEY_W, rl.KeyboardKey.KEY_S, tankObject1);
                PlayerCollision(player1Collider, middleWall, rl.KeyboardKey.KEY_W, rl.KeyboardKey.KEY_S, tankObject1);
                //check collision between player 2 collider boxes if collision players speed is minus what ever direction player is moving
                PlayerCollision(player2Collider, leftWall, rl.KeyboardKey.KEY_KP_8, rl.KeyboardKey.KEY_KP_5, tankObject2);
                PlayerCollision(player2Collider, rightWall, rl.KeyboardKey.KEY_KP_8, rl.KeyboardKey.KEY_KP_5, tankObject2);
                PlayerCollision(player2Collider, topWall, rl.KeyboardKey.KEY_KP_8, rl.KeyboardKey.KEY_KP_5, tankObject2);
                PlayerCollision(player2Collider, bottomWall, rl.KeyboardKey.KEY_KP_8, rl.KeyboardKey.KEY_KP_5, tankObject2);
                PlayerCollision(player2Collider, middleWall, rl.KeyboardKey.KEY_KP_8, rl.KeyboardKey.KEY_KP_5, tankObject2);


                //rotating blade object to cause it to spin on spot
                bladeObject.RotateZ(deltaTime * 8);
                //moves blade objects m7(x pos) left once of screen reset its pos back on right side of screen
                bladeObject.localTransform.m7 -= 150 * deltaTime;
                if (bladeObject.LocalTransform.m7 <= -400)
                {
                    bladeObject.localTransform.m7 = 1800;
                }
                //PlayerCollision with blade box if player hits box health -= 30/sec while in box
                if (player1Collider.Overlaps(bladeBoxCollider))
                {
                    player1Health -= (deltaTime * 30);
                }
                if (player2Collider.Overlaps(bladeBoxCollider))
                {
                    player2Health -= (deltaTime * 30);
                }

                //checks which player has died and set them back to that players starting pos
                PlayerDead(ref player1Health, tankObject1);
                PlayerDead(ref player2Health, tankObject2);

                lastTime = currentTime;
            }
        }