generated from sigonasr2/CPlusPlusProjectTemplate
	Input parsing
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
		
							parent
							
								
									2936d5bd7f
								
							
						
					
					
						commit
						a9a2cd9c7f
					
				
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										106
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								main.cpp
									
									
									
									
									
								
							| @ -1,89 +1,41 @@ | |||||||
|  | #define OLC_PGE_HEADLESS | ||||||
| #define OLC_PGE_APPLICATION | #define OLC_PGE_APPLICATION | ||||||
| #include "pixelGameEngine.h" | #include "pixelGameEngine.h" | ||||||
| #include "olcutils.h" |  | ||||||
| 
 | 
 | ||||||
| using namespace olc; | using namespace olc; | ||||||
| 
 | 
 | ||||||
| class Example : public olc::PixelGameEngine | struct Monkey{ | ||||||
| { |     int number=999999999; | ||||||
| public: |     std::string monkey1=""; | ||||||
| 	Example() |     std::string operation=""; | ||||||
| 	{ |     std::string monkey2=""; | ||||||
| 		sAppName = "Example"; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     bool RayVsRect(const vf2d ray_origin, const vf2d ray_dir, const olc::utils::geom2d::rect<float> target, vf2d&contact_point, vf2d&contact_normal, float&t_hit_near){ |  | ||||||
| 
 |  | ||||||
|         contact_normal = { 0, 0 }; |  | ||||||
|         contact_point = { 0, 0 }; |  | ||||||
| 
 |  | ||||||
|         vf2d t_near = {(target.pos.x - ray_origin.x) / ray_dir.x, (target.pos.y - ray_origin.y) / ray_dir.y}; |  | ||||||
|         vf2d t_far = {(target.pos.x + target.size.x - ray_origin.x) / ray_dir.x, (target.pos.y + target.size.y - ray_origin.y) / ray_dir.y}; |  | ||||||
| 
 |  | ||||||
|         if (t_near.x > t_far.x) {float b; b = t_near.x; t_near.x = t_far.x; t_far.x = b;}; |  | ||||||
|         if (t_near.y > t_far.y) {float b; b = t_near.y; t_near.y = t_far.y; t_far.y = b;}; |  | ||||||
| 
 |  | ||||||
|         if (t_near.x > t_far.y || t_near.y > t_far.x) return false; |  | ||||||
| 
 |  | ||||||
|         t_hit_near = fmax(t_near.x, t_near.y); |  | ||||||
|         float t_hit_far = fmin(t_far.x, t_far.y); |  | ||||||
| 
 |  | ||||||
|         if (t_hit_far < 0) return false; |  | ||||||
| 
 |  | ||||||
|         contact_point.x = ray_origin.x + t_hit_near * ray_dir.x;  |  | ||||||
|         contact_point.y = ray_origin.y + t_hit_near * ray_dir.y; |  | ||||||
| 
 |  | ||||||
|         if (t_near.x > t_near.y) |  | ||||||
|             if ( 1.0f / ray_dir.x < 0) |  | ||||||
|                 contact_normal = { 1, 0 }; |  | ||||||
|             else |  | ||||||
|                 contact_normal = { -1, 0}; |  | ||||||
|         else  |  | ||||||
|         if ( t_near.x < t_near.y) |  | ||||||
|             if ( 1.0f / ray_dir.y < 0) |  | ||||||
|                 contact_normal = { 0, 1 }; |  | ||||||
|             else |  | ||||||
|                 contact_normal = { 0, -1 }; |  | ||||||
|          |  | ||||||
|         return true; |  | ||||||
| 
 |  | ||||||
|          |  | ||||||
|     } |  | ||||||
|     vf2d originPoint={16,16}; |  | ||||||
| 	bool OnUserCreate() override |  | ||||||
| 	{ |  | ||||||
| 		// Called once at the start, so create things here
 |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	bool OnUserUpdate(float fElapsedTime) override |  | ||||||
| 	{ |  | ||||||
|         vf2d velocity={(GetKey(D).bHeld-GetKey(A).bHeld)*20*fElapsedTime,(GetKey(S).bHeld-GetKey(W).bHeld)*20*fElapsedTime}; |  | ||||||
|         vf2d contact_point; |  | ||||||
|         vf2d contact_normal; |  | ||||||
|         float t_hit_near; |  | ||||||
| 
 |  | ||||||
| 		Clear(Pixel(64,64,255)); |  | ||||||
|         if (!olc::utils::geom2d::overlaps(olc::utils::geom2d::circle<float>{originPoint+velocity,5},olc::utils::geom2d::rect<float>{{32,32},{64,32}})) { |  | ||||||
|             originPoint+=velocity; |  | ||||||
|             DrawCircle(originPoint,5); |  | ||||||
|         } else { |  | ||||||
|             DrawCircle(originPoint,5,RED); |  | ||||||
|         } |  | ||||||
|         DrawLine(originPoint,GetMousePos()); |  | ||||||
| 
 |  | ||||||
|         DrawRect({32,32},{64,32},RayVsRect(originPoint, GetMousePos()-originPoint, olc::utils::geom2d::rect<float>{{32,32},{64,32}},contact_point,contact_normal,t_hit_near)&&t_hit_near<1?YELLOW:WHITE); |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| int main() | int main() | ||||||
| { | { | ||||||
| 	Example demo; |     std::map<std::string,Monkey>monkeys; | ||||||
| 	if (demo.Construct(128, 120, 8, 8)) | 	std::ifstream file("input"); | ||||||
| 		demo.Start(); |     while(file.good()){ | ||||||
|  |         std::string line; | ||||||
|  |         std::getline(file,line); | ||||||
|  |         if (line.length()>0){ | ||||||
|  |             Monkey m{999999999,"","",""}; | ||||||
|  |             std::string name=line.substr(0,4); | ||||||
|  |             if (line.length()==17){ | ||||||
|  |                 m.monkey1=line.substr(6,4); | ||||||
|  |                 m.operation=line.substr(11,1); | ||||||
|  |                 m.monkey2=line.substr(13,4); | ||||||
|  |             } else { | ||||||
|  |                 m.number=std::atoi(line.substr(6,line.size()-6).c_str()); | ||||||
|  |             } | ||||||
|  |             //std::cout<<line<<std::endl;
 | ||||||
|  |             if (m.number!=999999999){ | ||||||
|  |                 std::cout<<"Monkey "<<name<<": "<<m.number<<std::endl; | ||||||
|  |             } else { | ||||||
|  |                 std::cout<<"Monkey "<<name<<": "<<m.monkey1<<" "<<m.operation<<" "<<m.monkey2<<std::endl; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								sig
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sig
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ export AUTO_UPDATE=true | |||||||
| source utils/define.sh | source utils/define.sh | ||||||
| 
 | 
 | ||||||
| define PROJECT_NAME "C++ProjectTemplate" | define PROJECT_NAME "C++ProjectTemplate" | ||||||
| define CUSTOM_PARAMS "-std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -lpulse -lpulse-simple -I/usr/include/lua5.3" | define CUSTOM_PARAMS "-std=c++17 -lX11 -lpthread -lpng -lstdc++fs -I/usr/include/lua5.3" | ||||||
| define LANGUAGE "C++" | define LANGUAGE "C++" | ||||||
| 
 | 
 | ||||||
| source utils/main.sh | source utils/main.sh | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user