nheyek/SDP-2018

View on GitHub
app/src/main/java/ch/epfl/sweng/studyup/npc/NPC.java

Summary

Maintainability
A
40 mins
Test Coverage
package ch.epfl.sweng.studyup.npc;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;

import com.google.android.gms.maps.model.LatLng;

import java.util.ArrayList;
import java.util.List;

import ch.epfl.sweng.studyup.R;
import ch.epfl.sweng.studyup.map.MapsActivity;
import ch.epfl.sweng.studyup.player.Player;
import ch.epfl.sweng.studyup.utils.Constants;
import ch.epfl.sweng.studyup.utils.GlobalAccessVariables;
import ch.epfl.sweng.studyup.utils.Rooms;

import static ch.epfl.sweng.studyup.utils.Utils.getMessagesForNpc;

public abstract class NPC {
    private String name;
    private LatLng npcLatLng;
    private int image;
    private final int MAX_COUNTER = 100;
    private boolean isFirstInteraction = true;
    private Activity currentActivity;
    private int counter = 0;
    private List<Integer> messages;

    public NPC(String name, LatLng latLng, int image, int numberOfMessages) {
        this.name = name;
        npcLatLng = latLng;
        this.image = image;
        this.messages = getMessagesForNpc(name.toLowerCase() + "_message", numberOfMessages);
    }

    public boolean checkNPCInteraction(LatLng playerLatLng) {
        currentActivity = GlobalAccessVariables.MOST_RECENT_ACTIVITY;
        if (!Player.get().getKnownNPCs().contains(name)
                && GlobalAccessVariables.NPCInteractionState
                && !(currentActivity instanceof MapsActivity)
                && Rooms.distanceBetweenTwoLatLng(npcLatLng, playerLatLng) < Constants.NPC_RANGE
                && (counter >= MAX_COUNTER || isFirstInteraction)) {
            counter = 0;
            AlertDialog.Builder builder = new AlertDialog.Builder(currentActivity);
            builder.setTitle(getName() + " " + currentActivity.getString(R.string.NPC_interaction))
                    .setPositiveButton(currentActivity.getString(R.string.NPC_accept), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            currentActivity.startActivity(new Intent(currentActivity, NPCActivity.class).putExtra(Constants.NPC_ACTIVITY_INTENT_NAME, name));
                        }
                    })
                    .setNegativeButton(currentActivity.getString(R.string.NPC_refuse), null);
            AlertDialog dialog = builder.create();
            dialog.show();
            isFirstInteraction = false;
            Player.get().addKnownNPC(this);

            return true;
        }
        ++counter;
        return false;
    }

    abstract void onYesButton(Activity activity);

    public String getName() {
        return name;
    }

    public int getImage() {
        return image;
    }

    public LatLng getPosition() {
        return npcLatLng;
    }

    public List<Integer> getMessages(){
        return new ArrayList<>(messages);
    }
}