mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
using Uno;
 | 
						|
using Uno.Collections;
 | 
						|
using Uno.Graphics;
 | 
						|
using Uno.Scenes;
 | 
						|
using Uno.Content;
 | 
						|
using Uno.Content.Models;
 | 
						|
 | 
						|
namespace PONG2D
 | 
						|
{
 | 
						|
	public class Pong : Node
 | 
						|
	{
 | 
						|
		float2 _player1Pos;
 | 
						|
		float2 _player2Pos;
 | 
						|
		float2 ballPosition;
 | 
						|
		float2 ballVelocity;
 | 
						|
		float2 rectangleSize;
 | 
						|
		
 | 
						|
		Rect player1Rect;
 | 
						|
		Rect player2Rect;
 | 
						|
		Rect ballRect;
 | 
						|
		
 | 
						|
		float2 resolution = Context.VirtualResolution;
 | 
						|
		
 | 
						|
		Random random = new Random(1);
 | 
						|
		
 | 
						|
		
 | 
						|
		float2 Player1Pos
 | 
						|
		{
 | 
						|
			get { return _player1Pos; }
 | 
						|
			set
 | 
						|
			{
 | 
						|
				_player1Pos = Math.Clamp(value, float2(0, 0), resolution - rectangleSize);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		float2 Player2Pos
 | 
						|
		{
 | 
						|
			get { return _player2Pos; }
 | 
						|
			set
 | 
						|
			{
 | 
						|
				_player2Pos = Math.Clamp(value, float2(0, 0), resolution - rectangleSize);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		public Pong()
 | 
						|
		{
 | 
						|
			Uno.Scenes.Input.AddGlobalListener(this);
 | 
						|
		}
 | 
						|
		
 | 
						|
		protected override void OnInitialize()
 | 
						|
		{
 | 
						|
			base.OnInitialize();
 | 
						|
			UpdateValues();	
 | 
						|
			
 | 
						|
		}
 | 
						|
 | 
						|
		void UpdateValues()
 | 
						|
		{
 | 
						|
			rectangleSize = float2(resolution.X / 80f, resolution.Y / 5f);
 | 
						|
			_player1Pos = float2(0f);
 | 
						|
			_player2Pos = float2(Context.VirtualResolution.X - rectangleSize.X, 0f);
 | 
						|
			
 | 
						|
			player1Rect = new Rect(_player1Pos, rectangleSize);
 | 
						|
			player2Rect = new Rect(_player2Pos, rectangleSize);
 | 
						|
			
 | 
						|
			ballPosition = float2(resolution.X * 0.5f - 10f, resolution.Y * 0.5f - 10f);
 | 
						|
			ballRect = new Rect(ballPosition, float2(20f));
 | 
						|
			
 | 
						|
			
 | 
						|
			SpwanBall();
 | 
						|
			
 | 
						|
		}
 | 
						|
		
 | 
						|
		void SpwanBall()
 | 
						|
		{
 | 
						|
			ballRect.Position = float2(resolution.X * 0.5f - 10f, resolution.Y * 0.5f - 10f);
 | 
						|
			ballVelocity = float2(5f, 10f) * 0.5f;
 | 
						|
		}
 | 
						|
		
 | 
						|
		void OnWindowResize(object sender, EventArgs args)
 | 
						|
		{
 | 
						|
			//UpdateValues();
 | 
						|
		}
 | 
						|
		
 | 
						|
		protected override void OnUpdate()
 | 
						|
		{
 | 
						|
			base.OnUpdate();
 | 
						|
			
 | 
						|
			var padVelocity = resolution.Y * (float)Application.Current.FrameInterval * 4f;
 | 
						|
			if (Input.IsKeyDown(Uno.Platform.Key.Up))
 | 
						|
			{
 | 
						|
				Player1Pos = float2(Player1Pos.X, Player1Pos.Y - padVelocity);	
 | 
						|
			}
 | 
						|
			
 | 
						|
			if (Input.IsKeyDown(Uno.Platform.Key.Down))
 | 
						|
			{
 | 
						|
				Player1Pos = float2(Player1Pos.X, Player1Pos.Y + padVelocity);	
 | 
						|
			}
 | 
						|
 | 
						|
			if (Input.IsKeyDown(Uno.Platform.Key.W))
 | 
						|
			{
 | 
						|
				Player2Pos = float2(Player2Pos.X, Player2Pos.Y - padVelocity);	
 | 
						|
			}
 | 
						|
 | 
						|
			if (Input.IsKeyDown(Uno.Platform.Key.S))
 | 
						|
			{
 | 
						|
				Player2Pos = float2(Player2Pos.X, Player2Pos.Y + padVelocity);	
 | 
						|
			}
 | 
						|
			player1Rect.Position = Player1Pos;
 | 
						|
			player2Rect.Position = Player2Pos;
 | 
						|
			
 | 
						|
			if (ballRect.Position.X > resolution.X || ballRect.Position.X < 0)
 | 
						|
			{
 | 
						|
				SpwanBall();
 | 
						|
			}
 | 
						|
			if (ballRect.Position.Y > resolution.Y ||
 | 
						|
				ballRect.Position.Y < 0)
 | 
						|
			{
 | 
						|
				ballVelocity.Y *= -1f;
 | 
						|
			}
 | 
						|
			
 | 
						|
			if (ballRect.Intersects(player1Rect) ||
 | 
						|
				ballRect.Intersects(player2Rect))
 | 
						|
			{
 | 
						|
				ballVelocity.X *= -1f;
 | 
						|
			}
 | 
						|
			
 | 
						|
			ballRect.Position += ballVelocity;
 | 
						|
			
 | 
						|
		}
 | 
						|
		
 | 
						|
        protected override void OnDraw()
 | 
						|
        {
 | 
						|
			Uno.Drawing.RoundedRectangle.Draw(player1Rect.Position, player1Rect.Size, float4(1f), 0);
 | 
						|
			Uno.Drawing.RoundedRectangle.Draw(player2Rect.Position, player2Rect.Size, float4(1f), 0);
 | 
						|
			Uno.Drawing.RoundedRectangle.Draw(ballRect.Position, ballRect.Size, float4(1f), 0f);
 | 
						|
        }
 | 
						|
	}
 | 
						|
} |