Skip to content
This repository has been archived by the owner on Oct 19, 2020. It is now read-only.

gestalt v7 #5

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,40 +1,27 @@
/*
* Copyright 2019 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2020 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.wildAnimalsMadness.actions;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.logic.behavior.BehaviorAction;
import org.terasology.logic.behavior.core.Actor;
import org.terasology.logic.behavior.core.BaseAction;
import org.terasology.logic.behavior.core.BehaviorState;
import org.terasology.logic.characters.CharacterMoveInputEvent;
import org.terasology.logic.location.LocationComponent;
import org.terasology.behaviors.minion.move.MinionMoveComponent;
import org.terasology.behaviors.minion.move.MoveToAction;
import org.terasology.engine.logic.behavior.BehaviorAction;
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.engine.logic.characters.CharacterMoveInputEvent;
import org.terasology.engine.logic.location.LocationComponent;
import org.terasology.math.TeraMath;
import org.terasology.math.geom.Vector3f;
import org.terasology.minion.move.MinionMoveComponent;
import org.terasology.minion.move.MoveToAction;
import org.terasology.nui.properties.Range;
import org.terasology.wildAnimalsMadness.components.FlockComponent;

@BehaviorAction(name = "flock_move")
public class FlockMoveAction extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(MoveToAction.class);
private static final Logger logger = LoggerFactory.getLogger(MoveToAction.class);
@Range(min = 0, max = 10)
private float distance = 0.2f;
private final float distance = 0.2f;


@Override
Expand Down Expand Up @@ -81,9 +68,10 @@ private boolean processDirect(Actor actor, MinionMoveComponent moveComponent) {
Vector3f drive = new Vector3f();

float yaw = (float) Math.atan2(targetDirection.x, targetDirection.z);
if((targetDirection.x < distance) && (targetDirection.y < distance) && (targetDirection.z < distance)) {
if ((targetDirection.x < distance) && (targetDirection.y < distance) && (targetDirection.z < distance)) {

//if (targetDirection.x * targetDirection.x + targetDirection.z * targetDirection.z <= distance * distance) {
//if (targetDirection.x * targetDirection.x + targetDirection.z * targetDirection.z <= distance *
// distance) {
drive.set(0, 0, 0);
reachedTarget = true;
} else {
Expand All @@ -92,7 +80,8 @@ private boolean processDirect(Actor actor, MinionMoveComponent moveComponent) {
}
float requestedYaw = 180f + yaw * TeraMath.RAD_TO_DEG;

CharacterMoveInputEvent wantedInput = new CharacterMoveInputEvent(0, 0, requestedYaw, drive, false, false, moveComponent.jumpMode, (long) (actor.getDelta() * 1000));
CharacterMoveInputEvent wantedInput = new CharacterMoveInputEvent(0, 0, requestedYaw, drive, false, false,
moveComponent.jumpMode, (long) (actor.getDelta() * 1000));
actor.getEntity().send(wantedInput);


Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
/*
* Copyright 2019 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2020 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.wildAnimalsMadness.actions;

import org.terasology.entitySystem.entity.EntityRef;
import org.terasology.logic.behavior.BehaviorAction;
import org.terasology.logic.behavior.core.Actor;
import org.terasology.logic.behavior.core.BaseAction;
import org.terasology.logic.behavior.core.BehaviorState;
import org.terasology.logic.characters.CharacterMovementComponent;
import org.terasology.logic.behavior.GroupMindComponent;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.logic.behavior.BehaviorAction;
import org.terasology.engine.logic.behavior.GroupMindComponent;
import org.terasology.engine.logic.behavior.core.Actor;
import org.terasology.engine.logic.behavior.core.BaseAction;
import org.terasology.engine.logic.behavior.core.BehaviorState;
import org.terasology.engine.logic.characters.CharacterMovementComponent;
import org.terasology.nui.properties.Range;

@BehaviorAction(name = "set_mad_speed")
Expand All @@ -37,7 +24,8 @@ public void construct(Actor actor) {

if (!hivemindComponent.groupMembers.isEmpty()) {
for (EntityRef entityRef : hivemindComponent.groupMembers) {
CharacterMovementComponent characterMovementComponent = entityRef.getComponent(CharacterMovementComponent.class);
CharacterMovementComponent characterMovementComponent =
entityRef.getComponent(CharacterMovementComponent.class);
characterMovementComponent.speedMultiplier = speedMultiplier;
entityRef.saveComponent(characterMovementComponent);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,8 @@
/*
* Copyright 2019 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2020 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.wildAnimalsMadness.components;

import org.terasology.entitySystem.Component;
import org.terasology.engine.entitySystem.Component;
import org.terasology.math.geom.Vector3f;

public class FlockComponent implements Component {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,17 @@
/*
* Copyright 2019 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2020 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.wildAnimalsMadness.system;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.behaviors.system.FindNearbyPlayersSystem;
import org.terasology.entitySystem.entity.EntityManager;
import org.terasology.entitySystem.entity.EntityRef;
import org.terasology.entitySystem.systems.BaseComponentSystem;
import org.terasology.entitySystem.systems.UpdateSubscriberSystem;
import org.terasology.logic.location.LocationComponent;
import org.terasology.math.geom.Quat4f;
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem;
import org.terasology.engine.logic.location.LocationComponent;
import org.terasology.engine.registry.In;
import org.terasology.math.geom.Vector3f;
import org.terasology.minion.move.MinionMoveComponent;
import org.terasology.registry.In;
import org.terasology.wildAnimalsMadness.components.FlockComponent;

import java.util.HashSet;
Expand All @@ -36,7 +21,7 @@
public class FlockSystem extends BaseComponentSystem implements UpdateSubscriberSystem {

private static final Logger logger = LoggerFactory.getLogger(FindNearbyPlayersSystem.class);
private transient Random random = new Random();
private final transient Random random = new Random();

@In
private EntityManager entityManager;
Expand All @@ -58,19 +43,19 @@ public void update(float delta) {

int flockSize = flock.size();
int baseEntityIndex = random.nextInt(flockSize - 1);
EntityRef baseEntity = (EntityRef)(flock.toArray()[baseEntityIndex]);
EntityRef baseEntity = (EntityRef) (flock.toArray()[baseEntityIndex]);
basePosition = baseEntity.getComponent(LocationComponent.class).getWorldPosition();
baseDirection = baseEntity.getComponent(LocationComponent.class).getWorldDirection();
neighbourRadius = baseEntity.getComponent(FlockComponent.class).searchRadius;

for(EntityRef memberCandidate : flock) {
for (EntityRef memberCandidate : flock) {
Vector3f memberPosition = memberCandidate.getComponent(LocationComponent.class).getWorldPosition();
float distance = Vector3f.distance(memberPosition,baseDirection);
if(distance <= neighbourRadius) {
float distance = Vector3f.distance(memberPosition, baseDirection);
if (distance <= neighbourRadius) {
flockCentre.setX(flockCentre.getX() + memberPosition.getX());
flockCentre.setY(flockCentre.getY() + memberPosition.getY());
flockCentre.setZ(flockCentre.getZ() + memberPosition.getZ());
if(distance < 1f) {
if (distance < 1f) {
flockAvoid.setX(flockAvoid.getX() + basePosition.getX() - memberPosition.getX());
flockAvoid.setY(flockAvoid.getY() + basePosition.getY() - memberPosition.getY());
flockAvoid.setZ(flockAvoid.getZ() + basePosition.getZ() - memberPosition.getZ());
Expand All @@ -79,12 +64,12 @@ public void update(float delta) {
}
}

flockCentre.setX(flockCentre.getX()/flockSize);
flockCentre.setY(flockCentre.getY()/flockSize);
flockCentre.setZ(flockCentre.getZ()/flockSize);
flockCentre.setX(flockCentre.getX() / flockSize);
flockCentre.setY(flockCentre.getY() / flockSize);
flockCentre.setZ(flockCentre.getZ() / flockSize);

for(EntityRef member : flock) {
FlockComponent flockComponent = member.getComponent(FlockComponent.class);
for (EntityRef member : flock) {
FlockComponent flockComponent = member.getComponent(FlockComponent.class);
flockComponent.speed = groupSpeed;
flockComponent.flockCentre = flockCentre;
flockComponent.flockAvoid = flockAvoid;
Expand Down
Loading