Ejemplo n.º 1
0
void AMobileEnemy::BeginPlay() {
  Super::BeginPlay();
  m_totalDistance = RightDistance + LeftDistance;
  m_currentDistance = LeftDistance;
  m_actualJumpSpeed = 0.0f;
  m_capsuleHeight = CapsuleComponent->GetScaledCapsuleHalfHeight();
  m_capsuleRadious = CapsuleComponent->GetScaledCapsuleRadius();
  m_capsuleHeightPadding = m_capsuleHeight * PADDING_ENEMY_COLLISION_PERCENT;
  m_capsuleRadiousPadding = m_capsuleRadious * 0.55f;
  m_lastPosition = GetActorLocation();
  m_nextPosition = m_lastPosition;
  m_rightVector = GetActorRightVector();
  {
    FVector right = GetActorRightVector();
    right = right;
    m_rightPosition = (m_lastPosition + RightDistance * right) * right;
    m_leftPosition = (m_lastPosition + LeftDistance * -right) * right;
  }
  m_isMoving = !HasTrigger;
  m_initialMovement = m_isMoving;
  m_initialStatus = GetTransform();
  if (Fly)
    m_enableGravity = false;
  RegisterDelegate();
}
void UAbilityTask_WaitGameplayEffectApplied::Activate()
{
	if (GetASC())
	{
		RegisterDelegate();
	}
}
WorldEntityManager::WorldEntityManager(Filesystem::path directory, int worldWidth, int minQuadWidth) : PersistenceEntityManager::PersistenceEntityManager(directory), m_player(nullptr), m_quadTree(Rectangle(0,0,worldWidth,worldWidth),minQuadWidth)
{
	//----------------------------------------------------------------
	// Register the components
	RegisterComponent([] {return new Components::Player();});
	RegisterComponent([] {return new Components::Position();});
	RegisterComponent([] {return new Components::Movement();});
	RegisterComponent([] {return new Components::Collision();});
	RegisterComponent([] {return new Components::Terrain();});
	RegisterComponent([] {return new Components::PositionNormalTextureVBO();});
	RegisterComponent([] {return new Components::PositionNormalTextureTangentColorVBO(); });
	RegisterComponent([] {return new Components::Model();});
	RegisterComponent([] {return new Components::Action();});
	RegisterComponent([] {return new Components::Building();});
	RegisterComponent([] {return new Components::Inventory();});
	//----------------------------------------------------------------
	// Tags
	RegisterDelegate([](string type) {return new Components::Tag(type);}, vector<string>{
		"Water",
		"Tree"
	});
	//----------------------------------------------------------------
	// Parse configuration file
	JsonParser config = JsonParser(std::ifstream("config/WorldEntityManager.json"));
	m_entityRegionWidth = (unsigned int)config["EntityRegionWidth"];
	JsonParser continentConfig = JsonParser(std::ifstream("config/continent.json"));
	m_worldWidth = (unsigned int)continentConfig["terrainMap"]["width"];

	

	//----------------------------------------------------------------
	// Event Handlers
	IEventManager::RegisterHandler(Entity_ComponentAdded, std::function<void(unsigned int, unsigned long)>([=](unsigned int target, unsigned long mask) {
		if (mask == ComponentMask("Position")) {
			AddEntityToRegion(target);
		}
	}));
	//----------------------------------------------------------------
	// Cache entity regions
	auto regions = FindEntities(ComponentMask(vector<string>{"EntityRegion", "Position"}));
	m_entityRegions = std::set<EntityPtr>(regions.begin(),regions.end());
}