//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); } }
//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; } } } }
//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; } }