parent
c7bd649f2c
commit
92b1a73cc2
@ -0,0 +1,134 @@ |
|||||||
|
#define OLC_PGE_APPLICATION |
||||||
|
#include "olcPixelGameEngine.h" |
||||||
|
|
||||||
|
using namespace olc; |
||||||
|
|
||||||
|
#define PI 3.14159 |
||||||
|
|
||||||
|
// Override base class with your custom functionality
|
||||||
|
class SmartPointerExample : public olc::PixelGameEngine |
||||||
|
{ |
||||||
|
struct Object{ |
||||||
|
vf2d pos; |
||||||
|
Renderable&r; |
||||||
|
Pixel col; |
||||||
|
float radius; |
||||||
|
float dir; |
||||||
|
vf2d spd; |
||||||
|
bool friendly=false; |
||||||
|
bool dead=false; |
||||||
|
const float friction=100; |
||||||
|
Object(vf2d pos,Renderable&r,Pixel col,float radius,float dir) |
||||||
|
:pos(pos),r(r),col(col),radius(radius),dir(dir){}; |
||||||
|
virtual void Collision(Object&collisionObj){}; |
||||||
|
void InternalUpdate(SmartPointerExample*pge,float fElapsedTime){ |
||||||
|
pos+=spd*fElapsedTime; |
||||||
|
if(spd.x>0){ |
||||||
|
spd.x=std::max(0.f,spd.x-friction*fElapsedTime); |
||||||
|
} else { |
||||||
|
spd.x=std::min(0.f,spd.x+friction*fElapsedTime); |
||||||
|
} |
||||||
|
if(spd.y>0){ |
||||||
|
spd.y=std::max(0.f,spd.y-friction*fElapsedTime); |
||||||
|
} else { |
||||||
|
spd.y=std::min(0.f,spd.y+friction*fElapsedTime); |
||||||
|
} |
||||||
|
if(spd.x!=0||spd.y!=0){ |
||||||
|
vf2d normSpd = spd.norm(); |
||||||
|
dir=atan2(normSpd.y,normSpd.x); |
||||||
|
} |
||||||
|
} |
||||||
|
virtual void Update(SmartPointerExample * pge, float fElapsedTime){} |
||||||
|
virtual void Draw(SmartPointerExample*pge){ |
||||||
|
pge->DrawRotatedDecal(pos,r.Decal(),dir,r.Sprite()->Size()/2,{1,1},col);
|
||||||
|
}; |
||||||
|
}; |
||||||
|
struct Player:Object{ |
||||||
|
Player(vf2d pos,Renderable&r,Pixel col,float radius,float dir) |
||||||
|
:Object(pos,r,col,radius,dir){ |
||||||
|
friendly=true; |
||||||
|
} |
||||||
|
void Collision(Object&collisionObj)override{ |
||||||
|
if(!collisionObj.friendly){ |
||||||
|
collisionObj.dead=true; |
||||||
|
} |
||||||
|
} |
||||||
|
void Update(SmartPointerExample*pge,float fElapsedTime)override{ |
||||||
|
if(pge->GetKey(UP).bHeld){ |
||||||
|
spd.y=-32; |
||||||
|
} |
||||||
|
if(pge->GetKey(DOWN).bHeld){ |
||||||
|
spd.y=32; |
||||||
|
} |
||||||
|
if(pge->GetKey(RIGHT).bHeld){ |
||||||
|
spd.x=32; |
||||||
|
} |
||||||
|
if(pge->GetKey(LEFT).bHeld){ |
||||||
|
spd.x=-32; |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
struct Enemy:Object{ |
||||||
|
Enemy(vf2d pos,Renderable&r,Pixel col,float radius,float dir) |
||||||
|
:Object(pos,r,col,radius,dir){ |
||||||
|
friendly=false; |
||||||
|
} |
||||||
|
void Update(SmartPointerExample*pge,float fElapsedTime)override{ |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
std::vector<Object*>objects; |
||||||
|
|
||||||
|
public: |
||||||
|
SmartPointerExample() |
||||||
|
{ |
||||||
|
// Name your application
|
||||||
|
sAppName = "Smart Pointer Example"; |
||||||
|
} |
||||||
|
|
||||||
|
Renderable player_img; |
||||||
|
Renderable enemy_img; |
||||||
|
|
||||||
|
public: |
||||||
|
bool OnUserCreate() override |
||||||
|
{ |
||||||
|
player_img.Load("assets/player.png"); |
||||||
|
// Called once at the start, so create things here
|
||||||
|
objects.push_back(new Player({32,32},player_img,GREEN,8,0)); |
||||||
|
objects.push_back(new Enemy({64,128},player_img,DARK_RED,8,PI/2)); |
||||||
|
objects.push_back(new Enemy({96,164},player_img,DARK_RED,8,1.75*PI)); |
||||||
|
objects.push_back(new Enemy({32,196},player_img,DARK_RED,8,1.25*PI)); |
||||||
|
objects.push_back(new Enemy({72,220},player_img,DARK_RED,8,PI/8)); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
bool OnUserUpdate(float fElapsedTime) override |
||||||
|
{ |
||||||
|
for(Object*o:objects){ |
||||||
|
for(Object*o2:objects){ |
||||||
|
if(o!=o2){ |
||||||
|
auto dist = [&](vf2d pos1,vf2d pos2){return sqrt(pow(pos1.x-pos2.x,2)+pow(pos1.y-pos2.y,2));}; |
||||||
|
if(dist(o->pos,o2->pos)<o->radius+o2->radius){ |
||||||
|
o->Collision(*o2); |
||||||
|
o2->Collision(*o); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
o->Update(this,fElapsedTime); |
||||||
|
o->InternalUpdate(this,fElapsedTime); |
||||||
|
o->Draw(this); |
||||||
|
} |
||||||
|
|
||||||
|
std::erase_if(objects,[&](Object*o){return o->dead;}); |
||||||
|
return true; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
SmartPointerExample demo; |
||||||
|
if (demo.Construct(256, 240, 4, 4)) |
||||||
|
demo.Start(); |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,142 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|Win32"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|Win32"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<VCProjectVersion>16.0</VCProjectVersion> |
||||||
|
<Keyword>Win32Proj</Keyword> |
||||||
|
<ProjectGuid>{079b0015-9351-4303-8977-20b3f48c9666}</ProjectGuid> |
||||||
|
<RootNamespace>SmartPointerExample</RootNamespace> |
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="Shared"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="olcPixelGameEngine.h" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="RawPointerExample.cpp" /> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<ImportGroup Label="ExtensionTargets"> |
||||||
|
</ImportGroup> |
||||||
|
</Project> |
After Width: | Height: | Size: 4.9 KiB |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue