| 
									
										
										
										
											2023-11-20 23:25:36 -06:00
										 |  |  | #pragma region License
 | 
					
						
							| 
									
										
										
										
											2023-11-14 18:11:32 -06:00
										 |  |  | /*
 | 
					
						
							|  |  |  | License (OLC-3) | 
					
						
							|  |  |  | ~~~~~~~~~~~~~~~ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-02 00:46:32 -06:00
										 |  |  | Copyright 2024 Joshua Sigona <sigonasr2@gmail.com> | 
					
						
							| 
									
										
										
										
											2023-11-14 18:11:32 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Redistribution and use in source and binary forms, with or without modification, | 
					
						
							|  |  |  | are permitted provided that the following conditions are met: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1. Redistributions or derivations of source code must retain the above copyright | 
					
						
							|  |  |  | notice, this list of conditions and the following disclaimer. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2. Redistributions or derivative works in binary form must reproduce the above | 
					
						
							|  |  |  | copyright notice. This list of conditions and the following	disclaimer must be | 
					
						
							|  |  |  | reproduced in the documentation and/or other materials provided with the distribution. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3. Neither the name of the copyright holder nor the names of its contributors may | 
					
						
							|  |  |  | be used to endorse or promote products derived from this software without specific | 
					
						
							|  |  |  | prior written permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS	"AS IS" AND ANY | 
					
						
							|  |  |  | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | 
					
						
							|  |  |  | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT | 
					
						
							|  |  |  | SHALL THE COPYRIGHT	HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | 
					
						
							|  |  |  | INCIDENTAL,	SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | 
					
						
							|  |  |  | TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR | 
					
						
							|  |  |  | BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
					
						
							|  |  |  | CONTRACT, STRICT LIABILITY, OR TORT	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | 
					
						
							|  |  |  | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
					
						
							|  |  |  | SUCH DAMAGE. | 
					
						
							| 
									
										
										
										
											2023-11-29 00:50:00 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | Portions of this software are copyright © 2023 The FreeType | 
					
						
							|  |  |  | Project (www.freetype.org). Please see LICENSE_FT.txt for more information. | 
					
						
							|  |  |  | All rights reserved. | 
					
						
							| 
									
										
										
										
											2023-11-14 18:11:32 -06:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2023-11-20 23:25:36 -06:00
										 |  |  | #pragma endregion
 | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | #include "Monster.h"
 | 
					
						
							|  |  |  | #include "DEFINES.h"
 | 
					
						
							| 
									
										
										
										
											2024-01-04 05:21:56 -06:00
										 |  |  | #include "AdventuresInLestoria.h"
 | 
					
						
							| 
									
										
										
										
											2023-08-13 20:53:39 -05:00
										 |  |  | #include "MonsterStrategyHelpers.h"
 | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | INCLUDE_game | 
					
						
							|  |  |  | INCLUDE_MONSTER_DATA | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-18 15:40:36 -06:00
										 |  |  | void Monster::STRATEGY::RUN_TOWARDS(Monster&m,float fElapsedTime,std::string strategy){ | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | 	m.targetAcquireTimer=std::max(0.f,m.targetAcquireTimer-fElapsedTime); | 
					
						
							|  |  |  | 	if(m.targetAcquireTimer==0){ | 
					
						
							| 
									
										
										
										
											2023-08-13 22:05:34 -05:00
										 |  |  | 		m.targetAcquireTimer=ConfigFloat("WaitTime"); | 
					
						
							| 
									
										
										
										
											2023-08-13 20:53:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		auto desiredTargetLine = geom2d::line(m.pos,game->GetPlayer()->GetPos()); | 
					
						
							| 
									
										
										
										
											2023-08-13 22:05:34 -05:00
										 |  |  | 		if(desiredTargetLine.length()>=ConfigInt("MaxDistance")/100.f*24){ | 
					
						
							| 
									
										
										
										
											2023-08-13 20:53:39 -05:00
										 |  |  | 			//Trim to max distance desired.
 | 
					
						
							| 
									
										
										
										
											2023-08-13 22:05:34 -05:00
										 |  |  | 			m.target=desiredTargetLine.rpoint(ConfigInt("MaxDistance")/100.f*24); | 
					
						
							| 
									
										
										
										
											2023-08-13 20:53:39 -05:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2023-11-27 02:38:12 -06:00
										 |  |  | 			m.target=desiredTargetLine.upoint(1.2f); | 
					
						
							| 
									
										
										
										
											2023-08-13 20:53:39 -05:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-09-09 07:10:31 -05:00
										 |  |  | 		m.SetState(State::MOVE_TOWARDS); | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | 		m.hasHitPlayer=false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	switch(m.state){ | 
					
						
							| 
									
										
										
										
											2023-09-09 07:10:31 -05:00
										 |  |  | 		case State::MOVE_TOWARDS:{ | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | 			if(geom2d::line(m.pos,m.target).length()>100*fElapsedTime*m.GetMoveSpdMult()){ | 
					
						
							|  |  |  | 				vf2d newPos=m.pos+geom2d::line(m.pos,m.target).vector().norm()*100*fElapsedTime*m.GetMoveSpdMult(); | 
					
						
							|  |  |  | 				if(!m.SetX(newPos.x)||!m.SetY(newPos.y)){ | 
					
						
							|  |  |  | 					m.StartPathfinding(4); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				m.PerformJumpAnimation(); | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2023-09-09 07:10:31 -05:00
										 |  |  | 				m.SetState(State::NORMAL);//Revert state once we've finished moving towards target.
 | 
					
						
							| 
									
										
										
										
											2023-12-19 00:15:47 -06:00
										 |  |  | 				m.UpdateAnimation(MONSTER_DATA[m.name].GetIdleAnimation()); | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		}break; | 
					
						
							| 
									
										
										
										
											2023-09-09 07:10:31 -05:00
										 |  |  | 		case State::PATH_AROUND:{ | 
					
						
							| 
									
										
										
										
											2023-08-13 02:12:19 -05:00
										 |  |  | 			m.PathAroundBehavior(fElapsedTime); | 
					
						
							|  |  |  | 		}break; | 
					
						
							|  |  |  | 		default:{ | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |