├── Config ├── DefaultEditor.ini ├── DefaultGame.ini └── DefaultEngine.ini ├── Source ├── Boids │ ├── Public │ │ ├── Boid.h │ │ ├── FlockManager.h │ │ ├── PointSpawner.h │ │ ├── TargetObject.h │ │ ├── VolumeSpawner.h │ │ ├── BoidCageSpawner.h │ │ └── VolumeDespawner.h │ ├── Private │ │ ├── Boid.cpp │ │ ├── FlockManager.cpp │ │ ├── PointSpawner.cpp │ │ ├── TargetObject.cpp │ │ ├── VolumeSpawner.cpp │ │ ├── BoidCageSpawner.cpp │ │ └── VolumeDespawner.cpp │ ├── BoidsGameModeBase.cpp │ ├── Boids.cpp │ ├── Boids.h │ ├── BoidsGameModeBase.h │ └── Boids.Build.cs ├── Boids.Target.cs └── BoidsEditor.Target.cs ├── Content └── Boids │ ├── Core │ ├── BP_Boid.uasset │ ├── M_Boid.uasset │ ├── BP_FlockManager.uasset │ ├── BP_PointSpawner.uasset │ ├── BP_TargetObject.uasset │ ├── BP_BoidCageSpawner.uasset │ ├── BP_VolumeDespawner.uasset │ └── BP_VolumeSpawner.uasset │ └── Maps │ └── NestingGrounds.umap ├── Boids.uproject ├── LICENSE ├── .gitignore └── README.md /Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Config/DefaultGame.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Config/DefaultGame.ini -------------------------------------------------------------------------------- /Source/Boids/Public/Boid.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/Boid.h -------------------------------------------------------------------------------- /Source/Boids/Private/Boid.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/Boid.cpp -------------------------------------------------------------------------------- /Content/Boids/Core/BP_Boid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_Boid.uasset -------------------------------------------------------------------------------- /Content/Boids/Core/M_Boid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/M_Boid.uasset -------------------------------------------------------------------------------- /Source/Boids/Public/FlockManager.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/FlockManager.h -------------------------------------------------------------------------------- /Source/Boids/Public/PointSpawner.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/PointSpawner.h -------------------------------------------------------------------------------- /Source/Boids/Public/TargetObject.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/TargetObject.h -------------------------------------------------------------------------------- /Source/Boids/Public/VolumeSpawner.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/VolumeSpawner.h -------------------------------------------------------------------------------- /Content/Boids/Maps/NestingGrounds.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Maps/NestingGrounds.umap -------------------------------------------------------------------------------- /Source/Boids/Private/FlockManager.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/FlockManager.cpp -------------------------------------------------------------------------------- /Source/Boids/Private/PointSpawner.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/PointSpawner.cpp -------------------------------------------------------------------------------- /Source/Boids/Private/TargetObject.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/TargetObject.cpp -------------------------------------------------------------------------------- /Source/Boids/Private/VolumeSpawner.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/VolumeSpawner.cpp -------------------------------------------------------------------------------- /Source/Boids/Public/BoidCageSpawner.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/BoidCageSpawner.h -------------------------------------------------------------------------------- /Source/Boids/Public/VolumeDespawner.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Public/VolumeDespawner.h -------------------------------------------------------------------------------- /Content/Boids/Core/BP_FlockManager.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_FlockManager.uasset -------------------------------------------------------------------------------- /Content/Boids/Core/BP_PointSpawner.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_PointSpawner.uasset -------------------------------------------------------------------------------- /Content/Boids/Core/BP_TargetObject.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_TargetObject.uasset -------------------------------------------------------------------------------- /Source/Boids/Private/BoidCageSpawner.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/BoidCageSpawner.cpp -------------------------------------------------------------------------------- /Source/Boids/Private/VolumeDespawner.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Source/Boids/Private/VolumeDespawner.cpp -------------------------------------------------------------------------------- /Content/Boids/Core/BP_BoidCageSpawner.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_BoidCageSpawner.uasset -------------------------------------------------------------------------------- /Content/Boids/Core/BP_VolumeDespawner.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_VolumeDespawner.uasset -------------------------------------------------------------------------------- /Content/Boids/Core/BP_VolumeSpawner.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodedWorlds/Boids/HEAD/Content/Boids/Core/BP_VolumeSpawner.uasset -------------------------------------------------------------------------------- /Source/Boids/BoidsGameModeBase.cpp: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | 4 | #include "BoidsGameModeBase.h" 5 | 6 | -------------------------------------------------------------------------------- /Source/Boids/Boids.cpp: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | #include "Boids.h" 4 | #include "Modules/ModuleManager.h" 5 | 6 | IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, Boids, "Boids" ); 7 | -------------------------------------------------------------------------------- /Source/Boids/Boids.h: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | 7 | //define custom collision channel for boid avoidance tracing 8 | #define COLLISION_AVOIDANCE ECC_GameTraceChannel1 -------------------------------------------------------------------------------- /Source/Boids/BoidsGameModeBase.h: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | #pragma once 4 | 5 | #include "CoreMinimal.h" 6 | #include "GameFramework/GameModeBase.h" 7 | #include "BoidsGameModeBase.generated.h" 8 | 9 | /** 10 | * 11 | */ 12 | UCLASS() 13 | class BOIDS_API ABoidsGameModeBase : public AGameModeBase 14 | { 15 | GENERATED_BODY() 16 | 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Boids.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class BoidsTarget : TargetRules 7 | { 8 | public BoidsTarget( TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Game; 11 | DefaultBuildSettings = BuildSettingsVersion.V2; 12 | ExtraModuleNames.AddRange( new string[] { "Boids" } ); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/BoidsEditor.Target.cs: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | using System.Collections.Generic; 5 | 6 | public class BoidsEditorTarget : TargetRules 7 | { 8 | public BoidsEditorTarget( TargetInfo Target) : base(Target) 9 | { 10 | Type = TargetType.Editor; 11 | DefaultBuildSettings = BuildSettingsVersion.V2; 12 | ExtraModuleNames.AddRange( new string[] { "Boids" } ); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Boids.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "4.25", 4 | "Category": "", 5 | "Description": "", 6 | "Modules": [ 7 | { 8 | "Name": "Boids", 9 | "Type": "Runtime", 10 | "LoadingPhase": "Default", 11 | "AdditionalDependencies": [ 12 | "Engine" 13 | ] 14 | } 15 | ], 16 | "Plugins": [ 17 | { 18 | "Name": "OculusVR", 19 | "Enabled": false, 20 | "SupportedTargetPlatforms": [ 21 | "Win32", 22 | "Win64", 23 | "Android" 24 | ] 25 | }, 26 | { 27 | "Name": "SteamVR", 28 | "Enabled": false, 29 | "SupportedTargetPlatforms": [ 30 | "Win32", 31 | "Win64", 32 | "Linux", 33 | "Mac" 34 | ] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /Source/Boids/Boids.Build.cs: -------------------------------------------------------------------------------- 1 | // Copyright Epic Games, Inc. All Rights Reserved. 2 | 3 | using UnrealBuildTool; 4 | 5 | public class Boids : ModuleRules 6 | { 7 | public Boids(ReadOnlyTargetRules Target) : base(Target) 8 | { 9 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); 12 | 13 | PrivateDependencyModuleNames.AddRange(new string[] { }); 14 | 15 | // Uncomment if you are using Slate UI 16 | // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); 17 | 18 | // Uncomment if you are using online features 19 | // PrivateDependencyModuleNames.Add("OnlineSubsystem"); 20 | 21 | // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Samuel Harrison 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Visual Studio 2015 user specific files 2 | .vs/ 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | 22 | # Compiled Static libraries 23 | *.lai 24 | *.la 25 | *.a 26 | *.lib 27 | 28 | # Executables 29 | *.exe 30 | *.out 31 | *.app 32 | *.ipa 33 | 34 | # These project files can be generated by the engine 35 | *.xcodeproj 36 | *.xcworkspace 37 | *.sln 38 | *.suo 39 | *.opensdf 40 | *.sdf 41 | *.VC.db 42 | *.VC.opendb 43 | 44 | # Precompiled Assets 45 | SourceArt/**/*.png 46 | SourceArt/**/*.tga 47 | 48 | # Binary Files 49 | Binaries/* 50 | Plugins/*/Binaries/* 51 | 52 | # Builds 53 | Build/* 54 | 55 | # Whitelist PakBlacklist-.txt files 56 | !Build/*/ 57 | Build/*/** 58 | !Build/*/PakBlacklist*.txt 59 | 60 | # Don't ignore icon files in Build 61 | !Build/**/*.ico 62 | 63 | # Built data for maps 64 | *_BuiltData.uasset 65 | 66 | # Configuration files generated by the Editor 67 | Saved/* 68 | 69 | # Compiled source files for the engine to use 70 | Intermediate/* 71 | Plugins/*/Intermediate/* 72 | 73 | # Cache files for the editor to use 74 | DerivedDataCache/* 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Boids 2 | 3 | Boid nesting grounds project. Showing off the emergent flocking behavior from the application and interaction of simple steering forces. Watch these bird-like objects soar through the sky, avoid obstacles, and find other flockmates to fly with! 4 | 5 | [Video of Boid flocking in action](https://youtu.be/FRgidMODDaI) 6 | 7 | ## Project Features 8 | Contains: 9 | * Boid class 10 | An autonomous actor that can be spawned into the level and exhibit a bird-like, flocking motion with other Boid actors. 11 | 12 | * Flock Manager class 13 | Actor placed in the level that stores the perception and steering settings of the boids it controls. Used as a way to manipulate the behavior of the entire flock and optimize flock-wide logic changes. 14 | 15 | * Boid Cage Spawner 16 | An actor that can be placed in the world to spawn and contain Boids in a designated area. Boids that leave the cage boundary are teleported to the other side, similar to the game Asteroids. 17 | 18 | * Point Spawner 19 | An actor you can place in the world and spawn a number of Boids from its location that go in random directions. 20 | 21 | * Volume Spawner 22 | An actor you can place in the world that spawns a set number of Boids in a Volume and headed in the direction of the flow Arrow. Allows the emulation of small burst of Boids exiting a finite space (i.e. nest) or a continuous flow of Boids similar to an enormous flock leaving a cave or directional migration over vast area. 23 | 24 | * Volume Despawner 25 | An actor that can be placed in the world that despawns Boids that enter it. Used with attraction forces from BoidTargetObjects to "pull" Boids into it and emulate flock leaving the world (i.e. entering nest, exiting migration area, etc.). 26 | 27 | * Target Object 28 | An actor that can be placed in the world to attract/repel Boids by applying steering forces on all Boids within its range. 29 | 30 | * Nesting Grounds Level 31 | A tutorial level demonstrating how the systems work. Tweak the flock settings, add obstacles, or modify assets to see how the flock's behavior changes. 32 | 33 | ## Project Details 34 | Engine: Unreal Engine 4 35 | Version: 4.25 36 | Language: C++ 37 | 38 | ## References 39 | Boid behavior based off research done by Craig Reynolds.\ 40 | https://www.red3d.com/cwr/boids/ 41 | Steering behaviors for autonomous characters paper.\ 42 | https://www.red3d.com/cwr/steer/gdc99/ 43 | 44 | This project also was inspirationally fueled from a YouTube talk by Daniel Shiffman.\ 45 | Coding Challenge #124: Flocking Simulation.\ 46 | https://youtu.be/mhjuuHl6qHM 47 | p5js code source and interactive example. 48 | https://github.com/CodingTrain/website/blob/master/CodingChallenges/CC_124_Flocking_Boids/P5/boid.js 49 | https://processing.org/examples/flocking.html 50 | 51 | Collision avoidance system inspired by YouTube demo of Sebastian Lague.\ 52 | Coding Adventure: Boids.\ 53 | https://youtu.be/bqtqltqcQhw 54 | Source (C# in Unity).\ 55 | https://github.com/SebLague/Boids 56 | 57 | Spherical raycast avoidance design from Stackoverflow discussion.\ 58 | https://stackoverflow.com/questions/9600801/evenly-distributing-n-points-on-a-sphere/44164075#44164075 59 | -------------------------------------------------------------------------------- /Config/DefaultEngine.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | [/Script/HardwareTargeting.HardwareTargetingSettings] 4 | TargetedHardwareClass=Desktop 5 | AppliedTargetedHardwareClass=Desktop 6 | DefaultGraphicsPerformance=Maximum 7 | AppliedDefaultGraphicsPerformance=Maximum 8 | 9 | [/Script/Engine.Engine] 10 | +ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/Boids") 11 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/Boids") 12 | +ActiveClassRedirects=(OldClassName="TP_BlankGameModeBase",NewClassName="BoidsGameModeBase") 13 | 14 | [/Script/Engine.CollisionProfile] 15 | -Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False) 16 | -Profiles=(Name="BlockAll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False) 17 | -Profiles=(Name="OverlapAll",CollisionEnabled=QueryOnly,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) 18 | -Profiles=(Name="BlockAllDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False) 19 | -Profiles=(Name="OverlapAllDynamic",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) 20 | -Profiles=(Name="IgnoreOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.",bCanModify=False) 21 | -Profiles=(Name="OverlapOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ",bCanModify=False) 22 | -Profiles=(Name="Pawn",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ",bCanModify=False) 23 | -Profiles=(Name="Spectator",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="WorldStatic",Response=ECR_Block),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore)),HelpMessage="Pawn object that ignores all other actors except WorldStatic.",bCanModify=False) 24 | -Profiles=(Name="CharacterMesh",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object that is used for Character Mesh. All other channels will be set to default.",bCanModify=False) 25 | -Profiles=(Name="PhysicsActor",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=,HelpMessage="Simulating actors",bCanModify=False) 26 | -Profiles=(Name="Destructible",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Destructible",CustomResponses=,HelpMessage="Destructible actors",bCanModify=False) 27 | -Profiles=(Name="InvisibleWall",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldStatic object that is invisible.",bCanModify=False) 28 | -Profiles=(Name="InvisibleWallDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that is invisible.",bCanModify=False) 29 | -Profiles=(Name="Trigger",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that is used for trigger. All other channels will be set to default.",bCanModify=False) 30 | -Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.",bCanModify=False) 31 | -Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.",bCanModify=False) 32 | -Profiles=(Name="UI",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Block),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False) 33 | +Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision") 34 | +Profiles=(Name="BlockAll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ") 35 | +Profiles=(Name="OverlapAll",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ") 36 | +Profiles=(Name="BlockAllDynamic",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ") 37 | +Profiles=(Name="OverlapAllDynamic",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ") 38 | +Profiles=(Name="IgnoreOnlyPawn",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.") 39 | +Profiles=(Name="OverlapOnlyPawn",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ") 40 | +Profiles=(Name="Pawn",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ") 41 | +Profiles=(Name="Spectator",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="Pawn",CustomResponses=((Channel="WorldStatic"),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore)),HelpMessage="Pawn object that ignores all other actors except WorldStatic.") 42 | +Profiles=(Name="CharacterMesh",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="Pawn",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object that is used for Character Mesh. All other channels will be set to default.") 43 | +Profiles=(Name="PhysicsActor",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=,HelpMessage="Simulating actors") 44 | +Profiles=(Name="Destructible",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Destructible",CustomResponses=,HelpMessage="Destructible actors") 45 | +Profiles=(Name="InvisibleWall",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldStatic object that is invisible.") 46 | +Profiles=(Name="InvisibleWallDynamic",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that is invisible.") 47 | +Profiles=(Name="Trigger",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that is used for trigger. All other channels will be set to default.") 48 | +Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.") 49 | +Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.") 50 | +Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ") 51 | +DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="BoidCollisionAvoidance") 52 | -ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall") 53 | -ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn") 54 | -ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic") 55 | -ProfileRedirects=(OldName="SkeletalMeshActor",NewName="PhysicsActor") 56 | -ProfileRedirects=(OldName="InvisibleActor",NewName="InvisibleWallDynamic") 57 | +ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall") 58 | +ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn") 59 | +ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic") 60 | +ProfileRedirects=(OldName="SkeletalMeshActor",NewName="PhysicsActor") 61 | +ProfileRedirects=(OldName="InvisibleActor",NewName="InvisibleWallDynamic") 62 | -CollisionChannelRedirects=(OldName="Static",NewName="WorldStatic") 63 | -CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic") 64 | -CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle") 65 | -CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn") 66 | +CollisionChannelRedirects=(OldName="Static",NewName="WorldStatic") 67 | +CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic") 68 | +CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle") 69 | +CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn") 70 | 71 | [/Script/EngineSettings.GameMapsSettings] 72 | EditorStartupMap=/Game/Boids/Maps/NestingGrounds.NestingGrounds 73 | GameDefaultMap=/Game/Boids/Maps/NestingGrounds.NestingGrounds 74 | 75 | --------------------------------------------------------------------------------