The open source repository for the action RPG game in development by Sig Productions titled 'Adventures in Lestoria'!
https://forums.lestoria.net
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.8 KiB
84 lines
3.8 KiB
1 year ago
|
#pragma region License
|
||
1 year ago
|
/*
|
||
|
License (OLC-3)
|
||
|
~~~~~~~~~~~~~~~
|
||
|
|
||
11 months ago
|
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com>
|
||
1 year ago
|
|
||
|
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.
|
||
1 year ago
|
|
||
|
Portions of this software are copyright © 2023 The FreeType
|
||
|
Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
|
||
|
All rights reserved.
|
||
1 year ago
|
*/
|
||
1 year ago
|
#pragma endregion
|
||
1 year ago
|
#pragma once
|
||
1 year ago
|
#include "Animation.h"
|
||
|
#include "olcUTIL_Animate2D.h"
|
||
|
#include "Monster.h"
|
||
1 year ago
|
#include "DEFINES.h"
|
||
1 year ago
|
|
||
|
struct Bullet{
|
||
11 months ago
|
friend class AiL;
|
||
1 year ago
|
vf2d vel;
|
||
1 year ago
|
vf2d pos;
|
||
1 year ago
|
float radius;
|
||
|
int damage;
|
||
|
Pixel col;
|
||
1 year ago
|
float lifetime=float(INFINITE);
|
||
1 year ago
|
bool hitsMultiple=false;
|
||
|
bool rotates=false;
|
||
|
bool animated=false;
|
||
1 year ago
|
bool deactivated=false; //A deactivated bullet no longer interacts with the world. It's just a visual.
|
||
1 year ago
|
float fadeOutTime=0; //Setting the fade out time causes the bullet's lifetime to be set to the fadeout time as well, as that's when the bullet's alpha will reach 0, so it dies.
|
||
1 year ago
|
bool friendly=false; //Whether or not it's a player bullet or enemy bullet.
|
||
1 year ago
|
bool upperLevel=false;
|
||
1 year ago
|
bool rendered=false;
|
||
|
bool alwaysOnTop=false;
|
||
1 year ago
|
protected:
|
||
1 year ago
|
float fadeOutTimer=0;
|
||
1 year ago
|
private:
|
||
1 year ago
|
void UpdateFadeTime(float fElapsedTime);
|
||
1 year ago
|
vf2d scale={1,1};
|
||
1 year ago
|
bool dead=false; //When marked as dead it wil be removed by the next frame.
|
||
1 year ago
|
public:
|
||
1 year ago
|
Animate2D::Animation<std::string>animation;
|
||
1 year ago
|
Animate2D::AnimationState internal_animState;
|
||
|
std::map<Monster*,bool>hitList;
|
||
1 year ago
|
virtual ~Bullet()=default;
|
||
1 year ago
|
Bullet(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE,vf2d scale={1,1});
|
||
1 year ago
|
//Initializes a bullet with an animation.
|
||
1 year ago
|
Bullet(vf2d pos,vf2d vel,float radius,int damage,std::string animation,bool upperLevel,bool hitsMultiple=false,float lifetime=INFINITE,bool rotatesWithAngle=false,bool friendly=false,Pixel col=WHITE,vf2d scale={1,1});
|
||
1 year ago
|
public:
|
||
1 year ago
|
virtual void Update(float fElapsedTime);
|
||
1 year ago
|
//Used by special bullets to control custom despawning behavior! Return true when the bullet should be destroyed. Return false to handle it otherwise (like deactivating it instead). You become responsible for getting rid of the bullet.
|
||
1 year ago
|
virtual bool PlayerHit(Player*player);
|
||
1 year ago
|
//Used by special bullets to control custom despawning behavior! Return true when the bullet should be destroyed. Return false to handle it otherwise (like deactivating it instead). You become responsible for getting rid of the bullet.
|
||
1 year ago
|
virtual bool MonsterHit(Monster&monster);
|
||
1 year ago
|
Animate2D::Frame GetFrame();
|
||
1 year ago
|
virtual void Draw();
|
||
1 year ago
|
bool OnUpperLevel();
|
||
1 year ago
|
};
|