Exemplo n.º 1
0
  private void mergePhenomenonTypes(ActInstance salientPlace) {

    if (salientPlace != null) {

      Object phenomenonInstElemnt = null;
      if (m_tracer != null)
        phenomenonInstElemnt = m_tracer.addEventElement("phenomenonInstance", true);

      Primitive enactedPrimitive = salientPlace.getPrimitive();
      Area enactedArea = salientPlace.getArea();

      PhenomenonType actualPhenomenonType = PhenomenonTypeImpl.evoke(salientPlace.getPrimitive());
      actualPhenomenonType.setAspect(salientPlace.getAspect());

      PhenomenonInstance focusPhenomenonInstance = this.getFocusPhenomenonInstance();
      if (focusPhenomenonInstance == null) {
        focusPhenomenonInstance =
            new PhenomenonInstanceImpl(actualPhenomenonType, salientPlace.getPosition());
        this.spacialMemory.addPlaceable(focusPhenomenonInstance);
      }
      Area projectedArea = focusPhenomenonInstance.getArea();

      if (salientPlace.getModality() == ActInstance.MODALITY_MOVE) {
        PhenomenonTypeImpl.merge(enactedPrimitive, PhenomenonTypeImpl.EMPTY);
        focusPhenomenonInstance.setPosition(salientPlace.getPosition());
        if (!focusPhenomenonInstance.getPhenomenonType().equals(PhenomenonTypeImpl.EMPTY)) {
          focusPhenomenonInstance.setPhenomenonType(PhenomenonTypeImpl.EMPTY);
          if (m_tracer != null) {
            if (!actualPhenomenonType.equals(PhenomenonTypeImpl.EMPTY)) {
              PhenomenonTypeImpl.EMPTY.trace(m_tracer, phenomenonInstElemnt);
              m_tracer.addSubelement(
                  phenomenonInstElemnt, "merge", actualPhenomenonType.getLabel());
              m_tracer.addSubelement(phenomenonInstElemnt, "area", enactedArea.getLabel());
            } else {
              PhenomenonTypeImpl.EMPTY.trace(m_tracer, phenomenonInstElemnt);
              m_tracer.addSubelement(
                  phenomenonInstElemnt, "shift", actualPhenomenonType.getLabel());
              m_tracer.addSubelement(phenomenonInstElemnt, "area", enactedArea.getLabel());
            }
          }
        }
      }
      // Follow the phenomenon instance
      else if (enactedArea.equals(projectedArea)) {
        PhenomenonType previousPhenomenonType = focusPhenomenonInstance.getPhenomenonType();
        focusPhenomenonInstance.setPosition(salientPlace.getPosition());
        if (!previousPhenomenonType.equals(actualPhenomenonType)) {
          PhenomenonTypeImpl.merge(enactedPrimitive, previousPhenomenonType);
          // if (salientPlace.getModality() == ActInstance.MODALITY_VISION)
          previousPhenomenonType.setAspect(salientPlace.getAspect());
          if (m_tracer != null) {
            previousPhenomenonType.trace(m_tracer, phenomenonInstElemnt);
            m_tracer.addSubelement(phenomenonInstElemnt, "merge", actualPhenomenonType.getLabel());
            m_tracer.addSubelement(phenomenonInstElemnt, "area", enactedArea.getLabel());
          }
          // preAppearance = AppearanceImpl.createOrGet(actualPhenomenonType, previousArea);
        }
      }
      // Shift to another phenomenon instance
      else {
        focusPhenomenonInstance.setPhenomenonType(actualPhenomenonType);
        focusPhenomenonInstance.setPosition(salientPlace.getPosition());
        if (m_tracer != null) {
          actualPhenomenonType.trace(m_tracer, phenomenonInstElemnt);
          m_tracer.addSubelement(phenomenonInstElemnt, "shift", "");
          m_tracer.addSubelement(
              phenomenonInstElemnt,
              "area",
              focusPhenomenonInstance.getPlace().getArea().getLabel());
        }
      }
    }
  }