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.
85 lines
3.9 KiB
85 lines
3.9 KiB
1 year ago
|
#pragma region License
|
||
1 year ago
|
/*
|
||
|
License (OLC-3)
|
||
|
~~~~~~~~~~~~~~~
|
||
|
|
||
1 year 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
|
||
2 years ago
|
#pragma once
|
||
|
#include "olcPixelGameEngine.h"
|
||
2 years ago
|
#include "Animation.h"
|
||
|
#include "olcUTIL_Animate2D.h"
|
||
|
#include "Monster.h"
|
||
2 years ago
|
#include "DEFINES.h"
|
||
2 years ago
|
|
||
|
struct Bullet{
|
||
1 year ago
|
friend class AiL;
|
||
2 years ago
|
vf2d vel;
|
||
2 years ago
|
vf2d pos;
|
||
2 years ago
|
float radius;
|
||
|
int damage;
|
||
|
Pixel col;
|
||
1 year ago
|
float lifetime=float(INFINITE);
|
||
2 years ago
|
bool hitsMultiple=false;
|
||
|
bool rotates=false;
|
||
|
bool animated=false;
|
||
2 years ago
|
bool deactivated=false; //A deactivated bullet no longer interacts with the world. It's just a visual.
|
||
2 years 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.
|
||
2 years ago
|
bool friendly=false; //Whether or not it's a player bullet or enemy bullet.
|
||
2 years ago
|
bool upperLevel=false;
|
||
1 year ago
|
bool rendered=false;
|
||
|
bool alwaysOnTop=false;
|
||
2 years ago
|
protected:
|
||
2 years ago
|
float fadeOutTimer=0;
|
||
2 years ago
|
private:
|
||
2 years ago
|
void UpdateFadeTime(float fElapsedTime);
|
||
2 years ago
|
vf2d scale={1,1};
|
||
1 year ago
|
bool dead=false; //When marked as dead it wil be removed by the next frame.
|
||
2 years ago
|
public:
|
||
2 years ago
|
Animate2D::Animation<std::string>animation;
|
||
2 years ago
|
Animate2D::AnimationState internal_animState;
|
||
|
std::map<Monster*,bool>hitList;
|
||
2 years ago
|
virtual ~Bullet()=default;
|
||
2 years ago
|
Bullet(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE,vf2d scale={1,1});
|
||
2 years ago
|
//Initializes a bullet with an animation.
|
||
2 years 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});
|
||
2 years ago
|
public:
|
||
2 years ago
|
virtual void Update(float fElapsedTime);
|
||
2 years 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.
|
||
2 years ago
|
virtual bool PlayerHit(Player*player);
|
||
2 years 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.
|
||
2 years ago
|
virtual bool MonsterHit(Monster&monster);
|
||
2 years ago
|
Animate2D::Frame GetFrame();
|
||
2 years ago
|
virtual void Draw();
|
||
2 years ago
|
bool OnUpperLevel();
|
||
2 years ago
|
};
|